Vision Transformer und CLIP
Bilder in Kacheln zerlegen und wie Text behandeln: warum das funktioniert, wann es CNNs schlägt und wie ein gemeinsamer Bild-Text-Raum entsteht.
Die Idee
Ein Sprachmodell zerlegt einen Satz in Wortstücke und lässt jedes Stück auf alle anderen schauen. Ein Vision Transformer macht dasselbe mit einem Bild: Er schneidet es in Quadrate von meist 16 mal 16 Pixeln und behandelt jedes Quadrat wie ein Wort.
Was daran anders ist
Ein CNN sieht zunächst nur die unmittelbare Nachbarschaft und wird erst über viele Schichten weitsichtig. Ein Transformer kann von der ersten Schicht an eine Kachel oben links mit einer unten rechts vergleichen. Das ist ein Vorteil bei Zusammenhängen über das ganze Bild und ein Nachteil, wenn wenig Daten vorliegen.
Zero-Shot-Klassifikation mit CLIP
# Prinzip, unabhaengig von der konkreten Bibliothek:
klassen = ["eine Palette mit Kartons",
"eine leere Palette",
"ein beschaedigter Karton"]
bild_vektor = bild_encoder(bild) # 512 Werte, normiert
text_vektoren = [text_encoder(t) for t in klassen] # je 512 Werte, normiert
# Kosinusaehnlichkeit, weil beide Vektoren auf Laenge 1 normiert sind.
scores = [float(bild_vektor @ t) for t in text_vektoren]
print(klassen[int(max(range(len(scores)), key=scores.__getitem__))])Die Formulierung der Klassentexte ist dabei kein Detail. „ein Foto einer leeren Palette" schneidet regelmäßig besser ab als „leere Palette", weil das Trainingsmaterial überwiegend aus Bildunterschriften bestand.
Wann was
| Lage | Empfehlung |
|---|---|
| Unter 5.000 eigene Bilder | Vortrainiertes CNN feinabstimmen |
| 5.000 bis 100.000 Bilder | Vortrainierter ViT oder modernes CNN, beides prüfen |
| Über 100.000 Bilder | ViT skaliert besser |
| Keine Annotation vorhanden | CLIP zero-shot als Ausgangswert |
| Randgerät, wenig Rechenleistung | CNN, meist mit trennbaren Faltungen |
Die Zerlegung in Kacheln
Bei 224 × 224 und P = 16 sind das 196 + 1 = 197 Token. Bei 512 × 512 bereits
1024 + 1. Da der Aufwand der Attention quadratisch in N wächst, ist die
Verdopplung der Bildkantenlänge ein Faktor 16 im Attention-Aufwand: der Grund
für hierarchische Varianten wie Swin, die Attention nur innerhalb von Fenstern
rechnen.
Der kontrastive Verlust
Die Batch-Größe ist hier kein Effizienzparameter, sondern Teil des Verfahrens: jedes Element des Batches dient als Gegenbeispiel für alle anderen. CLIP wurde mit Batches von 32.768 trainiert, und kleinere Batches liefern messbar schwächere Repräsentationen.
Aufmerksamkeitskarten als Erklärung
Attention-Gewichte lassen sich als Karte über das Bild zeichnen und wirken wie eine Erklärung. Sie sind es nur eingeschränkt: Attention zeigt, welche Kacheln miteinander gerechnet haben, nicht, welche für das Ergebnis ursächlich waren. Für eine belastbare Begründung sind Verfahren wie Attention Rollout oder gradientenbasierte Zuordnung nötig, und auch die bleiben Zuschreibungen, keine Kausalaussagen. Wer eine solche Karte in eine technische Dokumentation nach AI Act aufnimmt, muss das benennen.
Passende Kurse und Quellen
An Image is Worth 16x16 Words
Bilder als Folge von Feldern, verarbeitet wie Text. Die Arbeit, die Transformer in die Bildverarbeitung gebracht hat.
Für alle, die Bild und Text in einem Modell verarbeiten wollen.
Hugging Face Computer-Vision-Kurs
Von der Bildvorverarbeitung über Faltungsnetze bis zu Vision Transformern, mit lauffähigen Beispielen zu Erkennung und Segmentierung.
Für Entwicklung mit Bilddaten; setzt Python voraus, liefert dafür lauffähige Beispiele.