Wie man einen Bot macht, der ein Foto in einen Comic verwandelt. Zweiter Teil Model Training

⇨ Der erste Teil
⇨ Dritter Teil

Hallo nochmal!

Wie Sie sehen, haben die Feiertage die Zeitachse für Artikel etwas verkrüppelt.
Ich denke, viele haben es in dieser Zeit geschafft, ihr Modell zu trainieren und zumindest mit verschiedenen Datensätzen zu experimentieren.
1. Legen Sie die Verteilung
2. Bilder herunterladen
3. ???
4. Profit!
Wenn Sie mit unseren neuronalen Netzen nicht vertraut waren oder mit dem Lesen dieses Artikels beginnen, haben Sie, wie es heißt, keine Zeit, dies zu erklären. Wir nehmen das Distributionskit, laden die erforderlichen Bilder herunter und los geht's!

Detaillierte Anweisungen finden Sie im vorherigen Artikel der Serie .

Der erste Pfannkuchen ist klumpig


Als ich das Modell zum ersten Mal ohne weiteres für @ photo2comicsbot trainierte, habe ich nur ungefähr 1000 Seiten Comics in einen Datensatz gestopft.
Ja, zusammen mit Deckblättern, Ankündigungen und anderen Füllern.

Am Eingang sah es so aus:



Das Ergebnis ist entsprechend:







Weitere Bilder

















Das Modell vermittelt perfekt die allgemeinen Unterschiede zwischen Comics und Fotos:

  • Typische Farbkorrektur
  • Gliederungsauswahl
  • Blockieren
  • Textwolke

Grundsätzlich kann diese Option für die Produktion durchaus ausreichen.

Aber ich habe mich gefragt, welche Ergebnisse mit einem „saubereren“ Datensatz erzielt werden können.

Nimm zwei


Für das nächste Experiment habe ich die Seiten mit einem Block belassen und aus dem Rest die größten Stücke, bestehend aus einem Block, ausgeschnitten, um die vertikalen und horizontalen Trennlinien im endgültigen Modell zu beseitigen.
Vergessen Sie nicht, die vorherige Version zu speichern, wenn Sie Änderungen an Ihrem Datensatz vornehmen, z. B. Fotos löschen oder hinzufügen. Sie haben einen Ort, an den Sie zurückkehren können, wenn etwas schief geht.
Der zweite Datensatz sah folgendermaßen aus:



Das Ergebnis liegt auf der Hand:







Weitere Bilder












Die Trennlinien verschwanden, aber mit ihnen die Ausdruckskraft, die der Text in den Wolken hinterließ: Sie traten viel seltener im Datensatz auf und waren nicht mehr das Hauptmerkmal.

Der leere Raum, der früher mit Text gefüllt war, ist jetzt mit psychedelischem Rauschen gefüllt.

Das dritte Mal ist ein Zauber


Ich beschloss, den Text vollständig zu entfernen und nur die Teile der Comics zu belassen, in denen er nicht vorhanden ist. Niemand überlebte: keine Wolke, keine Überschriften oder Seriennamen.

Datensatz nach dem "sprachlichen Völkermord":



Das Endergebnis:







Weitere Bilder










Einerseits gibt es weniger Artefakte, andererseits ist die Ausdruckskraft weg. Da im GAN-Training die Qualität des Ergebnisses weitgehend von Ihnen und mir bestimmt wird, gibt es kein einziges Rezept für ein gutes Modell.

Schönheit liegt im Auge des Betrachters, also haben Sie keine Angst zu experimentieren und wählen Sie, was Ihnen am besten gefällt.

Auf die Waffe!


Nun, wir haben bereits über die wichtigsten Fallstricke und Methoden des Umgangs mit ihnen gesprochen. Es ist Zeit, sich an die Arbeit zu machen.

Gehen Sie zu dem Ordner, in den wir die Distribution heruntergeladen haben. Ich möchte Sie daran erinnern, dass es pytorch-CycleGAN-and-pix2pix hieß

Da wir Anweisungen für Dummies haben, werden wir den Verteilungscode nicht berühren, da alle erforderlichen Parameter über die Befehlszeile eingestellt werden können.

In dieser Verteilung findet das Standardtraining über zweihundert Epochen mit einer linearen Dämpfung der Lernrate nach der hundertsten Epoche statt.
Die maximale Auflösung, die meine 8-Gigabyte-Karte beherrschte, betrug 400 x 400. Das komplette Training hat ungefähr 33 Stunden gedauert, also machen wir einen kleinen Life-Hack. Zuerst werden wir das Modell in 128x128 Bildern trainieren, dann in 256x256, und erst im Endstadium werden wir ihr unsere wunderschönen 400x400 zeigen.
Die erste Stufe wird 100 Epochen dauern, die zweite und die dritte jeweils 50. Dadurch können wir die Trainingszeit um fast die Hälfte reduzieren.

Wie die Praxis zeigt, ist das Ergebnis mit diesem Ansatz nicht schlechter und manchmal sogar besser als beim sofortigen Training mit maximaler Auflösung.
Vielleicht genug Theorie, es ist Zeit, sich der Praxis zuzuwenden.

Geben Sie an der Eingabeaufforderung Folgendes ein.

Stufe eins


python train.py --dataroot {dataset root folder} --name {model name} --model cycle_gan --crop_size 128 --load_size 180 --init_type kaiming --netG resnet_9blocks --no_dropout --batch_size 4 

Vergessen Sie nicht, die Klammern durch Ihre eigenen Werte zu ersetzen.

Wir werden einige Parameter genauer analysieren:

 --batch_size {number} 

Dieser Parameter ist für die Anzahl der pro Zyklus verarbeiteten Bilder verantwortlich, was sich positiv auf die Geschwindigkeit und negativ auf die Völlerei des Modells auswirkt.

Wählen Sie in jeder Phase die maximal mögliche --batch_size aus, die aufgrund des Mangels an GPU-Speicher keine Fehler verursacht.

 -- dataroot {dataset root folder} 

- Ordner mit unserem Datensatz. Darin sollten sich die Ordner trainA, trainB, testA, testB befinden, wie im vorherigen Artikel beschrieben.

 --name {model name} 

- Der Name Ihres Projekts. Es kann beliebig sein, aber ich empfehle, die Modellarchitektur, die maximale Auflösung und den Namen des Datensatzes in den Namen aufzunehmen.
Zum Beispiel: "resnet9_128to400_comics8"
Sie können also zwischen Experimenten mit verschiedenen Parametern und Daten unterscheiden.

Die erste Stufe des Trainings kann im hundertsten Zeitalter gestoppt werden.

Sie können den Fortschritt über den Browser verfolgen: localhost : 8097 /
(oder ein anderer Link, der in der Konsole angezeigt wird)

Stufe zwei


 python train.py --dataroot {dataset root folder} --name {model name} --model cycle_gan --crop_size 256 --load_size 290 --init_type kaiming --netG resnet_9blocks --no_dropout --batch_size 2 --epoch 100 --epoch_count 0 --continue_train 

Es ist wichtig, die Ära anzugeben, in der wir unser Studium in der ersten Phase abgeschlossen haben.
"--Epoch 100" bedeutet, dass wir das Modell vom Kontrollpunkt der hundertsten Ära laden
"--Epoch_count 0" bedeutet, dass wir mit der maximalen Lerngeschwindigkeit von vorne beginnen.

Die zweite Stufe des Trainings kann in der 50. Ära gestoppt werden.

Stufe drei


 python train.py --dataroot {dataset root folder} --name {model name} --model cycle_gan --crop_size 400 --load_size 430 --init_type kaiming --netG resnet_9blocks --no_dropout --batch_size 1 --epoch 50 --epoch_count 0 --continue_train 


Die dritte Stufe des Trainings kann im 50. Zeitalter abgebrochen werden, dies ist jedoch Geschmackssache. Sie können bis zum Ende abschließen und das gewünschte Zwischenergebnis auswählen. Es ist wichtig zu bedenken, dass das Ergebnis in der 200. Ära schlechter sein kann als in der 150. Ära.

Jetzt geh raus und schau, was du getan hast


Während des Trainings werden das Modell und die Zwischenergebnisse in einem Ordner gespeichert
/ pytorch-CycleGAN-and-pix2pix / checkpoints / {Modellname}

Um das Modell zu testen, geben Sie einfach die Befehlszeile ein:

 python test.py --dataroot {dataset root folder} --name {model name} --model cycle_gan --netG resnet_9blocks --crop_size 512 --load_size 580 --epoch {epoch name} 

Sie können das Ergebnis in einem Testdatensatz für einen beliebigen Prüfpunkt anzeigen. Geben Sie ihn einfach als {Epochenname} an. Wenn {Epochenname} nicht angegeben ist, wird der letzte Prüfpunkt verwendet.

Das Ergebnis wird im Ordner gespeichert:
/pytorch-CycleGAN-and-pix2pix/results/{model name}/test_{epoch name}
Um nicht zu verwechseln, welches Modell auf welchem ​​Datensatz welches Ergebnis liefert,
Fange an, ein kleines Tagebuch zu führen. Erfassen Sie Basisdaten und Lernergebnisse.

Zum Beispiel die Befehlszeile und die Zeit, bis zu der Sie gekommen sind. Diese Daten reichen aus, um die Trainingsparameter und den Datensatz, auf den wir trainiert haben, zu speichern.

Was ist schließlich der Unterschied zwischen einem wissenschaftlichen Experiment und herumalbern? Dass bei uns alles dokumentiert ist!
Das ist alles für heute! Im nächsten Artikel erfahren Sie, wie Sie ein fertiges Modell exportieren und in der Cloud hosten.

Hab keine Angst zu experimentieren. Probieren Sie verschiedene Datensätze aus, vergleichen Sie die Ergebnisse und teilen Sie sie in den Kommentaren mit!

Bis bald

⇨ Nächster Teil

Source: https://habr.com/ru/post/de483168/


All Articles