[PYTHON] Ich habe mit Single GANs (SinGAN) gespielt (+ Ich habe auch die Punkte zusammengefasst, die ich nur schwer implementieren konnte (über Pfad, Linux-Befehl, Googlecolab-Nutzung usw.)).

Einführung

GANs: Die Technologie feindlicher Generationsnetzwerke entwickelt sich von Tag zu Tag weiter. Sogar ich, der in einem Nicht-IT-System arbeitet (Ingenieur in der Fertigungsindustrie), ist eine Technologie, die von großem Interesse ist. Es ist am besten, sie zu implementieren und damit zu spielen, um ein tieferes Verständnis der Technologie zu erlangen. Daher möchte ich dieses Mal einen 2019 angekündigten Algorithmus namens ** Single GANs ** implementieren. Da es sich um einen Algorithmus handelt, der aus einem einzelnen Bild ein zusammengesetztes Bild generiert, handelt es sich um einen Artikel, den ich tatsächlich zu verschieben versucht habe.

Es gab jedoch einige Hürden für mich, dieses neueste Papier umzusetzen, daher schreibe ich einen Artikel, der sich auf die Schwierigkeiten konzentriert.

Dieses Papier

Hier ist das Papier, das ich dieses Mal implementieren möchte.

SinGAN: Learning a Generative Model from a Single Natural Image https://arxiv.org/abs/1905.01164

Es kann nur ein einziges Bild als Lehrerdaten verwendet werden, und ein neues Bild in der Nähe dieser Lehrerdaten kann generiert werden. Darüber hinaus können Sie aus einem handgeschriebenen Bild ein Bild erstellen, das dem Originalbild nahe kommt (Malen zu Bild), oder ein anderes Bild überlagern und in denselben Stil konvertieren (Harmonisierung).

image.png

image.png

Ich kann die detaillierte Erklärung des Algorithmus nicht vollständig verstehen, daher würde ich mich freuen, wenn Sie die Erklärungen anderer Personen sehen könnten.

[Artikelkommentar] SinGAN: Lernen eines generativen Modells aus einem einzigen natürlichen Bild https://qiita.com/takoroy/items/27f918a2fe54954b29d6

Als ich die Zeitung von SinGAN las, war es erstaunlich https://qiita.com/yoyoyo_/items/81f0b4ca899152ac8806

Nun, um es zu implementieren, habe ich zuerst die Programme von diesem Github heruntergeladen und die Zip-Datei entpackt. https://github.com/tamarott/SinGAN

Übergeben Sie den Pfad der Umgebungsdatei

Übrigens wird der Inhalt des Dokuments bei der Implementierung häufig durch einen Befehl vom Terminal angewiesen, wie in der folgenden Abbildung dargestellt.

Terminal


python -m pip install -r requirements.txt

Als ich zum ersten Mal versuchte, die erforderlichen Bibliotheken damit zu installieren, wurde die folgende Fehlermeldung angezeigt. 001.png

Dies bedeutet, dass python.exe nicht mit dem Befehl python gestartet werden kann = der Pfad wird nicht übergeben. Daher müssen Einstellungen für die Übergabe des Pfads vorgenommen werden.

Klicken Sie mit der rechten Maustaste auf das Windows-Symbol. ⇒ Nehmen Sie Einstellungen vor (unsere Windows 10-Startseite). image.png

Geben Sie dann Umgebung in das Suchfeld ein, und das Bearbeitungsfeld für Systemumgebungsvariablen wird angezeigt. image.png

Klicken Sie dann in den Systemeigenschaften auf Umgebungsvariablen. image.png

Bearbeiten Sie den Pfad hier. image.png Wählen Sie Neu und geben Sie den Pfad des Ordners ein, in dem python.exe gespeichert ist. Dadurch kann der Pfad passieren und das Problem lösen. image.png

Wenn dies erfolgreich ist, können Sie dies folgendermaßen bestätigen.

Argument Parser verstehen

Als nächstes dachte ich, dass der Python-Befehl übergeben wurde, und als ich zum nächsten überging, erschien ein solcher Befehl. Ich verstehe, dass ich random_samples.py ausführe, aber es ist ein Befehl mit Doppel- und Bindestrichen danach. Bei der Prüfung wird ein Modul namens Argument Parser verwendet, mit dem Sie Argumente aus Terminalbefehlen angeben können.

Referenz-URL https://qiita.com/kzkadc/items/e4fc7bc9c003de1eb6d0

Terminal


python random_samples.py --input_name <training_image_file_name> --mode random_samples --gen_start_scale <generation start scale number>

Es ist praktisch, es über die Befehlszeile angeben zu können, aber was soll ich tun, wenn ich es mit dem Kernel vs vs code oder jupyter verwenden möchte? Es wurde unter dieser URL ausführlich beschrieben. http://flat-leon.hatenablog.com/entry/python_argparse


# 3.Analysieren Sie Startparameter mit dem ArgumentParser-Objekt
args = parser.parse_args()

Es scheint, dass die Parameter beim Start hier analysiert werden. Sie können sie also auf dem Kernel starten, indem Sie eine Liste usw. erstellen und hier übergeben.

Fang an zu lernen

Nachdem Sie den Dateipfad und das Argument kennen, lassen Sie es uns ausführen. Ich habe jedoch festgestellt, dass das Lernen auf einem kleinen PC viel Zeit in Anspruch nimmt.

Beim ersten Lernen dieses Mal vergingen ungefähr 3 Stunden im Querschnitt, wo 6 Mal (in Skala 5) von 9 Mal (Skala 8) ausgeführt wurden. Immerhin können Sie sehen, dass die Berechnung der Bildverarbeitung einschließlich GAN sehr lange dauert. Aus diesem Grund habe ich mich entschlossen, die GPU von Google Colab hier gehorsam zu verwenden.

Laden Sie diesen Ordner zusammen auf Google Drive hoch. Verschieben Sie dann zuerst das Verzeichnis in diesen Speicherordner.

GoogleColab


cd  /content/drive/My Drive/SinGAN-master

Jetzt können Sie .py-Dateien usw. mithilfe von Linux-Befehlen verschieben.

Bilderzeugung aus Rauschen (Zug)

Wir werden lernen, das Originalbild aus dem Rauschbild zu ähneln. Die Anfangsphase des Lernens beginnt mit einer sehr kleinen Bildgröße und steigt allmählich auf die ursprüngliche Bildgröße an.

GoogleColab


!python main_train.py --input_name cows.png

Wenn Sie Linux-Befehle verwenden, funktioniert dies, indem Sie! First setzen. Wenn Sie es bewegen, können Sie sehr schnell fortfahren. Die Berechnung war in ca. 30 Minuten abgeschlossen. Die Installation der Bibliothek ist ebenfalls sehr einfach. Daher ist Google Colab diejenige, die viel Verarbeitungszeit in Anspruch nimmt. ..

image.png

Vergleichen wir nun das generierte Bild mit dem Originalbild. Die Zunahme der Anzahl der Skalen ist das Ergebnis der Zunahme der Anzahl der Berechnungen. ** Hmm, es ist nicht von der Realität zu unterscheiden. ** Die Bildgröße ist klein, wenn die Anzahl der Skalen gering ist, aber zum einfachen Vergleich dieselbe Größe. Auf diese Weise können Sie sehen, dass sich das Bild allmählich zu einem klareren Bild ändert, das näher am Originalbild liegt. Darüber hinaus können Sie feststellen, dass sich nicht nur die Bildqualität verbessert, sondern auch die Platzierung der Kühe jedes Mal anders ist. Sie sehen, dass es sich nicht um einen Prozess handelt, der lediglich die Bildqualität verbessert.

Verarbeitung, um dem Originalbild eines handgeschriebenen Bildes zu ähneln (Paint to Image)

Führen Sie als Nächstes ein Programm aus, das einem Lehrerdatenbild aus einem handgeschriebenen Bild ähnelt. Wenn Sie dies tun, müssen Sie zuerst die Lehrerdaten trainieren, denen Sie ähneln möchten.

GoogleColab


!python paint2image.py --input_name volacano.png --ref_name volacano3.png --paint_start_scale 1

image.png

Mal sehen, das Ergebnis. ** Ich konnte es nicht gut reproduzieren. ** Das Originalbild befindet sich unten rechts. Und je kleiner der Wert von start_scale ist, desto höher ist die Anzahl der Trainings. Dieses Mal denke ich, dass start_scale3 und 4 am nächsten sind.

Wahrscheinlich scheint es schwierig zu imitieren, wenn die Originalbilder in der Handschrift nicht ähnlich sind **.

Versuchen Sie, die Bildgröße frei zu ändern (zufällige Stichproben beliebiger Größen)

Als nächstes wird die Größe des Bildes basierend auf dem Originalbild geändert.

GoogleColab


!python random_samples.py --input_name cows.png --mode random_samples_arbitrary_sizes --scale_h 5 --scale_v 4

scale_h ist die horizontale Skala und 1 gibt 1x an. Außerdem ist scale_v die vertikale Skala.

49.png

Als Test habe ich ein großes Bild gemacht. ** Aber es fühlt sich schlecht an. .. Es ist ein Bild von Kühen geworden, die in der Prärie gedrängt sind. Entschuldigung. .. ** ** **

Synthetisieren Sie nahe am ursprünglichen Stil (Harmonisierung)

Schließlich müssen Sie es entsprechend dem Stil des Originalbilds ändern. Auch in diesem Fall müssen Sie zuerst mit dem Zug trainieren. Dieses Mal habe ich versucht, das Foto, das ich gemacht habe, mit dem kostenlosen Bildfisch zu kombinieren.

GoogleColab


!python harmonization.py --input_name fish.png --ref_name fish1.png --harmonization_start_scale 1

image.png

Was für ein großer Fisch verwandelte sich in eine hellblaue Fischschwarm wie Swimmy (oder Pokemons Yowashi). Es muss auf der Grundlage der ursprünglichen Schule der roten Fische verarbeitet worden sein. Es ist ein sehr interessanter Algorithmus.

abschließend

Ich bewegte tatsächlich meine Hände und spielte mit Single GANs, der neuesten Zeitung von GAN. Es stellte sich als sehr einfach zu bedienen heraus.

Ich habe viel über das Erstellen der Umgebung bei der Implementierung gelernt. Insbesondere hat mich beeindruckt, dass Google Colab es einfach macht, auch Modelle mit hoher Rechenlast zu verschieben und die Ergebnisse anzuzeigen. Ich habe die Größe von Google wieder gespürt.

Dieses Mal habe ich mich darauf konzentriert, es zu implementieren und damit zu spielen, daher möchte ich mein Verständnis der theoretischen Inhalte vertiefen. Ich habe bereits einige abgeleitete Artikel veröffentlicht, daher möchte ich deren Relevanz erfahren.

Recommended Posts

Ich habe mit Single GANs (SinGAN) gespielt (+ Ich habe auch die Punkte zusammengefasst, die ich nur schwer implementieren konnte (über Pfad, Linux-Befehl, Googlecolab-Nutzung usw.)).
Es fiel mir schwer, über einen Browser (und ArchLinux) auf Hadoop3.0.0 zuzugreifen.
Eine Geschichte, bei der es mir schwer gefallen ist, mit der ersten Webanwendung eine "App zu erstellen, die Bilder wie Gemälde konvertiert"
[Einführung in StyleGAN] Ich habe mit "The Life of a Man" ♬ gespielt