11. August 2022

Einsatz generativer KI für die Bildmanipulation: Erklärung diskreter absorbierender Diffusionsmodelle

Mitwirkende
Bert Christiaens
Machine Learning Engineer
Jan Van Looy
Projektleiter
Lucas Desard
Machine Learning Engineer
Matthias Feys
Q / CTO
Newsletter abonnieren
Diesen Beitrag teilen

Innerhalb des maschinellen Lernens gibt es eine Klasse von Computer-Vision-Modellen, die Ergebnisse mit einer unvergleichlichen Fähigkeit zu überraschen liefern können: die generativen Modelle. Diese Modelle können den Stil eines Bildes verändern, sich fehlende Teile vorstellen und vieles mehr. Sie zeigen uns, wie sehr sich das Deep Learning beim Lernen aus Daten, aber auch beim Generieren von Daten verbessert hat.

Generative Modelle für das Computersehen arbeiten in der Regel mit der Abtastung von Vektoren aus einer erlernten Verteilung, dem latenten Raum, und projizieren sie mit einem Decodermodell in den Bildraum. Obwohl dies zu qualitativ hochwertigen Bildern führt, bieten diese Modelle im Allgemeinen nur eine begrenzte Kontrolle über den latenten Raum, was es schwierig macht, den Generierungsprozess zu steuern.

Verschiedene Methoden wurden entwickelt, um dieses Problem zu lösen: Konditionierung auf Segmentierungskarten (GauGAN), Textaufforderungen (DALL-E), Stilvektoren (StyleGAN), ... und erlauben dem Benutzer, einige Details über das gewünschte Ergebnis anzugeben. Leider bieten diese Methoden immer noch keine feinkörnige Kontrolle über den latenten Raum. In diesem Blogpost werden wir eine neue Technik namens Diskrete Absorbierende Diffusionsmodelle diskutieren, die uns verschiedene Optionen zur Steuerung des generativen Modells und zur Verbesserung der Nutzbarkeit für kreative Anwendungen bietet.

In diesem Blogpost beginnen wir mit einigen aktuellen Fortschritten im Deep Learning, wie Transformers (vaswani et al. 2017) und VQGANs, und werfen schließlich einen tieferen Blick auf das Discrete Absorbing Diffusion-Modell von: Unleashing Transformers: Parallel Token Prediction with Discrete Absorbing Diffusion for Fast High-Resolution Image Generation from Vector-Quantized Codes.

Wenn Sie sehen möchten, welche kreativen Anwendungen diese Architektur ermöglicht, lesen Sie den Blogbeitrag Anwendungen!

Verstehen von VQVAE

Es gibt mehrere Modelle, die neue Daten erzeugen können. Die bekanntesten Modellfamilien sind GANs, Flussmodelle, autoregressive Modelle und Variations-Auto-Encoder. Heute werden wir einen kurzen Überblick über die Familie der Autoencoder geben und dann tief in die VQVAE eintauchen.

Vanille-Autoencoder (AE)

Die Familie der Autoencoder beginnt mit einem nicht-generativen Modell, dem Vanilla-Autoencoder. Die Idee hinter diesem Modell ist die Komprimierung der Eingabedaten, z. B. Bilder, in eine konzeptionelle (in der Regel niedrigere dimensionale) Darstellung, die den Großteil der Informationen der Eingabe enthält. Ziel ist es, die ursprüngliche Eingabe aus dieser komprimierten Zwischendarstellung (oder latenten Darstellung) zu rekonstruieren, indem sie durch ein Decoder-Netzwerk geleitet wird.

Obwohl diese Encoder-Decoder-Architektur innovativ war, hat sie die Einschränkung, dass man keine Werte aus diesem latenten Raum entnehmen und neue Bilder erzeugen kann. Das liegt daran, dass wir nicht wissen, welche Werte des latenten Raums sinnvollen Ausgaben entsprechen, so dass viele Kombinationen von latenten Werten zu Unsinn führen werden.

Der Vanilla-Autoencoder: Die Eingabe wird vom Encoder auf einen niedrigdimensionalen latenten Raum (den Code) projiziert. Dann projiziert der Decoder diesen Code zurück in den Bildraum, um die Eingabewerte zu rekonstruieren. https://towardsdatascience.com/applied-deep-learning-part-3-autoencoders-1c083af4d798

Variationaler Autoencoder (VAE)

Um dieses Problem zu lösen, müssen wir eine Struktur im latenten Raum erzwingen. Die VAE erreicht dies, indem sie die Zielsetzung hinzufügt, dass die vom Kodierer ausgegebenen latenten Variablen eine vorherige Verteilung approximieren müssen. Dies wird durch die Einbeziehung der Kullback-Leibler-Divergenz in die Verlustfunktion erreicht, die misst, wie stark sich eine Verteilung von einer anderen Verteilung unterscheidet. Durch die Regularisierung dieses latenten Raums werden die latenten Variablen glatter und aussagekräftiger.

Jetzt wissen wir, dass eine Stichprobe aus dieser Prioritätsverteilung (wenn sie gut trainiert ist) ein Bild ergibt, das den Trainingsdaten ähnlich ist. Endlich haben wir ein echtes generatives Modell!

https://en.wikipedia.org/wiki/File:Reparameterized_Variational_Autoencoder.png

Vektorquantisiert VAE

Ein neueres Mitglied der Auto-Encoder-Familie ist der Vektorquantisierte VAE (VQVAE), der einen etwas anderen Ansatz verfolgt, nämlich die Darstellung des latenten Raums mit Hilfe eines Gitters aus diskreten Codes.

Wie kommen wir also von kontinuierlichen latenten Variablen zu diskreten Codes?

Die VQVAE erreicht dies durch die Verwendung einer neuen Komponente: dem Codebuch. Die Idee ist, dass man eine feste Anzahl von Vektoren lernt, die im latenten Raum erlaubt sind. Zunächst verarbeitet der Kodierer die Eingabe und gibt ein Gitter von Vektoren aus. Diese Vektoren werden dann mit den Codes im Codebuch verglichen und durch den nächstgelegenen Code ersetzt (unter Verwendung des L2-Abstands), was als Vektorquantisierungsschritt bezeichnet wird.

Jeder Vektor des Gitters entspricht nun einem der Vektoren des Codebuchs und kann mit einem Index versehen werden, der der Position im Codebuch entspricht. Dies führt zu einer Diskretisierung des latenten Raums, im Gegensatz zur kontinuierlichen Natur der VAE. Wie bei allen Autoencodern übernimmt der Decoder die latenten Variablen und bildet sie auf ein Bild ab.

Architektur der VQVAE: Das Bild wird in ein Gitter aus latenten Vektoren kodiert. Diese Vektoren werden im Bottleneck durch den nächstgelegenen Vektor im Codebuch ersetzt. Schließlich durchlaufen die quantisierten Vektoren den Decoder, um die Eingabe zu rekonstruieren.

Warum interessieren wir uns für diskrete Räume?

Sehr cool, aber warum sollte man sich die Mühe machen, den latenten Raum zu begrenzen?

  • Durch den Wechsel von Vektoren mit Fließkommawerten zu diskreten Indizes wird der latente Raum weiter komprimiert, so dass wir eine kompakte Darstellung erhalten.
  • Durch die Verwendung von Maximum Likelihood anstelle eines Variationsziels wird das Training stabiler.
  • Durch die Verwendung des gesamten latenten Raums im Bottleneck wird ein posteriorer Kollaps vermieden. Dies ist ein häufiges Problem bei VAEs, bei denen der Decoder eine Teilmenge der latenten Variablen ignoriert.
  • Durch die Diskretisierung des latenten Raums mit dem Codebuch erhalten wir eine natürliche Darstellung, sozusagen eine Sprache der visuellen Konzepte. Die diskreten Darstellungen ermöglichen auch die Verwendung sehr leistungsfähiger Modelle wie die berühmten Transformatoren.

Dies ist eine allgemeine Erklärung, die einige Informationen über den Aufbau und die Ausbildung von VQVAEs auslässt. Wenn Sie mehr erfahren möchten, schauen Sie sich eine der folgenden Erklärungen an:

VQVAE-Metapher: der Architekt

Versuchen wir also, eine gute Metapher für den Encoder, das Codebuch, den latenten Raum und den Decoder zu finden.

Sie wollen Ihre eigene Kirche bauen und gehen zu einem Architekten, der sich mit Kirchen auskennt. In Ihrem Kopf wissen Sie ungefähr, wie Sie Ihr Gebäude haben wollen, aber Sie können es nur beschreiben. Der Architekt sagt Ihnen: Hier habe ich einen Katalog aller Elemente, die in einer Kirche vorkommen können (auch bekannt als das Codebuch), zeigen Sie mir, wo ich welches Element einbauen soll. Sie setzen das Bild in Ihrem Kopf in dieses kleine Raster um, indem Sie die Katalogelemente verwenden (ein Dach kommt hier hin, die Tür dort hin, ...).

Da der Architekt (auch bekannt als der Decoder) so erfahren ist und weiß, wie diese Elemente ein Gebäude bilden sollten, kann er nun Ihr übergeordnetes Schema (auch bekannt als der latente Raum) in eine schöne Darstellung der Kirche entschlüsseln. Und wow, es sieht genau so aus, wie Sie es sich vorgestellt haben!

Dies ist die Hauptidee der VQVAE: Der latente Raum stellt eine konzeptionelle räumliche Übersicht dar, die Elemente (diskrete Codes) aus dem Codebuch verwendet. Der Decoder ist dann in der Lage, diese niedrigdimensionale (zum Beispiel 16x16) Übersicht in ein hochdimensionales (256x256) Bild zu projizieren.

Metapher des latenten VQVAE-Raums und des Codebuchs. Die Codes stellen einen Katalog von Konzepten auf hoher Ebene dar, die aus den Daten gelernt wurden und zur Konstruktion einer konzeptionellen Darstellung eines Bildes verwendet werden können. Der Decoder (der Architekt) weiß, wie er das kleine konzeptionelle Raster interpretieren und auf den Bildraum zurückführen kann.

Verbesserung der VQVAE mit einem kontradiktorischen Rahmen

Eine VAE ist gut darin, eine hohe Wahrscheinlichkeit zu erzielen (d. h. die Rekonstruktion ist im Durchschnitt gut). Dies kann jedoch bedeuten, dass die VAE versucht, die Fehler im Durchschnitt zu minimieren , indem sie auf Nummer sicher geht und einen im Durchschnitt "sicheren" Pixelwert vorhersagt, was zu unscharfen Bildern führt.

Um diese unscharfen Bilder zu vermeiden, können wir uns inspirieren lassen von Generative adversarische Netzwerke (GANs) inspirieren, bei denen das Ziel darin besteht, realistische Muster zu erzeugen, die ein Diskriminatormodell täuschen können. Das VQGAN fügt der VQVAE einen Diskriminator hinzu, der vorhersagt, ob jeder Bildausschnitt real oder generiert ist. Dieser zusätzliche Verlust ermutigt den VQVAE-Decoder, scharfe und realistische Muster zu erzeugen. Eine ausführlichere Erklärung finden Sie in diesem Dokument.

Architektur des VQGAN: Ein Unterscheidungsmodell prüft die von der VQVAE erzeugten Bilder, um vorherzusagen, ob die einzelnen Flecken echt oder gefälscht sind.

Probenahme aus VQVAE

Wir haben erörtert, was eine VQVAE ist und wie sie eine diskrete Darstellung zur Darstellung von Bildern verwendet. Um Daten zu generieren, benötigen wir jedoch eine Möglichkeit, neue Kombinationen latenter Codes zu erzeugen, die bei der Dekodierung sinnvolle Bilder ergeben.

Vorabverteilung

Eine erste Idee ist die Verwendung einer Prior-Verteilung für die Stichprobe aus den latenten Variablen, ähnlich wie beim Variational Autoencoder.

Da wir es mit diskreten Variablen zu tun haben, können wir einen einheitlichen Prior für die diskreten Codes verwenden, so dass jeder Code die gleiche Wahrscheinlichkeit hat, im Raster ausgewählt zu werden. In der Realität führt dies jedoch zu sehr inkonsistenten und qualitativ schlechten Stichproben.

Mit Blick auf unsere Metapher kann man nicht einfach wahllos ein Fenster in die Luft und ein Dach unter die Tür setzen und erwarten, dass der Architekt etwas Logisches daraus macht. Das kommt daher, dass in der ursprünglichen Datenverteilung die Codes nicht unabhängig sind und die "Angemessenheit" eines Codes davon abhängt, welche Codes bereits vorhanden sind. Wir brauchen eine Möglichkeit, die Verteilung der diskreten Codes besser darzustellen, um kohärente Bilder zu erzeugen.

Das Erlernen des Prioritätsprinzips

Um dieses Stichprobenproblem zu lösen, schlug das ursprüngliche VQVAE-Papier vor, die vorherige Verteilung zu lernen, anstatt eine feste Gleichverteilung zu verwenden.

Anstatt jedoch die gemeinsame Verteilung direkt zu lernen, was aufgrund der enormen Menge an zu lernenden Kombinationen nicht machbar ist, möchten wir die Verteilung in mehrere kleinere bedingte Wahrscheinlichkeiten aufteilen.

Autoregressive Modelle

Autoregressive (AR) Modelle lösen dieses Problem, indem sie sich die Kettenregel der Wahrscheinlichkeit zunutze machen:

Auf unseren diskreten latenten Raum angewandt, müssen wir das NxN-Gitter der Variablen in ein 1-dimensionales Feld der Länge N² ausrollen. Bei jedem Schritt müssen wir nur die Wahrscheinlichkeiten der nächsten Variablen modellieren, indem wir die vorherigen Variablen betrachten (bedingte Wahrscheinlichkeit).

Um diese faktorisierten Wahrscheinlichkeiten zu modellieren, wurde in der VQVAE-Veröffentlichung das autoregressive pixelCNN-Modell verwendet. Dieses Modell verwendet ein maskiertes gleitendes Fenster, das die umgebenden Variablen betrachtet, um die nächste Variable vorherzusagen. Im Vergleich zu unserem einfachen einheitlichen Prior verbessert dieser Ansatz die Fähigkeit, neue konsistente Bilder zu erzeugen, drastisch, indem er lernt, welche Codes zusammen auftreten.

Autoregressive Token-Vorhersage mit dem pixelCNN.

In der Arbeit Taming transformers for high resolution image synthesis wird die Modellierung des Priors weiter verbessert, indem ein Transformatordecoder als autoregressives Modell verwendet wird.

Ein Transformator-Decoder (wie GPT-2, GPT-3, ...) nimmt eine Sequenz von Token auf und sagt das nächste Token in der Sequenz voraus. Diese Architektur kann weitreichende Abhängigkeiten in einer Sequenz modellieren, da ihr Aufmerksamkeitsmechanismus es ihr ermöglicht, jedes Token in der Sequenz zu betrachten. Dies ist eine große Verbesserung gegenüber dem pixelCNN, das aufgrund seines gleitenden Fensters nur einen Teil der Informationen betrachten kann.

Dieser Transformator ermöglicht somit eine bessere Modellierung der Beziehungen zwischen den latenten Codes und nutzt gleichzeitig die kompakte Darstellung und die Bildrekonstruktionsfähigkeiten des VQGAN.

Autoregressive Erzeugung von diskreten Codes mit dem Transformator-Decoder-Modell

Beschränkungen

Obwohl diese Architektur ziemlich genial ist und mehrere SOTA-Techniken kombiniert, hat sie dennoch ihre Grenzen: Sie verwendet ein eingeschränktes unidirektionales Transformatormodell, das Codes von links nach rechts erzeugt. Bilder sind jedoch von Natur aus nicht auf diese Weise strukturiert, was zu einem Mangel an globaler Konsistenz der erzeugten Bilder führen könnte. Da die Codes einzeln erzeugt werden, ist dieser sequenzielle Prozess viel langsamer als GANs und VAEs, die Muster in einem einzigen Durchgang durch das Netzwerk erzeugen.

Diffusionsmodelle

Wie können wir also die Probleme der globalen Konsistenz und der Stichprobengeschwindigkeit lösen?

  • Um die globale Konsistenz zu verbessern, sollte die Erzeugung neuer Token nicht unidirektional sondern bidirektional sein. Wir wollen den gesamten Kontext betrachten, und das Modell sollte die Möglichkeit haben, ein neues Token an einer bestimmten Stelle zu erzeugen. Auf diese Weise kann die globale Struktur des Bildes zuerst ausgewählt werden und der Rest kann anschließend ausgefüllt werden, um das Bild zu vervollständigen.
  • Um die Stichprobengeschwindigkeit zu verbessern, sollten wir die Erzeugung von 1 Token pro Schritt abschaffen und bei Bedarf mehrere Token erzeugen können.

Diese beiden Lösungen werden in dem Papier "Unleashing transformers" vorgeschlagen, in dem diskrete absorbierende Diffusionsmodelle untersucht werden.

Diffusionsmodelle

Die Hauptidee bei Diffusionsmodellen besteht darin, die Daten allmählich zu korrumpieren und ein Modell zu lernen, das diesen Korruptionsprozess umkehren kann.

Die Hypothese ist, dass man, wenn man einen sehr kleinen Teil der Informationen aus den Daten entfernt, vorhersagen kann, welche Informationen entfernt wurden und die ursprünglichen Daten wiederherstellen kann.

Wir werden dies konkreter (und etwas technischer) machen und uns ansehen, wie ein kontinuierlicher Diffusionsprozess auf Bilder angewendet wird. Es besteht aus einem Vorwärtsdiffusionsprozess und einem Rauschunterdrückungsprozess.

Vorwärtsdiffusionsprozess

Wie bereits erwähnt, müssen wir zunächst die Informationen in den Daten verfälschen. Dies geschieht durch den Vorwärtsdiffusionsprozess, der eine Markov-Kette definiert

bei dem dem Bild über eine große Anzahl von Schritten kleine Mengen von - in der Regel skaliertem - Gaußschen Rauschen hinzugefügt werden. Dieser Prozess zerstört iterativ die Informationen im Originalbild, so dass am Ende nur noch Gaußsches Rauschen übrig bleibt.

Bei jedem Schritt wird dem Originalbild (links) Rauschen hinzugefügt, bis die Probe reines Rauschen ist.

Entschärfungsprozess

Nun gut, wir haben unser Bild unkenntlich gemacht, aber warum tun wir das nicht in einem einzigen großen Schritt? Da unser Bild bei jedem Schritt nur geringe Mengen an Informationen verliert, ist es nicht undenkbar, dass ein Modell lernen kann, dieses Rauschen zu entfernen. Mit anderen Worten: Ein Modell kann so trainiert werden, dass es den Rauschprozess umkehrt und die Daten in Schritt T-1 aus Schritt T vorhersagt.

Um aus diesem Modell neue ungesehene Stichproben zu machen, müssen wir nur zufälliges Rauschen nehmen und es mit Hilfe unserer umgekehrten Markov-Kette entrauschen. Wenn wir gut trainiert sind, erhalten wir nach N Entrauschungsschritten ein plausibles Bild aus unserer Datenverteilung.

Umkehrung des Rauschvorgangs

Diskrete absorbierende Diffusion

Vorwärtsabsorbierende Diffusion: Token werden bei jedem Schritt maskiert

Wie kann man also eine diskrete Variante des Rauschens erzeugen? Durch Absorption von Informationen natürlich! Die diskrete absorbierende Diffusion fügt kein zufälliges kontinuierliches Rauschen hinzu, sondern wählt bei jedem Schritt eine Teilmenge der diskreten Variablen (in unserem Fall die latenten VQGAN-Codes) zum Ausblenden aus. Auf diese Weise wird die Information in den Daten allmählich zerstört, da nach genügend Schritten ein vollständig maskiertes Bild übrig bleibt.

Wie zuvor kann ein Modell dann optimiert werden, um den umgekehrten Prozess zu modellieren, d. h. es muss vorhersagen, welche diskrete Variable ursprünglich hinter jeder Maske stand.

Diskreter latenter Raum von VQGAN

Vorwärts- und Rückwärts-(De)noising-Prozess

Das Papier wählt ein bidirektionales Encoder-Transformer-Modell, ähnlich dem von NLPs geliebten BERT, das alle Token aufnimmt. Der Vorteil eines bidirektionalen Modells besteht darin, dass es alle Token betrachten kann (von denen eine Teilmenge maskiert ist) und diese globalen Informationen verwendet, um Token zu demaskieren. In jedem Schritt wählen wir ein zufälliges maskiertes Token und sagen voraus, welchen Code es ursprünglich hatte. Nach N² Schritten (der Größe des latenten Gitters) ist jedes Token vorhergesagt, und das entstandene Gitter von Codes kann vom VQVAE-Decoder dekodiert werden, um ein Bild zu erzeugen.

Beschleunigung der Inferenz

Um den Prozess zu beschleunigen, können Sie mehrere (K) Token in einem Schritt demaskieren, was die Anzahl der Abtastschritte um den Faktor K reduziert.

In der nachstehenden Tabelle wird dieser Kompromiss durch den Vergleich des FID für verschiedene Entrauschungsschritte (50, 100, 150, 200 und 256) deutlich. Für den Churches-Datensatz erhöht sich die FID-Metrik bei einem Wechsel von 256 auf 150 Schritte nur um 0,23, während sie fast doppelt so schnell ist. Bei 50 Schritten erhöht sich diese Metrik um 1,28 und ist fünfmal schneller.

https://arxiv.org/pdf/2111.12701.pdf

Fazit

In diesem Blogpost haben wir unser Wissen schrittweise aufgebaut, indem wir uns mit Autoencodern, autoregressiven Modellen, Transformatoren und Diffusionsprozessen beschäftigt haben.

Das Ergebnis ist das diskrete absorbierende Diffusionsmodell, das die Rekonstruktionsfähigkeiten des VQGAN, die diskrete Natur und die weitreichenden Modellierungsfähigkeiten des Transformators sowie die iterative Natur von Diffusionsprozessen nutzt. Dieses Modell liefert uns global konsistente Bilder von hoher Qualität und gibt uns gleichzeitig eine gewisse Kontrolle über den Inferenzprozess.

Verwandte Beiträge

Alle anzeigen
Keine Ergebnisse gefunden.
Es gibt keine Ergebnisse mit diesen Kriterien. Versuchen Sie, Ihre Suche zu ändern.
Stiftung Modelle
Unternehmen
Unser Team
Verantwortungsvolle und ethische KI
Strukturierte Daten
Chat GPT
Nachhaltigkeit
Stimme und Ton
Front-End-Entwicklung
Schutz und Sicherheit von Daten
Verantwortungsvolle/ethische KI
Infrastruktur
Hardware und Sensoren
MLOps
Generative KI
Verarbeitung natürlicher Sprache
Computer Vision