In diesem Use Case wird die grundlegende Funktionsweise eines Vision Transformers, entsprechend Abbildung 1, erklärt, ausgecoded und auf eine Klassifikationsaufgabe, traniert sowie angewandt. Der Code im Jupyterlab-notebook wird analog zu dem Vision Transformer Paper An Image is Worth 16x16 Words: Transformer for Image Recognition at Scale erstellt und auf einen neuen Datensatz getestet. Der Datensatz hierfür ist der WOD: Web Object Dataset. Das Jupyterlab-notebook ist eine überarbeitete Form von GitHub Repository von mrdbourke, welcher ein frei zugängliches PyTorch Tutorial auf seiner Homepage bereitstellt.
Abbildung 1: Übersichtgrafik Vision Transformer
Für diesen Use-Case verwenden wir Python3 und Pytorch. Um dieses Projekt selber auf Ihrem lokalen Rechner ausführen zu können gehen Sie entsprechend folgender Anweisung vor:
-
Installieren Sie Docker für Ihr System.
-
Installieren Sie Git für Ihr System.
-
Öffnen Sie ein Terminal bzw. Konsole (unter Windows Powershell)
-
Clonen bzw. kopieren Sie den AIAV Projektordner auf ihrne lokalen Speicher mittels folgenden Befehls:
git clone https://github.com/TW-Robotics/AIAV/ -
Navigieren Sie in den Ordner Von_Large_Language_Models_zum_Vision_Transformer:
cd AIAV/Von_Large_Language_Models_zum_Vision_Transformer -
Führen Sie das buildandrun Skript aus:
- unter Windows starten Sie zuerst Docker Desktop und führen Sie dann folgenden Befehl aus:
.\buildandrun.ps1- unter Ubuntu:
bash buildandrun.sh
Nun wird der Docker Container heruntergeladen und startet. Der Prozess ist abgeschlossen, wenn ein Link von Jupyter-Lab in der Konsole aufscheint. Klicken Sie diesen Jupyter-Link in der Konsole an, oder kopieren Sie ihn in einen Browser Ihrer Wahl, um Jupyter-Lab zu öffnen. Klicken Sie nun auf notebook.ipynb um dieses zur Ansicht und zum Ausführen in Jupyter-Lab zu öffnen. Hier können Sie nun den Code verfolgen, ausführen, und adaptieren.
-
Bevor Sie den Container erneut ausführen müssen Sie den bestehenden schließen, hierfür führen Sie bitte folgenden Befehl aus:
docker kill VIT
In diesem Abschnitt werden die Ergebnisse dieses Use Case vorgestellt. Zum einen ist die theoretische Fundierung entsprechend Abbildung 1 ein wichtiger Bestandteil dieses Use-Case. Zum anderen wird der Code des ViT in notebook.ipynb aufbereitet und darin ein Modell von Grund auf trainiert sowie ein bestehendes ViT-Modell verfeinert. Der Datensatz hierfür ist Teil des WOD: Web Object Dataset. Die Ergebnisse der beiden Modelle für die Klassifikationsaufgabe sind in den folgenden zwei Abbildungen 2 & 3 mit den entsprechenden Accuracy-Kurven für die Test- und Trainingsdatensätze dargestellt:
Abbildung 2: Training und Test Accuracykurve des von Null tranierten ViT-Modells.
Abbildung 3: Training und Test Accuracykurve des vortranierten und fine-getunten ViT-Modells.
Die Performance unseres eigenständig und von Grund auf trainierten Transformer-Modells lässt zu wünschen übrig. Deshalb haben wir ein bereits existierendes und vortrainiertes Transformer-Modell feingetuned. Die Ergebnisse bezüglich der Accuracy sind hier um ein Vielfaches besser. Die Anwendung dieses feingetunten Modells auf eigene und bisher vom Modell nicht gesehene Daten ist vielversprechend, wie in Abbildung 4 zu sehen ist.
Abbildung 4: Vorhersagen des vortrainierten und fingetuneten Vision Transformer Modells auf benutzerdefinierte Bilder; links: Tastatur mit einer Warhscheinlichkeit von 98% vorhergesagt, mitte: Laptop mit einer Wahrscheinlichkeit von 94% vorhergesagt, rechts: Marker mit einer Warscheinlichkeit von 89% vorhergesagt.
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 in der Regel 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.