Im vergangenen Monat stellte NVIDIA auf der NVIDIA GTC 2019 eine neue Anwendung vor, die vom Benutzer gezeichnete einfache farbige Kugeln in atemberaubende, fotorealistische Bilder verwandelt.
Die Anwendung basiert auf der Technologie
generativ-wettbewerbsfĂ€higer Netzwerke (GAN), die auf Deep Learning basiert. NVIDIA selbst nennt es GauGAN - ein Wortspiel, das sich auf den KĂŒnstler Paul Gauguin beziehen soll. Die GauGAN-FunktionalitĂ€t basiert auf dem neuen SPADE-Algorithmus.
In diesem Artikel werde ich erklĂ€ren, wie dieses technische Meisterwerk funktioniert. Und um so viele interessierte Leser wie möglich anzulocken, werde ich versuchen, eine detaillierte Beschreibung der Funktionsweise von Faltungs-Neuronalen Netzen zu geben. Da SPADE ein generativ-wettbewerbsfĂ€higes Netzwerk ist, werde ich Ihnen mehr darĂŒber erzĂ€hlen. Wenn Sie mit diesem Begriff bereits vertraut sind, können Sie sofort zum Abschnitt âBild-zu-Bild-Ăbertragungâ wechseln.
Bilderzeugung
Beginnen wir zu verstehen: In den meisten modernen Deep-Learning-Anwendungen wird der neuronale Diskriminantentyp (Diskriminator) verwendet, und SPADE ist ein generatives neuronales Netzwerk (Generator).
Diskriminatoren
Der Diskriminator klassifiziert die Eingabedaten. Beispielsweise ist ein Bildklassifizierer ein Diskriminator, der ein Bild aufnimmt und ein geeignetes Klassenetikett auswÀhlt, beispielsweise das Bild als "Hund", "Auto" oder "Ampel" definiert, dh ein Etikett auswÀhlt, das das gesamte Bild beschreibt. Die vom Klassifikator erhaltene Ausgabe wird normalerweise als Zahlenvektor dargestellt
wo
Ist eine Zahl von 0 bis 1, die das Vertrauen des Netzwerks ausdrĂŒckt, dass das Bild zu dem ausgewĂ€hlten gehört
Klasse.
Der Diskriminator kann auch eine Liste von Klassifikationen zusammenstellen. Es kann jedes Pixel eines Bildes als zur Klasse der âMenschenâ oder âMaschinenâ gehörig klassifizieren (die sogenannte âsemantische Segmentierungâ).
Der Klassifizierer nimmt ein Bild mit 3 KanĂ€len (rot, grĂŒn und blau) auf und vergleicht es mit einem Konfidenzvektor in jeder möglichen Klasse, die das Bild darstellen kann.Da die Verbindung zwischen dem Bild und seiner Klasse sehr komplex ist, durchlaufen neuronale Netze es durch einen Stapel von vielen Schichten, von denen jede es âleichtâ verarbeitet und seine Ausgabe auf die nĂ€chste Interpretationsebene ĂŒbertrĂ€gt.
Generatoren
Ein generatives Netzwerk wie SPADE empfÀngt einen Datensatz und versucht, neue Originaldaten zu erstellen, die so aussehen, als ob sie zu dieser Datenklasse gehören. Gleichzeitig können die Daten alles sein: Töne, Sprache oder etwas anderes, aber wir werden uns auf Bilder konzentrieren. Im Allgemeinen ist die Dateneingabe in ein solches Netzwerk einfach ein Vektor von Zufallszahlen, wobei jeder der möglichen SÀtze von Eingabedaten ein eigenes Bild erzeugt.
Ein Generator, der auf einem zufĂ€lligen Eingabevektor basiert, arbeitet praktisch entgegengesetzt zum Bildklassifizierer. In "bedingten Klassen" -Generatoren ist der Eingabevektor tatsĂ€chlich der Vektor einer gesamten Datenklasse.Wie wir bereits gesehen haben, verwendet SPADE viel mehr als nur einen âZufallsvektorâ. Das System wird von einer Art Zeichnung geleitet, die als "Segmentierungskarte" bezeichnet wird. Letzteres gibt an, was und wo gepostet werden soll. SPADE fĂŒhrt den Prozess entgegen der oben erwĂ€hnten semantischen Segmentierung durch. Im Allgemeinen hat eine diskriminierende Aufgabe, die einen Datentyp in einen anderen konvertiert, eine Ă€hnliche Aufgabe, nimmt jedoch einen anderen, ungewöhnlichen Pfad.
Moderne Generatoren und Diskriminatoren verwenden normalerweise Faltungsnetzwerke, um ihre Daten zu verarbeiten. Eine umfassendere EinfĂŒhrung in Convolutional Neural Networks (CNNs) finden Sie im Beitrag
Chew on Karna oder in der
Arbeit von Andrei Karpati .
Es gibt einen wichtigen Unterschied zwischen dem Klassifikator und dem Bildgenerator, und er liegt darin, wie genau sie die GröĂe des Bildes wĂ€hrend seiner Verarbeitung Ă€ndern. Der Bildklassifizierer sollte ihn reduzieren, bis das Bild alle rĂ€umlichen Informationen verliert und nur noch Klassen ĂŒbrig sind. Dies kann durch Kombinieren von Schichten oder durch die Verwendung von Faltungsnetzwerken erreicht werden, durch die einzelne Pixel geleitet werden. Der Generator hingegen erzeugt ein Bild unter Verwendung des umgekehrten Prozesses der "Faltung", der als Faltungsumsetzung bezeichnet wird. Er wird oft mit "Entfaltung" oder
"umgekehrter Faltung" verwechselt.

Herkömmliche 2x2-Faltung mit einem Schritt von â2â verwandelt jeden 2x2-Block in einen Punkt und reduziert die AusgabegröĂe um 1/2.

Eine transponierte 2x2-Faltung mit einem Schritt von "2" erzeugt von jedem Punkt einen 2x2-Block, wodurch die AusgabegröĂe um das Zweifache erhöht wird.
Generator Training
Theoretisch kann ein Faltungs-Neuronales Netzwerk Bilder wie oben beschrieben erzeugen. Aber wie trainieren wir sie? Das heiĂt, wenn wir den Satz von Eingabebilddaten berĂŒcksichtigen, wie können wir die Parameter des Generators (in unserem Fall SPADE) so anpassen, dass neue Bilder erstellt werden, die so aussehen, als ob sie dem vorgeschlagenen Datensatz entsprechen?
Dazu mĂŒssen Sie mit Bildklassifizierern vergleichen, bei denen jeder die richtige Klassenbezeichnung hat. Wenn wir den Netzwerkvorhersagevektor und die richtige Klasse kennen, können wir den Backpropagation-Algorithmus verwenden, um die Netzwerkaktualisierungsparameter zu bestimmen. Dies ist notwendig, um die Genauigkeit bei der Bestimmung der gewĂŒnschten Klasse zu erhöhen und den Einfluss anderer Klassen zu verringern.
Die Genauigkeit des Bildklassifizierers kann geschĂ€tzt werden, indem seine Ausgabe Element fĂŒr Element mit dem richtigen Klassenvektor verglichen wird. FĂŒr Generatoren gibt es jedoch kein ârichtigesâ Ausgabebild.Das Problem ist, dass es beim Erstellen eines Bildes durch den Generator keine ârichtigenâ Werte fĂŒr jedes Pixel gibt (wir können das Ergebnis nicht vergleichen, wie im Fall eines Klassifikators, der auf einer zuvor vorbereiteten Basis basiert, ca. Trans.). Theoretisch ist jedes Bild gĂŒltig, das glaubwĂŒrdig und den Zieldaten Ă€hnlich aussieht, auch wenn sich seine Pixelwerte stark von realen Bildern unterscheiden.
Wie können wir dem Generator also mitteilen, in welchen Pixeln er seine Ausgabe Ă€ndern soll und wie er realistischere Bilder erstellen kann (dh wie ein âFehlersignalâ ausgegeben wird)? Die Forscher haben viel ĂŒber diese Frage nachgedacht, und tatsĂ€chlich ist es ziemlich schwierig. Die meisten Ideen, wie die Berechnung einer durchschnittlichen âEntfernungâ zu realen Bildern, erzeugen verschwommene Bilder von schlechter QualitĂ€t.
Im Idealfall könnten wir mithilfe eines âHigh-Levelâ -Konzepts âmessenâ, wie realistisch die generierten Bilder aussehen, z. B. âWie schwierig ist es, dieses Bild vom realen zu unterscheiden?â ...
Generative gegnerische Netzwerke
Genau dies wurde im Rahmen von
Goodfellow et al., 2014, implementiert. Die Idee ist, Bilder mit zwei neuronalen Netzen anstelle von einem zu erzeugen: einem Netz -
Generator, der zweite ist ein Bildklassifikator (Diskriminator). Die Aufgabe des Diskriminators besteht darin, die Ausgabebilder des Generators von den realen Bildern aus dem PrimÀrdatensatz zu unterscheiden (die Klassen dieser Bilder werden als "falsch" und "real" bezeichnet). Die Aufgabe des Generators besteht darin, den Diskriminator auszutricksen, indem Bilder erstellt werden, die den Bildern im Datensatz so Àhnlich wie möglich sind. Wir können sagen, dass der Generator und der Diskriminator Gegner in diesem Prozess sind. Daher der Name:
generativ-kontroverses Netzwerk .
Generativ-wettbewerbsfĂ€higes Netzwerk basierend auf zufĂ€lliger Vektoreingabe. In diesem Beispiel versucht einer der GeneratorausgĂ€nge, den Diskriminator dazu zu bringen, ein "echtes" Bild auszuwĂ€hlen.Wie hilft uns das? Jetzt können wir eine Fehlermeldung verwenden, die ausschlieĂlich auf der Vorhersage des Diskriminators basiert: einen Wert von 0 ("falsch") bis 1 ("real"). Da der Diskriminator ein neuronales Netzwerk ist, können wir seine Schlussfolgerungen ĂŒber Fehler mit dem Bildgenerator teilen. Das heiĂt, der Diskriminator kann dem Generator mitteilen, wo und wie er seine Bilder anpassen soll, um den Diskriminator besser zu âtĂ€uschenâ (dh wie der Realismus seiner Bilder erhöht werden kann).
WĂ€hrend des Lernens, wie man gefĂ€lschte Bilder findet, gibt der Diskriminator dem Generator ein immer besseres Feedback darĂŒber, wie dieser seine Arbeit verbessern kann. Somit fĂŒhrt der Diskriminator eine
"Lernverlust" -Funktion fĂŒr den Generator aus.
Herrliche kleine GAN
Das von uns in seiner Arbeit berĂŒcksichtigte GAN folgt der oben beschriebenen Logik. Sein Diskriminator
analysiert das Bild
und bekommt den Wert
von 0 bis 1, was sein Vertrauen widerspiegelt, dass das Bild vom Generator echt oder gefÀlscht ist. Sein Generator
erhÀlt einen zufÀlligen Vektor normalverteilter Zahlen
und zeigt das Bild an
das kann vom Diskriminator ausgetrickst werden (in der Tat dieses Bild
)
Eines der Themen, die wir nicht besprochen haben, ist die Schulung des GAN und die Verwendung von
Verlustfunktionsentwicklern zur Messung der Netzwerkleistung. Im Allgemeinen sollte die Verlustfunktion mit dem Training des Diskriminators zunehmen und mit dem Training des Generators abnehmen. Die Verlustfunktion des Quell-GAN verwendete die folgenden zwei Parameter. Der erste ist
stellt den Grad dar, in dem der Diskriminator reale Bilder korrekt als real klassifiziert. Das zweite ist, wie gut der Diskriminator gefÀlschte Bilder erkennt:
$ inline $ \ begin {Gleichung *} \ mathcal {L} _ \ text {GAN} (D, G) = \ underbrace {E _ {\ vec {x} \ sim p_ \ text {data}} [\ log D ( \ vec {x})]} _ {\ text {Genauigkeit bei realen Bildern}} + \ underbrace {E _ {\ vec {z} \ sim \ mathcal {N}} [\ log (1 - D (G (\ vec {z}))]} _ {\ text {Genauigkeit bei FĂ€lschungen}} \ end {Gleichung *} $ inline $
Diskriminator
leitet seine Behauptung ab, dass das Bild real ist. Es macht seitdem Sinn
erhöht sich, wenn der Diskriminator x als real betrachtet. Wenn der Diskriminator gefÀlschte Bilder besser erkennt, steigt auch der Wert des Ausdrucks.
(beginnt nach 1 zu streben), da
wird zu 0 tendieren.
In der Praxis bewerten wir die Genauigkeit anhand ganzer Bildstapel. Wir machen viele (aber keineswegs alle) echte Bilder
und viele zufÀllige Vektoren
um die Durchschnittswerte gemÀà der obigen Formel zu erhalten. Dann wÀhlen wir hÀufige Fehler und einen Datensatz aus.
Dies fĂŒhrt im Laufe der Zeit zu interessanten Ergebnissen:
Goodfellow GAN simuliert MNIST-, TFD- und CIFAR-10-DatensĂ€tze. Konturbilder sind im Datensatz den benachbarten FĂ€lschungen am nĂ€chsten.Das alles war erst vor 4,5 Jahren fantastisch. GlĂŒcklicherweise schreitet das maschinelle Lernen, wie SPADE und andere Netzwerke zeigen, weiterhin rasant voran.
Trainingsprobleme
Generativ-wettbewerbsfĂ€hige Netzwerke sind bekannt fĂŒr ihre KomplexitĂ€t bei der Vorbereitung und InstabilitĂ€t der Arbeit. Eines der Probleme besteht darin, dass, wenn der Generator im Trainingstempo dem Diskriminator zu weit voraus ist, seine Auswahl an Bildern auf diejenigen beschrĂ€nkt wird, die ihm helfen, den Diskriminator zu tĂ€uschen. Infolgedessen kommt es beim Training des Generators darauf an, ein einziges universelles Bild zu erstellen, um den Diskriminator auszutricksen. Dieses Problem wird als "Kollapsmodus" bezeichnet.

Der GAN-Kollapsmodus Àhnelt dem von Goodfellow. Bitte beachten Sie, dass viele dieser Schlafzimmerbilder einander sehr Àhnlich sehen.
QuelleEin weiteres Problem besteht darin, dass der Generator den Diskriminator effektiv austrickst
arbeitet daher mit einem sehr kleinen Gradienten
Ich kann nicht genug Daten erhalten, um die wahre Antwort zu finden, in der dieses Bild realistischer aussehen wĂŒrde.
Die BemĂŒhungen der Forscher, diese Probleme zu lösen, zielten hauptsĂ€chlich darauf ab, die Struktur der Verlustfunktion zu Ă€ndern. Eine der einfachen Ănderungen, die von
Xudong Mao et al., 2016, vorgeschlagen wurden
, ist das Ersetzen der Verlustfunktion
fĂŒr ein paar einfache Funktionen
, die auf Quadraten kleinerer FlĂ€che basieren. Dies fĂŒhrt zu einer Stabilisierung des Trainingsprozesses, wodurch bessere Bilder und eine geringere Kollapswahrscheinlichkeit bei ungedĂ€mpften VerlĂ€ufen erzielt werden.
Ein weiteres Problem, auf das Forscher gestoĂen sind, ist die Schwierigkeit, hochauflösende Bilder zu erhalten, teilweise weil ein detaillierteres Bild dem Diskriminator mehr Informationen gibt, um gefĂ€lschte Bilder zu erkennen. Moderne GANs beginnen, das Netzwerk mit Bildern mit niedriger Auflösung zu trainieren und fĂŒgen nach und nach immer mehr Ebenen hinzu, bis die gewĂŒnschte BildgröĂe erreicht ist.
Das schrittweise HinzufĂŒgen von Ebenen mit höherer Auflösung wĂ€hrend des GAN-Trainings erhöht die StabilitĂ€t des gesamten Prozesses sowie die Geschwindigkeit und QualitĂ€t des resultierenden Bildes erheblich.Bild-zu-Bild-Ăbertragung
Bisher haben wir darĂŒber gesprochen, wie Bilder aus zufĂ€lligen SĂ€tzen von Eingabedaten generiert werden können. SPADE verwendet jedoch nicht nur zufĂ€llige Daten. Dieses Netzwerk verwendet ein Bild, das als Segmentierungskarte bezeichnet wird: Es weist jedem Pixel eine Materialklasse zu (z. B. Gras, Holz, Wasser, Stein, Himmel). Aus diesem Bild ist die Karte SPADE und erzeugt etwas, das wie ein Foto aussieht. Dies wird als "Bild-zu-Bild-Ăbertragung" bezeichnet.
Sechs verschiedene Arten von Bild-zu-Bild-Sendungen, die von pix2pix demonstriert werden. Pix2pix ist der VorgĂ€nger der beiden Netzwerke, auf die wir weiter eingehen werden: pix2pixHD und SPADE.Damit der Generator diesen Ansatz lernen kann, benötigt er einen Satz Segmentierungskarten und entsprechende Fotos. Wir modifizieren die GAN-Architektur so, dass sowohl der Generator als auch der Diskriminator eine Segmentierungskarte erhalten. Der Generator benötigt natĂŒrlich eine Karte, um zu wissen, "wie gezeichnet werden soll". Der Diskriminator benötigt es auch, um sicherzustellen, dass der Generator die richtigen Dinge an den richtigen Stellen platziert.
WĂ€hrend des Trainings lernt der Generator, kein Gras dort zu platzieren, wo auf der Segmentierungskarte âHimmelâ angezeigt wird, da der Diskriminator sonst leicht ein falsches Bild erkennen kann und so weiter.
FĂŒr die Bild-zu-Bild-Ăbersetzung wird das Eingabebild sowohl vom Generator als auch vom Diskriminator akzeptiert. Der Diskriminator empfĂ€ngt zusĂ€tzlich entweder die Generatorausgabe oder die wahre Ausgabe aus dem Trainingsdatensatz. BeispielEntwicklung von Bild-zu-Bild-Ăbersetzern
Schauen wir uns einen echten Bild-zu-Bild-Ăbersetzer an:
pix2pixHD . SPADE ist ĂŒbrigens gröĂtenteils auf das Bild und die Ăhnlichkeit von pix2pixHD ausgelegt.
FĂŒr einen Bild-zu-Bild-Ăbersetzer erstellt unser Generator ein Bild und akzeptiert es als Eingabe. Wir könnten nur eine Faltungsschichtkarte verwenden, aber da Faltungsschichten Werte nur in kleinen Bereichen kombinieren, benötigen wir zu viele Schichten, um hochauflösende Bildinformationen zu ĂŒbertragen.
pix2pixHD löst dieses Problem effizienter mit Hilfe des "Encoders", der die Skalierung des Eingabebildes verringert, gefolgt vom "Decoder", der die Skalierung erhöht, um das Ausgabebild zu erhalten. Wie wir gleich sehen werden, hat SPADE eine elegantere Lösung, fĂŒr die kein Encoder erforderlich ist.
Pix2pixHD-Netzwerkdiagramm auf "hohem" Niveau. Die "Rest" -Blöcke und "+ Operation" beziehen sich auf die "Skip Connections" -Technologie aus dem Residual Neural Network . Es gibt Sprungblöcke im Netzwerk, die im Codierer und Decodierer miteinander verbunden sind.Die Chargennormalisierung ist ein Problem
Fast alle modernen neuronalen Faltungsnetzwerke verwenden die Chargennormalisierung oder eines ihrer Analoga, um den Trainingsprozess zu beschleunigen und zu stabilisieren. Die Aktivierung jedes Kanals verschiebt den Mittelwert auf 0 und die Standardabweichung auf 1 vor einem Paar von Kanalparametern
und
lass sie wieder denormalisieren.
Leider schadet die Batch-Normalisierung den Generatoren, was es dem Netzwerk erschwert, einige Arten der Bildverarbeitung zu implementieren. Anstatt einen Stapel von Bildern zu normalisieren, verwendet pix2pixHD einen
Normalisierungsstandard , der jedes Bild einzeln normalisiert.
Pix2pixHD Training
Moderne GANs wie pix2pixHD und SPADE messen den Realismus ihrer Ausgabebilder etwas anders als fĂŒr das ursprĂŒngliche Design generativer Konkurrenznetzwerke beschrieben.
Um das Problem der Erzeugung hochauflösender Bilder zu lösen, verwendet pix2pixHD drei Diskriminatoren derselben Struktur, von denen jeder das Ausgabebild in einem anderen MaĂstab empfĂ€ngt (normale GröĂe, um das Zweifache reduziert und um das Vierfache reduziert).
Pix2pixHD verwendet
und enthÀlt auch ein weiteres Element, das die Schlussfolgerungen des Generators realistischer machen soll (unabhÀngig davon, ob dies dazu beitrÀgt, den Diskriminator zu tÀuschen). Dieser Artikel
Dies wird als "Feature Matching" bezeichnet und ermutigt den Generator, die Verteilung der Schichten gleich zu gestalten, wenn eine Unterscheidung zwischen realen Daten und den Ausgaben des Generators simuliert wird, wodurch die Minimierung minimiert wird
zwischen ihnen.
Die Optimierung lÀuft also auf Folgendes hinaus:
$$ Anzeige $$ \ begin {Gleichung *} \ min_G \ bigg (\ lambda \ sum_ {k = 1,2,3} V_ \ text {LSGAN} (G, D_k) + \ big (\ max_ {D_1, D_2 , D_3} \ sum_ {k = 1,2,3} \ mathcal {L} _ \ text {FM} (G, D_k) \ big) \ bigg) \ end {Gleichung *}, $$ display $$
wobei Verluste durch drei Unterscheidungsfaktoren und Koeffizienten summiert werden
, die die PrioritÀt beider Elemente steuert.
pix2pixHD verwendet eine Segmentierungskarte, die aus einem echten Schlafzimmer besteht (in jedem Beispiel links), um ein falsches Schlafzimmer (rechts) zu erstellen.Obwohl Diskriminatoren den BildmaĂstab reduzieren, bis sie das gesamte Bild zerlegen, halten sie an âPunktenâ der GröĂe 70 Ă 70 (in geeigneten MaĂstĂ€ben) an. Dann fassen sie einfach alle Werte dieser âPunkteâ fĂŒr das gesamte Bild zusammen.
Und dieser Ansatz funktioniert gut, da die Funktion
, ,
. , .
pix2pixHD . CelebA , .pix2pixHD?
, . , pix2pixHD .
, pix2pixHD , , , . , . «» ()
. ÎČ- , : , «», «», «» - .
pix2pixHD . , , .â SPADE.
: SPADE
- : - () (SPADE).
SPADE , , Îł, ÎČ, , . , 2 .
, SPADE .SPADE « », ( ):
SPADE pix2pixHD, «» , . GAN, . (« »). «» pix2pixHD, .
SPADE , pix2pixHD, :
hinge loss .
:
SPADE pix2pixHD, SPADE . . GauGAN «» , . , - SPADE , «» , .
, SPADE , «» .
, , «». SPADE , , ? 55, «».
, , 5x5 . , .
SPADE , , , , pix2pixHD. , .
SPADE â (, , , ).
SPADE , .: ,
, . , , SPADE , , .
, . , ,
.
So funktioniert SPADE / GaiGAN. Ich hoffe, dieser Artikel hat Ihre Neugier auf die Funktionsweise des neuen NVIDIA-Systems befriedigt. Sie können mich ĂŒber Twitter @AdamDanielKin oder per E-Mail an adam@AdamDKing.com kontaktieren.