Hallo Habr! Ich präsentiere Ihnen die Übersetzung des Artikels "
AttnGAN: Feinkörniger Text zur Bilderzeugung mit aufmerksamen generativen kontradiktorischen Netzwerken " von Tao Xu, Pengchuan Zhang, Qiuyuan Huang, Han Zhang, Zhe Gan, Xiaolei Huang und Xiaodong He.
In dieser Veröffentlichung möchte ich über meine Experimente mit der AttnGAN-Architektur sprechen, um Bilder aus einer Textbeschreibung zu generieren. Diese Architektur wurde bereits nach der Veröffentlichung des Originalartikels Anfang 2018 auf Habré erwähnt, und ich war an der Frage interessiert, wie schwierig es sein wird, ein solches Modell selbst zu trainieren.
Architekturbeschreibung
Für diejenigen, die mit AttnGAN und dem klassischen GAN nicht vertraut sind, werde ich kurz die Essenz beschreiben. Das klassische GAN besteht aus mindestens zwei neuronalen Netzen - einem Generator und einem Diskriminator. Die Aufgabe des Generators besteht darin, einige Daten (Bilder, Text, Audio, Video usw.) zu generieren, die den realen Daten aus dem Datensatz „ähnlich“ sind. Die Aufgabe des Diskriminators besteht darin, die erzeugten Daten auszuwerten, sie mit realen zu vergleichen und sie abzulehnen. Das abgelehnte Ergebnis der Arbeit des Generators regt ihn an, das beste Ergebnis zu erzielen, um den Diskriminator zu „täuschen“, der wiederum lernt, Fälschungen besser zu erkennen.
Es gibt sehr viele Modifikationen von GAN, und die Autoren von AttnGAN gingen die Frage der Architektur ziemlich erfinderisch an. Das Modell besteht aus 9 neuronalen Netzen, die für die Interaktion fein abgestimmt sind. Es sieht ungefähr so aus:

Text- und Bildcodierer (Text- / Bildcodierer) konvertieren die ursprüngliche Textbeschreibung und reale Bilder in eine Art interne Darstellung. In diesem Fall wird der Text charakteristischerweise als eine Folge einzelner Wörter betrachtet, deren Darstellung zusammen mit der Darstellung des Bildes verarbeitet wird, wodurch Sie einzelne Wörter mit einzelnen Teilen des Bildes vergleichen können. Auf diese Weise wird der von den Autoren des DAMSM-Artikels aufgerufene Aufmerksamkeitsmechanismus implementiert.
Fca - Erstellt eine präzise Darstellung der Gesamtszene im Bild, basierend auf der gesamten Textbeschreibung. Der Wert von C am Ausgang wird mit einem Vektor aus der Normalverteilung von Z verkettet, der die Variabilität der Szene bestimmt. Diese Informationen bilden die Grundlage für den Betrieb des Generators.
Der Generator ist das größte Netzwerk, das aus drei Ebenen besteht. Jede Ebene erzeugt Bilder mit zunehmender Auflösung von 64 * 64 bis 256 * 256 Pixel, und das Ergebnis der Arbeit auf jeder Ebene wird mithilfe von Fattn-Aufmerksamkeitsnetzwerken angepasst, die Informationen über die korrekte Position einzelner Objekte in der Szene enthalten. Zusätzlich werden die Ergebnisse auf jeder Ebene von drei separat arbeitenden Diskriminatoren überprüft, die den Realismus des Bildes und seine Übereinstimmung mit der allgemeinen Idee der Szene bewerten.
Schulung
Um die Architektur zu testen, habe ich den Standard-CUB-Datensatz mit Fotos und Textbeschreibungen von Vögeln verwendet.
Das gesamte Modell wird in zwei Schritten trainiert. Die erste Phase ist das Pre-Training von DAMSM-Netzwerken, das aus einem Text- und Bildcodierer besteht. In dieser Phase wird, wie oben beschrieben, eine „Aufmerksamkeitskarte“ erstellt, die folgendermaßen aussieht:

Wie aus der Abbildung ersichtlich, gelingt es DAMSM, die Beziehung zwischen einzelnen Wörtern aus der Textbeschreibung und den Bildelementen sehr genau zu erfassen. Für das Modell ist es besonders einfach, Farben zu erkennen. Ich muss sagen, dass das System keine zusätzlichen Informationen darüber hat, was "rot", "gelb" oder "Flügel", "Schnabel" ist. Es gibt nur eine Reihe von Texten und Bildern.
Das DAMSM-Training findet problemlos statt. Die Trainingszeit für diesen Datensatz beträgt 150-200 Epochen, was mehreren Stunden auf einer Hochleistungs-GPU entspricht.
Die zweite und Hauptstufe ist das Training des Generators mit dem DAMSM-Modell.
Der Generator auf jeder Ebene erzeugt ein Bild mit höherer Auflösung - es sieht so aus:

Das Generatortraining dauert viel länger und ist nicht immer so stabil. Die empfohlene Trainingszeit für diesen Datensatz beträgt 300-600 Epochen, was ungefähr 4-8 Tagen auf einer Hochleistungs-GPU entspricht.
Das Hauptproblem beim Training des Generators ist meiner Meinung nach das Fehlen ausreichend guter Metriken, die es uns ermöglichen würden, die Qualität des Trainings formeller zu bewerten. Ich habe mehrere Implementierungen des Inception-Scores studiert, der theoretisch als universelle Metrik für solche Aufgaben positioniert ist - aber sie schienen mir nicht überzeugend genug zu sein. Wenn Sie sich entscheiden, einen solchen Generator zu trainieren, müssen Sie den Trainingsfortschritt anhand der Zwischenergebnisse ständig visuell überwachen. Diese Regel gilt jedoch für solche Aufgaben. Eine visuelle Kontrolle ist immer erforderlich.
Ergebnisse
Nun der lustige Teil. Mit dem trainierten Modell werden wir versuchen, Bilder zu erzeugen, wir werden mit einfachen Sätzen beginnen:

Versuchen wir komplexere Beschreibungen:

Alle Textbeschreibungen sind erfunden, ich habe absichtlich keine Phrasen aus dem Datensatz für Tests verwendet. Natürlich wurden nicht alle diese Bilder beim ersten Versuch erhalten. Das Modell ist falsch, die Autoren selbst sprechen darüber. Mit zunehmendem Beschreibungstext und den anzuzeigenden Elementen wird es immer schwieriger, den Realismus der gesamten Szene aufrechtzuerhalten. Wenn Sie jedoch in der Produktion etwas Ähnliches verwenden möchten, z. B. Bilder bestimmter Objekte für einen Designer erstellen möchten, können Sie das System trainieren und an Ihre Anforderungen anpassen, was sehr streng sein kann.
Für jede Textbeschreibung können Sie viele Bildoptionen (einschließlich unrealistischer) generieren, sodass immer eine große Auswahl zur Verfügung steht.
Technische Details
In dieser Arbeit verwendete ich eine GPU mit geringem Stromverbrauch für das Prototyping und einen Google Cloud-Server, auf dem Tesla K80 während der Schulungsphase installiert war.
Der Quellcode wurde aus dem Repository der Autoren des Artikels entnommen und einer gründlichen Überarbeitung unterzogen. Das System wurde in Python 3.6 mit Pytorch 0.4.1 getestet
Vielen Dank für Ihre Aufmerksamkeit!
Originalartikel: AttnGAN : Feinkörniger Text zur Bilderzeugung mit aufmerksamen generativen gegnerischen Netzwerken , 2018 - Tao Xu, Pengchuan Zhang, Qiuyuan Huang, Han Zhang, Zhe Gan, Xiaolei Huang, Xiaodong He.