Bisher haben wir uns in drei Use Cases mit der Aufgabe des Sehens und genauer mit dem Klassifizieren von Bildern beschäftigt – ein typisches Anwendungsgebiet für maschinelles Lernen im Bereich des computergestützten Bildverarbeitung. Die drei verwendeten Modelle sind
Convolutional Neuronal Networks wie in dem Use Case Convolutional Neural Networks: Erkennen räumlicher Zusammenhänge gezeigt,
die Hauptkomponentenanalyse (PCA, siehe AIAV Video: Principal Component Analysis) zum einen kombiniert mit Logistic Regression im Use Case Logistic Regression: Der einfachste Weg Kleidungsstücke zu klassifizieren und
die Hauptkomponentenanalyse kombiniert mit dem K-Nearest Neighbours Algorithmus im Use Case Von Nachbarn und deren Merkmalen zur Klassifizierung von Buchstaben.
Ein weiteres Modell, welches sich in den letzten Jahren immer mehr zum Stand der Technik etabliert hat und von den Natural Language Processing (NLP) - Transformer Modellen (wie ChatGPT oder BERT) inspiriert wurde, ist die Verwendung eines Vision Transformer (ViT).
Doch warum überhaupt ein neues Modell verwenden wenn wir mit CNN's und bisherigen Algorithmen schon gute Ergebnisse erzielen? Welche Vorteile ein ViT hat, wo es angewandt wird und wie ein solches Modell funktioniert erfahren Sie in diesem Use Case!
Der Durchbruch der Transformer-Modelle gelang im Jahr 2017 mit dem Paper 'Attention is all you need'. In diesem Ursprungsmodell wird ein Transformer mit einer Encoder-Decoder Struktur zum Zweck von Sprachübersetzung verwendet. Hieraus folgten weitere Architekturen des Transformers mit reinen Encoder (z.B. BERT) oder reinen Decoder (z.B. GPT-3). Drei Jahre später wurde die Transformer Architektur mit dem ViT erfolgreich auf bildbasierte Daten angewandt. Hierbei wird als Input für den Transformer anstatt Wörter, kleine Bildausschnitte mit fixierter Größe verwendet. Es dauerte nicht lange, bis die Transformer-Architektur die seit langem etablierte und dominierende CNN-Architektur in Teilbereichen des maschinellen Sehens übertraf.
Doch was macht die Transformer so mächtig? Die Transformer basieren auf einem selbstbeobachtenden Mechanismus (self-attention), der es ermöglicht, die Beziehungen zwischen den einzelnen Elementen einer Sequenz zu erfassen. Im Gegensatz zu rekursiven Netzen, die Sequenzelemente rekursiv verarbeiten und nur kurzfristige Beziehungen berücksichtigen können, sind Transformatoren in der Lage, ganze Sequenzen zu betrachten und somit weitreichende Beziehungen zu lernen. Anwendungsgebiete der Vision Transformer findet man heute in allen Teilbereichen der computergestützten Bildverarbeitung, zu den bekanntesten hiervon zählen die Bilderkennung, Objekterkennung und semantische Segmentierung.
Wie der Vision Transformer funktioniert sehen wir uns in dem folgenden Abschnitt genauer an.
Aufbau und Funktionsweise eines Vision Transformers
Abbildung 1 (Quelle: An Image is Worth 16x16 Words) zeigt den allgemeinen Aufbau eines Vision Transformers. Wie dargestellt, wird ein Eingangsbild zunächst in kleinere Abschnitte, sogenannte Patches, zerlegt. Diese werden dann zu eindimensionalen Vektoren "geflattet". Anschließend wird eine lineare Projektion dieser geflatteten Patches durchgeführt, was nichts anderes bedeutet, als sie in eine gewünschte Form bzw. Dimension zu bringen. Die Dimension ist dabei die Anzahl der verschiedenen Attributen in der Matrix.
![Vision Transformer Modellüberblick](https://static.wixstatic.com/media/f66879_662637d6198e45c38de8b8e6e5e5b086~mv2.png/v1/fill/w_980,h_581,al_c,q_90,usm_0.66_1.00_0.01,enc_auto/f66879_662637d6198e45c38de8b8e6e5e5b086~mv2.png)
Bis zu diesem Punkt hat unser Transformer-Modell keine Information darüber, welches Patchembedding von welchem Teil des Bildes stammt. Deshalb wird an jedes Patchembedding ein Positionsembedding angehängt, das Informationen über die ursprüngliche Position des Patches im Bild enthält. Im nächsten Schritt wird ein zusätzliches Embedding, der so genannte Klassen-Token, an den Anfang der Sequenz von Patchembeddings hinzugefügt. Diese Matrix bzw. Sequenz von Embeddings bilden schließlich die Input-Daten, die an den Transformer-Encoder übergeben werden. Zuletzt wird das Embedding der Nullposition (Klassen-Embedding) extrahiert und durch ein Multi-Layer-Perzeptron (MLP) geleitet. Ein MLP ist nichts anderes als ein künstliches neuronales Netz, das aus einer Eingabeschicht, einer oder mehreren verborgenen Schichten und einer Ausgabeschicht besteht (mehr dazu im Video AIAV: Klassische Neuronale Netze). Das künstliche neuronale Netz liefert uns dann die vorhergesagte Klasse für das eingegebene Bild.
All dies ist jedoch nur möglich, wenn unser Modell zuvor entsprechend trainiert wurde. Im Falle einer Transformer-Architektur hat sich gezeigt, dass eine sehr große Datenmenge notwendig ist, um Ergebnisse zu erzielen, die mit CNN-Modellen im Bereich des maschinellen Sehens mithalten können. Um eine einfache Anwendung mit ViT zu ermöglichen, wird daher auf sogenannte vortrainierte "Backbone"-Modelle zurückgegriffen. Diese Backbone-Modelle gibt es in verschiedenen Ausführungen und Größen (z.B. von ViT Base mit 86 Millionen Parametern bis zu ViT Huge mit 632 Millionen Parametern). Die Grundidee ist, dass diese Modelle die wichtigsten bildbasierten Merkmale bereits gelernt haben und wir diese dann auf einen kleineren anwendungsspezifischen Datensatz trainieren. Auf diese Weise können wir mit relativ wenig Rechenleistung ein Transformer-Modell trainieren. In unserer praktischen Implementierung werden wir genau dies untersuchen und demonstrieren.
Bevor wir dies aber umsetzen, werfen wir einen genaueren Blick auf den Transformer Encoder Block und sehen, was sich hinter den Kulissen dieses Blocks verbirgt.
In Abbildung 2 (Quelle: 'Attention is all you need') ist die Struktur des Transformer Encoders aufgeschlüsselt dargestellt.
![Aufbau des Transformer Encoder](https://static.wixstatic.com/media/f66879_107bf3cf314f4661adf9a773166f4329~mv2.png/v1/fill/w_359,h_720,al_c,q_85,enc_auto/f66879_107bf3cf314f4661adf9a773166f4329~mv2.png)
Wir sehen zunächst (von unten nach oben) eine Normalisierung Schicht gefolgt von dem Multi-Head-Attention Block, dann wiederum eine Normalisierung Schicht und schlussendlich ein MLP Block. Zwischen Anfang und Mitte sowie Mitte und Ende des Encoders befinden sich zudem sogenannte Residual Connections. Diese Residual Connections helfen wie in diesem Paper gezeigt mit der Optimierung unseres Modells, genauer gesagt sie verhindern, dass unser Trainingsprozess aufgrund zu kleine Gradienten zum Stillstand kommt (mehr über Gradienten erfahren Sie in unserem Use Case Wanderung in Richtung des geringsten Fehlers: Wie Programme lernen).
Für die Implementierung der Residual Connections wird einfach der Eingang zu dem Zielpunkt des schematisch dargestellten Pfeile addiert. Auch die Normalisierungsblöcke übernehmen eine Optimierungsaufgabe im Transformer indem sie das Lernen stabilisieren und es effizienter gestalten. Dazu werden die Daten neu skaliert, sodass deren Mittelwert 0 und die Varianz 1 ist. Die Normalisierung erfolgt immer entlang einer Dimension, in unserem Fall entlang der Schichtdimension (siehe auch: Layer Normalisation).
Die letzte und wichtigste Komponente des ViT ist der Attention Mechanismus. Um diesen theoretisch zu verstehen werfen wir ein Blick auf Abbildung 3.
![Single-Head Attention Mechanismus](https://static.wixstatic.com/media/f66879_303f15b0ac9e443d89b3ca58f576cbaa~mv2.png/v1/fill/w_381,h_548,al_c,q_85,enc_auto/f66879_303f15b0ac9e443d89b3ca58f576cbaa~mv2.png)
Zu beginn wird jedes Patch-Embedding drei mal projiziert, um jeweils eine Query (Q), Key (K) und Value (V) Matrix zu erhalten. Dabei kann die Q als Abfrage betrachtet werden, K als die Information die vorhanden ist und V als die Information die kommuniziert wird. Dann wir das skalierte Skalarprodukt Attention entsprechend folgender Gleichung berechnet.
![Berechnung der Attention](https://static.wixstatic.com/media/f66879_c62e51175cf54de396aa0a2531f61685~mv2.png/v1/fill/w_980,h_202,al_c,q_85,usm_0.66_1.00_0.01,enc_auto/f66879_c62e51175cf54de396aa0a2531f61685~mv2.png)
Führt man die Berechnung wie in Abbildung 3 schematisch dargestellt durch, so erhält man eine sogenannte Attention-Matrix. Das bedeutet, dass jedes Embedding eine gewichtete Summe der Werte der anderen Embeddings entsprechend der Ähnlichkeit der Query und Keyabfragen erhält. Die Berechnung nach Gleichung 1 wird auch als Single-Head Attention bezeichnet.
Was den Transformer jedoch so mächtig macht, ist die Multi-Head Attention. Denn diese ermöglicht es dem Modell, Informationen aus verschiedenen Teilbereichen der Repräsentation an verschiedenen Positionen gemeinsam zu berücksichtigen. Das bedeutet, dass, wie in Abbildung 4 dargestellt, eine Sammlung von h verschiedenen Attention Heads verwendet wird. Für jeden Attention Head wird dann eine separate Q-, K- und V-Matrix berechnet und die oben beschriebene Single-Head-Attention gemäß Gleichung 1 angewendet und zusammengeführt.
![Multi-Head Attention Mechanismus](https://static.wixstatic.com/media/f66879_8b395c23a3484fe1a17bfe7548043bad~mv2.png/v1/fill/w_513,h_616,al_c,q_85,enc_auto/f66879_8b395c23a3484fe1a17bfe7548043bad~mv2.png)
Praktische Implementierung
Für die praktische Implementierung wurde das ViT-Paper von Null auf in diesem frei zugänglichen GitHub-Repository nach gebaut, mit dem Ziel Bilder zu klassifizieren. Hierzu wurde der WOD: Web-Object Datensatz verwendet. Dieser besitzt 50.000 Bilder aus 51 Kategorieklassen von alltäglichen Gegenstände (wie z.B. Äpfel, Schüsseln, Kaffeetassen.. ). Um das Ausführen des Programmcodes mit begrenzten Hardwareressourcen zu ermöglichen, verwenden wir nur 5000 der Daten, davon 90% für das Training und 10% für das Testen unseres Modells. In dem ViT-Paper werden vier Gleichungen beschrieben die den Prozess in Abbildung 1 in Code umsetzen. Diese werden in unserem Jupyter-Notebook der Reihe nach aufgeschlüsselt und angewandt.
Wie wir analog zu Abbildung 5 feststellen, hat unser von Null aufgebautes Vision-Transformer Modell, nach 10 Epochen Training, eine äußerst schlechte Accuracy von maximal 5.5%. In dem Use Case Convolutional Neural Networks: Erkennen räumlicher Zusammenhänge erreichen wir mit ähnlich vielen Daten und einem CNN Modell nach 10 Epochen eine Training und Test Accuracy von knapp 80%. Der Vergleich ist zwar nicht fair, da wir mit einem anderen Datensatz arbeiten, der Unterschied sind jedoch so gravierend, dass sie uns überraschen. Heißt dies, dass unser neuartiges Transformer Modell schlechter ist als ein herkömmliche CNN Architektur bzw. wir unsere Transformer Architektur falsch aufgebaut haben? - Nein.
![Training und Test Accuracykurve des von Null tranierten ViT- Modells.](https://static.wixstatic.com/media/f66879_e4c672947eed41ea81301540b9b1341d~mv2.png/v1/fill/w_980,h_496,al_c,q_90,usm_0.66_1.00_0.01,enc_auto/f66879_e4c672947eed41ea81301540b9b1341d~mv2.png)
Das Hauptproblem ist, dass wir mit 4500 Bildern trainiert haben und im Original ViT-Paper mit mehreren Millionen an Daten trainiert wurde. Uns fehlt hierfür sowohl ein entsprechend großen Datensatz als auch die Rechenkapazität.
Wir können dieses Problem jedoch umgehen indem wir ein vortrainiertes ViT-Modell aus PyTorch laden und dann auf unseren vergleichsweise kleinen Datensatz finetunen. Finetunen bedeutet in dem Sinne, dass das vortrainierte Modell bereits auf eine riesigen Datensatz gelernt hat wie Bild-basierten Features aussehen und wir es auf unsere spezifische Datensatz anpassen. Durch diesen Prozess hat unser Modell wie wir in Abbildung 6 sehen nach 10 Epochen nun eine Test und Training Accuracy von über 98%. Dieses Modell verwenden wir nun um Klassenvorhersagen auf von uns benutzerdefinierte Bilder zu treffen.
![Training und Test Accuracykurve des vortranierten und fine- getunten ViT-Modells.](https://static.wixstatic.com/media/f66879_f45a337e3d0d4990986c04b1fdce8d05~mv2.jpg/v1/fill/w_613,h_618,al_c,q_85,enc_auto/f66879_f45a337e3d0d4990986c04b1fdce8d05~mv2.jpg)
Wie wir in Abbildung 7 sehen, schneidet unser Modell hier äußerst gut ab und kann jedes davor (ungesehene) Objekt mit einer hohen Wahrscheinlichkeit der richtigen Klasse einordnen!
Wir können also durch die Verwendung und finetuning eines vortrainierten Transformer Modells schneller zu besseren Ergebnissen kommen, sparen Trainingsressourcen (Hardware) und kommen mit weniger Daten aus.
![Vorhersagen des vortrainierten und fingetuneten Vision Transformer Modells](https://static.wixstatic.com/media/f66879_769b350929a24bd18601317e0a5eb46d~mv2.png/v1/fill/w_980,h_376,al_c,q_90,usm_0.66_1.00_0.01,enc_auto/f66879_769b350929a24bd18601317e0a5eb46d~mv2.png)
Fazit
In diesem Use Case haben wir uns die theoretische Funktionsweise des klassischen Vision Transformers angeschaut, ihn Schritt für Schritt in unserem GitHub Repository codiert und auf eine Klassifikationsaufgabe angewendet. Es hat sich gezeigt, dass der Vision Transformer erst nach Anwendung einer bereits vortrainierten Version zielführende Ergebnisse liefert. Dies ist sinnvoll, da Vision Transformer im Allgemeinen datenintensive Modelle sind und keine starke induktive Verzerrung in das Modell einbringen. Es ist daher nicht praktikabel, Vision Transformer von Grund auf zu trainieren, da dies einerseits einen riesigen Datensatz und andererseits enorme Rechenkapazitäten erfordert. Wenn man jedoch ein bereits trainiertes Modell verwendet, kann man, wie wir gesehen haben, schnell gute Ergebnisse erzielen. Beim derzeitigen Stand der Forschung kann man sagen, dass CNN's bei kleinen Datensätzen gut abschneiden und Transformer bei großen Datensätzen besser.
Dennoch bleibt die Zukunft der Transfomermodelle spannend, insbesondere mit neuen Anwendungsfeldern in der Robotik. Wie in diesem Paper gezeigt, können Roboter durch die Fusion von Bild- und Sprachtransformatoren (sog. Vision-Language-Modellen) Bewegungsabläufe auf der Basis von Sprachbefehlen generieren und ausführen.
Comments