U-ViT (CVPR2023) – die Kombination aus ViT und Difussion Model

        Das Diffusionsmodell ist in letzter Zeit im Bereich der Bilderzeugung populär geworden. Unter den Diffusionsmodellen dominieren Faltungs-Neuronale Netze mit U-Net. Das U-ViT-Netzwerk kombiniert den beliebten Vision TransformerU-Net, wird im Diffusionsmodell angewendet. Dieser Artikel beginnt mit Vision Transformer, analysiert das CVPR2023-Papier von U-ViT und zeichnet einige Gedanken auf.

Artikel:Alle sind Worte wert: Ein ViT-Rückgrat für Diffusionsmodelle

Code:https://github.com/baofff/U-ViT    

一、Vision Transformer (ViT)

        ViT ist das erste Netzwerk, das den Standard-Transformerblock im Gesichtsfeld anwendet. Die größte Schwierigkeit bei der Anwendung von Transformatoren im Gesichtsfeld besteht darin, dass, wenn jedes Pixel des Bildes als Wort betrachtet wird, das gesamte Bild zu viele Pixel enthält, was dazu führt, dass die Sequenz zu lang wird, was sehr schwierig ist teuer oder gar nicht auszubilden. Am Beispiel eines 224x224x3-Bildes betragen die Breite W und die Höhe H jeweils 224. Es gibt drei RGB-Kanäle für sichtbares Licht. Dann beträgt die Länge L eines Bildes 15w+. Offensichtlich ist dies inakzeptabel.

        ViTs Lösung für dieses Problem besteht darin, sich auf die Ideen dieses Artikels von Jean-Baptiste Cordonnier, Andreas Loukas und Martin Jaggi zu stützen. Über die Beziehung zwischen Selbstaufmerksamkeit und Faltungsschichten. In ICLR, 2020. Patchen Sie ein 224x224-Bild, das heißt, teilen Sie ein Bild in mehrere kleine Blöcke. Wie in der unteren linken Ecke von Abbildung 1 dargestellt.

Abbildung 1 Struktur von ViT

Ein Beispiel erleichtert das Verständnis. Nehmen Sie an, dass die Form des Bildes /span>Da zur Klassifizierung auch eine erlernbare Klasseneinbettung hinzugefügt wird). Die Gesamtzahl der Pixel in jedem Patchblock beträgt 16 x 16 x 3 = 768, und 768 ist d_model. Dann durchläuft es eine lineare Projektionsschicht, die lineare Projektion, um die Eigenschaften des Bildes zu erhalten, und die Form der endgültigen Patch-Einbettung ist [197, 768]. Auf diese Weise kann der Transformator für das Training eingegeben werden. = (224x224)/(16x16) = 196 ist, d a i=3> plus 1

Der Datenfluss von ViT ist allgemein in Abbildung 2 dargestellt. Ich werde hier nicht auf Details eingehen. Sollten Fehler vorhanden sein, können Sie diese im Kommentarbereich korrigieren!

Abbildung 2 ViT-Datenfluss

Darunter ist E die Form des linearen Projekts, die gemäß d_model transformiert werden kann und hauptsächlich zum Extrahieren der Bildmerkmale und zum Zuordnen des Bildes zur Patch-Einbettung verwendet wird. Beachten Sie, dass die Einbettung an Position 0 das Klassentoken ist, das zur Klassifizierung verwendet wird. Die letzte Operation der Selbstaufmerksamkeit des Bullen ist die Concat-Operation anstelle von Add, bei der 12 k, q und v kombiniert werden, um die ursprüngliche Form wiederherzustellen.

二、U-ViT

        Die Innovation von U-ViT besteht darin, dass der Transformator das ursprüngliche CNN durch das U-Net-Design im Difussionsmodell ersetzt und die lange Sprungstruktur von U-Net auch im Transformator angewendet wird. Die Aufgabe der Bildgenerierung mithilfe eines Transformators wurde implementiert. Das Strukturdiagramm von U-ViT ist in Abbildung 3 dargestellt.

Abbildung 3 Struktur von U-ViT

Ähnlich wie bei ViT wird ein Patch-Vorgang für das Bild durchgeführt. Der Unterschied besteht darin, dass Zeit und Zustand als neue Token für die Eingabe eingeführt werden. Und im flachen Transformator und im tiefen Transformator wird ein langer Sprung eingeführt, sodass Merkmale auf niedriger Ebene auch in der tiefen Schicht angewendet werden können, was für die Vorhersageaufgabe auf Pixelebene des Difussionsmodells von Vorteil ist.

Der Autor führte Ablationsexperimente zur Einstellungsmethode „Long Skip“, zur Additionsmethode „Zeit“, zur Positionsplatzierung von 3x3Conv, zur Patch-Einbettung und zur Positionseinbettung durch (dh durch Vergleich, um herauszufinden, wie man sie besser einstellen kann). Ich werde die experimentellen Ergebnisse nicht veröffentlichen, sondern nur die Schlussfolgerung erzählen.

Seien hm und hs die Einbettungen des Hauptzweigs bzw. des Seitenzweigs, und es gibt fünf Situationen.

  1. Linear[Concat(hm, hs)], kombiniere zuerst und dann die lineare Ebene.
  2. Add(hm, hs), direkte Addition.
  3. Addiere[hm, Linear(hs)], hm plus lineares hs.
  4. Linear[Add(hm, hs)], füge zuerst die lineare Ebene hinzu.
  5. Es gibt keinen langen Sprung, das heißt nur hm.

Von diesen hat Methode 1 die beste Wirkung und Methode 2 die schlechteste Wirkung. Für Methode 5 wurden sowohl die Methoden 3 als auch 4 verbessert. Mit anderen Worten, ein langer Sprung ist notwendig, aber für hs ist es notwendig, die Informationen nach der linearen Projektion zu erhalten, da der Addierer im Transformator einen Rest hat Struktur können bereits lineare Informationen auf niedriger Ebene erhalten werden.

Es wurden zwei Methoden zum Hinzufügen von Zeittokens ausprobiert. Einer ist direkt als Token und der andere ist die adaptive Schichtnormalisierung von AdaLN. Bei der adaptiven Schichtnormalisierung wird zunächst die Zeit durch ein lineares Projekt geleitet, um ys und yb zu erhalten. Verwenden Sie dann diese beiden Parameter und andere Einbettungen, um entsprechende Berechnungen durchzuführen. Der erste funktioniert besser.

Für die 3x3-Faltung der letzten Ausgabeschicht des Modells gibt es auch zwei Positionen. Der erste wird hinter Linear Proj platziert, der zweite davor. Wenn man es vorne einbaut, klappt das gut. Bei der Patch-Einbettung ist der Effekt der Zuordnung von Patch zu Embedding über Linear Proj besser als die Verwendung von 3x3 oder 1x1 Conv. Bei der Positionseinbettung ist die 1D-Positionskodierung besser als die 2D-Kodierung, und im Vergleich zur Nichtverwendung der Positionskodierung ist das mit der Positionskodierung erzeugte Bild sinnvoller. Dies beweist auch die Bedeutung von Positionsinformationen.

Lesen Sie den Code später, um zu sehen, wie der Datenfluss implementiert ist, und reproduzieren Sie einen kleinen U-ViT mithilfe des MNIST-Datensatzes.

Sie können nicht im Voraus zur Schule gehen. Sie sollten zuerst Ihre eigene 1650 zum Lernen verwenden ...

おすすめ

転載: blog.csdn.net/weixin_47666981/article/details/130726257