Die Technologie namens GAN (Genarative Adversarial Network), die durch tiefes Lernen neue Bilder aus vorhandenen Bildern erzeugt, war die Technologie, von der ich beim tiefen Lernen am meisten beeindruckt war. Da das Lernen jedoch normalerweise eine große Menge an Trainingsdaten und -zeit erfordert, ist sie recht individuell. Ich konnte es nicht versuchen. Zu dieser Zeit habe ich das folgende Papier gesehen, in dem ein GAN entwickelt wurde, das aus nur einem Trainingsbild generiert werden kann, und es untersucht.
Dies ist ein im März dieses Jahres eingereichtes Papier, das letztes Jahr eingereicht wurde.
SinGAN: Learning a Generative Model from a Single Natural Image
Es scheint eine Verbesserung von SinGAN (Single-Image-GAN) zu sein, die in vorgeschlagen wurde.
GAN GAN (Hostile Generation Network) selbst ist bekannt und wird auf vielen Websites erklärt, daher werde ich die Details weglassen. Bitte beziehen Sie sich auf hier. GAN ist eines der "Generationsmodelle", die die Verteilung von Trainingsdaten lernen und ähnliche Daten generieren. Erstellen Sie einen Generator, der gefälschte Daten generiert, und einen Diskriminator, der sie von den realen unterscheidet, und trainieren Sie sie abwechselnd. Dadurch werden schließlich Daten generiert, die nicht von der Realität zu unterscheiden sind. Dies wird oft mit gefälschten Rechnungen verglichen. Der Fälscher (Generator) lernt, die Polizei (Diskriminator) zu täuschen, und die Polizei lernt, die gefälschte Rechnung zu erkennen. Hier sind die Trainingsdaten $ \ boldsymbol {x} $, das Rauschen ist $ z $, die Wahrscheinlichkeitsverteilung ist $ p (\ boldsymbol {x}) $, $ p (z) $, der Generator ist $ G $ und der Diskriminator ist $ D. Wenn die Wahrscheinlichkeit, dass $, Discriminator $ \ boldsymbol {x} $ korrekt identifiziert, $ D (\ boldsymbol {x}) $ ist und die aus $ z $ des Generators generierten Daten $ G (z) $ sind, lautet die Zielfunktion wie folgt. Es sieht aus wie.
{\rm min}_{G}{\rm max}_{D}V(D,G)=\mathbb{E}_{\boldsymbol{x}\sim p_{data}(\boldsymbol{x})}[{\rm log}D(\boldsymbol{x})]+\mathbb{E}_{z\sim p_{z}(z)}[{\rm log}(1-D(G(z)))]
Der Generator verwechselt die reale Sache mit einer Fälschung ($ D (\ boldsymbol {x}) \ bis 0
SinGAN Herkömmliche GAN erfordern eine große Menge an Trainingsdaten zum Lernen, aber SinGAN (Single-Image-GAN) ist eine GAN, die aus einem einzelnen Bild gelernt werden kann, wie der Name schon sagt. Zu den SinGAN-Aufgaben gehören die bedingungslose Bilderzeugung und die Bildharmonisierung. (Siehe unten)
In SinGAN mehrere, wie in der Abbildung gezeigt (zitiert aus Paper Short Summary) Mit dem Generator empfängt jeder Generator das Ausgabebild des vorherigen Generators als Eingabe. Außerdem lernt jeder Generator einzeln und das Gewicht des vorherigen Generators ist zum Zeitpunkt des Lernens festgelegt. (Lerne zuerst G0, repariere G0 und lerne G1, repariere G0 und G1 und lerne G2 ...) Der wichtige Punkt hierbei ist, dass Sie mit Discriminator das Bild als Patch und nicht als Ganzes anzeigen können, um ein Bild zu erstellen, das an einem Punkt wie das Original aussieht, aber als Ganzes anders aussieht. (Split Colosseo in der Abbildung)
ConSinGAN Da festgestellt wurde, dass die oben beschriebene Methode die Interaktion zwischen Generatoren einschränkt, ist die neu vorgeschlagene Methode ConSinGAN (Concurrently-Single-Image-GAN), die gleichzeitig (Concurrently) lernt, ohne den Generator zu reparieren. ist.
Wenn Sie alle Generatoren gleichzeitig lernen, werden Sie überanpassen, sodass die folgenden zwei Punkte in das Papier aufgenommen werden.
Wenn Sie hier die Lernrate reduzieren, werden verschiedene generierte Bilder erstellt, sodass die Reproduzierbarkeit des Trainingsbilds verloren geht und eine Kompromissbeziehung besteht.
Wenn Sie diesmal die Anzahl der Generatoren mit dieser ConSinGAN-Lernmethode reduzieren, beträgt die Lernzeit im Vergleich zu SinGAN etwa 1/6, und es wird eine höhere Leistung erzielt.
Sowohl Genarator als auch Discriminator haben eine Struktur, in der mehrere Faltschichten gestapelt sind, wie in der Abbildung gezeigt (zitiert aus Paper). Hier wird die Feature-Map, die der Eingang für den nächsten Generator sein wird, hochgesampelt, dann wird Rauschen für die Diversität hinzugefügt, und der Ausgang wird durch eine Restverbindung verbunden, so dass er nicht wesentlich abweicht.
Die Zielfunktion im Stadium $ n $ ist wie folgt.
{\rm min}_{G_{n}}{\rm max}_{D_{n}}L_{\rm adv}(G_n,D_n)+\alpha L_{\rm rec}(G_n)
Hier verwendet $ L_ {\ rm adv} (G_n, D_n) $ die Wasserstein-Distanz als Zielfunktion WGAN-GP (Paper //arxiv.org/abs/1704.00028)) ist ein Begriff, der die Genauigkeit der Identifizierung ausdrückt, und $ L_ {\ rm rec} (G_n) $ drückt die Stabilität des Lernens durch den Abstand zwischen dem erzeugten Bild und dem Trainingsbild aus. Es ist ein Begriff.
L_{\rm adv}(G_n,D_n)=\mathbb{E}_{z\sim p_{z}(z)}[D(G(z))]-\mathbb{E}_{{\boldsymbol x}\sim p_{data}}[D({\boldsymbol x})]+\lambda \mathbb{E}_{{\hat{\boldsymbol x}}\sim p_{{\hat{\boldsymbol x}}}}[(||\nabla_{{\hat{\boldsymbol x}}} D({\hat{\boldsymbol x}})||_2-1)^2]\\
L_{\rm rec}(G_n)=||G_n(x_0)-x_n||_2^2
$ \ Alpha $ ist die Standardkonstante 10, $ {\ hat {\ boldsymbol x}} $ ist der Punkt auf der geraden Linie, der die Trainingsdaten und die generierten Daten verbindet, $ \ lambda $ ist die Konstante, $ x_n $ ist das Trainingsbild, $ x_0 $ ist das Eingabebild für $ G_n $. Die Eingabe von $ L_ {\ rm adv} (G_n, D_n) $ unterscheidet sich jedoch je nach Aufgabe. Beispielsweise wird bei der bedingungslosen Bilderzeugung Rauschen angegeben, bei der Bildharmonisierung wird das Trainingsbild jedoch vergrößert (Teil ausschneiden oder Farbe ändern usw.). Es scheint, dass es besser war, ein Bild mit (Rauschen hinzufügen) zu geben.
Diesmal habe ich versucht, bedingungslose Bilderzeugung und Bildharmonisierung zu verwenden. Andere interessante Aufgaben werden erwähnt. Wenn Sie interessiert sind, lesen Sie bitte das Papier.
Unconditional Image Generation Zufällig zum Trainingsbild, wie in der Abbildung gezeigt (zitiert aus Short Summary) Sie können Rauschen $ z $ hinzufügen, um ein realistisches, nicht vorhandenes Bild zu erstellen und gleichzeitig die globale Struktur beizubehalten. (Sie können sehen, dass es angepasst wird, auch wenn Sie die Bildgröße ändern.)
Image Harmonization Trainingsbild (Malerei) wie in der Abbildung gezeigt (zitiert aus Paper Short Summary) Usw.) und harmonisieren Sie die hinzugefügten Objekte mit dem Stil des trainierten Bildes.
Mit der Bildharmonisierung können Sie bessere Ergebnisse erzielen, indem Sie das trainierte Modell mit einem naiven Bild weiter trainieren (naiv in der obigen Abbildung). (Feinabstimmung in der obigen Abbildung)
Ich habe die Öffentlichkeit GitHub geklont und auf Google Colaboratory ausgeführt, das die GPU kostenlos verwenden kann.
Setup
#Repository-Klon
!git clone https://github.com/tohinz/ConSinGAN.git
#Verwendete Bibliotheksinstallation
pip install -r requirements.txt
Unterwegs bekam ich eine Fehlermeldung, dass die Version des Colaboratory-Tools anders war, aber es gab kein Problem mit der Operation.
Unconditional Generation Platzieren Sie die Trainingsbilder in Images / Generation /. Ich werde die Rialtobrücke (rialto.jpg 1867 x 1400 Pixel) verwenden, die zuvor in Venedig aufgenommen wurde.
Unconditional_Generation
!python main_train.py --gpu 0 --train_mode generation --input_name Images/Generation/rialto.jpg
--gpu verwendet die GPU (standardmäßig 0), --train_mode gibt die Aufgabe an (Generierung, Harmonisierung usw.) und --input_name gibt den Pfad des Trainingsbildes an. Obwohl diesmal nicht geändert, können die Lernrate (--lr_scale) und die Anzahl der Generatoren (--train_stage) nach Wunsch geändert werden. Standardmäßig beträgt die Anzahl der Generatoren 5, und jeder lernt mit 2000 Iterationen. Das Training dauerte 69 Minuten, wahrscheinlich wegen seiner Größe. Das Ergebnis ist TrainedModels / rialto / yyyy_mm_dd_hh_mm_ss_generation_train_depth_3_lr_scale_0.1_act_lrelu_0.05. Hier sind einige generierte Beispiele.
Es ist etwas laut, aber eine matschige Brücke wurde geschaffen.
Image Harmonization
Lassen Sie uns das Bild der Katze mit dem Gemälde (Heu machen) abgleichen. Das Trainingsbild (300 x 300 Pixel hoshikusa.jpg) befindet sich links und das naive Bild (142 x 130 Pixel hoshikusa_naive.jpg) rechts. Platzieren Sie diese in Bild / Harmonisierung /. Ursprünglich scheint es ein Maskenbild zu platzieren, das den Teil des hinzuzufügenden Objekts ausschneidet, aber ich konnte es nicht erstellen, also erstelle ich es ohne Maske.
Ausbildung
!python main_train.py --gpu 0 --train_mode harmonization --train_stages 3 --min_size 120 --lrelu_alpha 0.3 --niter 1000 --batch_norm --input_name Images/Harmonization/hoshikusa.jpg
Die Trainingszeit betrug 15 Minuten. Wenden Sie dann das naive Bild auf das Trainingsmodell an.
Auswertung
!python evaluate_model.py --gpu 0 --model_dir TrainedModels/hoshikusa/yyyy_mm_dd_hh_mm_ss_harmonization_train_depth_3_lr_scale_0.1_BN_act_lrelu_0.3 --naive_img Images/Harmonization/hoshikusa_naive.jpg
Das Ergebnis kann TrainedModels / hoshikusa / yyyy_mm_dd_hh_mm_ss_harmonization_train_depth_3_lr_scale_0.1_BN_act_lrelu_0.3 / Evaluation / sein.
Die Auflösung ist schlecht, aber die Farbe der Katze auf dem Foto hat sich geändert. Ich werde die Feinabstimmung versuchen.
Feintuning
!python main_train.py --gpu 0 --train_mode harmonization --input_name Images/Harmonization/hoshikusa.jpg --naive_img Images/Harmonization/hoshikusa_naive.jpg --fine_tune --model_dir TrainedModels/hoshikusa/yyyy_mm_dd_hh_mm_ss_harmonization_train_depth_3_lr_scale_0.1_BN_act_lrelu_0.3
Wenn die Standardanzahl der Iterationen 2000 Mal (11 Minuten) betrug, wurde sie wie links gezeigt in die Hintergrundfarbe integriert und überpasst. Das Papier besagt, dass 500 Mal ausreichend ist. (richtig)
Lassen Sie uns das Foto in einen Cartoon-Stil umwandeln. Das linke ist das Trainingsbild (pen_building.jpg 600 x 337 Pixel) und das rechte ist das naive Bild (pen_building_naive.jpg 283 x 213 Pixel).
Wenn ich es auf die gleiche Weise ausführte, war das Ergebnis wie folgt (Trainingszeit 9 Minuten). Die linke ist die normale Auswertung und die rechte ist die Feinabstimmung (100 Iterationen).
Ich habe Ramen wie einen Cartoon gemacht. Diese Aufgabe scheint ohne Feinabstimmung ausreichend zu sein.
Dieses Mal las ich einen Artikel über ConSinGAN, eine verbesserte Version von SinGAN, die mit einem einzigen Trainingsbild unter Verwendung eines GAN-Modells generiert werden kann, an dem ich persönlich interessiert war. Es gibt viele Modelle der Bilderzeugungstechnologie, die beeindruckend sind, und die Ergebnisse sind leicht zu verstehen, sodass es Spaß macht. Es war jedoch schade, dass ich aus urheberrechtlichen Gründen nicht veröffentlichen konnte, was ich mit meinen Lieblings-Anime- und Cartoon-Bildern gemacht habe.
Recommended Posts