Vision Transformer (ViT)

Was ist ein Vision Transformer (ViT)?

Ein Vision Transformer ist ein Modell im Bereich der Bildverarbeitung, welches vor allem in der Bilderkennung des maschinellen Lernens eingesetzt wird. Es ist im Wissenschaftsbereich der Computer Vision angesiedelt, einem Bereich, welcher Fotos und Bilder derart analysiert und verarbeitet, dass die enthaltenen Informationen auch für Computer verstanden und „gesehen“ werden können. Dadurch wird die Basis für die Weiterverarbeitung der Fotos und Bilder geschaffen.

Im Jahr 2020 erlangte das Bilderkennungsverfahren des Vision Transformer durch das Paper „An Image is Worth 16×16 Words: Transformers for Image Recognition at Scale“ hinlängliche Bekanntheit. Bereits zuvor wurden die sogenannten Transformer vor allem in der Sprach- und Texterkennung des Natural Language Processing (NLP) im Bereich der neuronalen Netze eingesetzt. Seit der Erscheinung des Papers wird diese Idee in leicht modifizierter Form auch für die Bildverarbeitung und Bilderkennung genutzt.

Vision Transformer sind auch in einigen Programmbibliotheken wie beispielsweise PyTorch oder Keras implementiert. Bei beiden handelt es sich um Open-Source-Bibliotheken, welche im maschinellen Lernen bzw. Deep-Learning eingesetzt werden und für eine Implementierung für die Programmiersprache Python bzw. C++ angedacht sind.

Wie ist ein Vision Transformer aufgebaut?

Ein Vision Transformer macht sich dasselbe Rechenmodell bzw. Algorithmus zunutze, welcher bei Texterkennungs- und Textverarbeitungssoftware wie beispielsweise bei BERT von Google Anwendung findet.

Das Herzstück des Transformers stellt die sogenannte „Attention“ dar. Die Attention bezeichnet eine Beziehung eines Teils einer Eingangsgröße (Wort, Pixel oder Ähnliches) mit den übrigen Teilen aus der Eingangsgröße. Solche Eingangsgrößen, welche im Anschluss zur Weiterverarbeitung geeignet sind, nennt man Token. In der Texterkennung kann dies ein Wort oder eine Wortsilbe sein, in der Bilderkennung beispielsweise ein einzelnes Pixel. Da ein Bild jedoch aus einer Vielzahl von Pixeln besteht, wäre die Anwendung des Algorithmus auf jedes einzelne Pixel aus Sicht des benötigten Speichers bzw. der benötigten Zeit kaum zielführend. Deshalb unterteilt man das Bild in einzelne kleine Abschnitte/Patches (z. B. 14×14 oder 16×16 Pixel).

Im nächsten Schritt vektorisiert man die Abschnitte („Flattening“) und wandelt sie durch lineare Transformation in „linear embeddings“ um. Die Patches erhalten schließlich noch lernbare Positionierungs-Embeddings, wodurch das Rechenmodell Erkenntnisse über die Struktur des Bildes erlernen kann.

Im Anschluss erfolgt die Verarbeitung in einem Transformer Encoder. Hierbei werden die Daten anhand der vorhandenen Trainingsdaten bzw. ViT-Modellen mithilfe der Attention-Layer und sogenannter Multi-Layer-Perceptron (MLP) (vor)klassifiziert. Die Modelle ViT-Base, ViT-Large und ViT-Huge besitzen zwischen 12 und 32 Schichten und arbeiten mit 86 Millionen bis 632 Millionen Parametern. Abschließend unternimmt ein MLP-Head die endgültige Klassifizierung. Im Gegensatz zu Transformer, welche beispielsweise bei BERT eingesetzt werden, entfällt beim Vision Transformer der Decoder.

Was ist der Unterschied zu einem Convolutional Neural Network?

Convolutional Neural Networks (CNN; deutsch: „faltendes neuronales Netzwerk“) finden seit geraumer Zeit Anwendung im Bereich der Computer Vision. Die „Faltung“ beschreibt dabei einen mathematischen Operator, welcher bei der Durchführung des Algorithmus angewandt wird.

Die Unterschiede zwischen einem Convolutional Neural Network und einem Vision Transformer liegen vor allem im architektonischen Aufbau, auch wenn es bestimmte Gemeinsamkeiten der Bereiche gibt. Während CNNs in der Regel aus mehreren Schichten bestehen, welche sequenziell abgearbeitet werden, arbeitet ein Vision Transformer weitestgehend parallel. Dabei spielen bei CNNs vor allem die Convolutional Layer und Pooling Layer eine wichtige Rolle, welche mehrmals hintereinander durchlaufen werden können und mit einem oder mehreren Fully-connected Layer abgeschlossen werden. Laut Google unterbietet ihr ViT ein hochmodernes CNN mit viermal weniger Rechenressourcen.

Verteilte Datensysteme (Distributed File Systems)

Computer benötigen Betriebssysteme (OSe) um zu funktionieren. Betriebssysteme sind das grundlegende Level von Software, die die grundlegenden Funktionen eines Computers unterstützen, ihn funktionieren lassen und in erster Linie benutzbar machen. Jeder kennt die berühmtesten Betriebssysteme für persönliche Computer, wie Windows, MAC OS und Linux. Eine der grundlegendsten Funktionen des Betriebssystems ist das Datensystem.

Zum Beispiel kennt jeder das Windows Datensystem, dass Microsoft Benutzern eine Ordnerstruktur zur Verfügung stellt, in der sie Daten in jeder Form, zum Beispiel als Dokumente, Musik und Bilder, speichern können. Ebenso wie normale Computer brauchen auch Computercluster Software, die die grundlegenden Funktionen, z.B. die Koordination zwischen unterschiedlichen Knotenpunkten des Clusters, ermöglichen. Eine solche Softwareumgebung für den Betrieb eines Computerclusters ist Apache Hadoop. 

Softwareumgebungen für den Betrieb von Computerclustern muss ein verteiltes Datensystem bereitstellen. Genauso wie bei normalen Computern brauchen Benutzer auch in Computerclustern eine Möglichkeit zum Speichern ihrer Daten. Die Implementierung eines Datensystems auf einen einzelnen Computer ist, verglichen mit der Implementierung in einem verteilten System, einfach.

Der Grund dafür ist, dass wenn man Dateien und Dokumente übergreifend über mehrere Computer speichern möchte, diese aufgeteilt werden müssen und parallel auf mehreren Knotenpunkten gespeichert werden müssen – und das alles nahtlos für den Benutzer. Dies ist sehr schwer zu realisieren (bedenken Sie nur, wie schwierig es ist sich an all die Dinge zu erinnern, die sie in kleinen Kisten verpackt haben, wenn sie umziehen). Einige Beispiele von verteilten Datensystemen sind das Google File System (GFS) und das Hadoop Distributed File System (HDFS).