Skill Issue: Warum du Vision-Language-Modelle nicht deployen, sondern mit Skills nutzen solltest — Merve Noyan, Hugging Face
AAI Engineer
Computing/SoftwareSmall Business/Startups
Transcript
00:00:00Hallo und willkommen zu diesem Vortrag über Skill Issue. Es ist tatsächlich kein Skill Issue mehr. Am Ende
00:00:22dieses Vortrags werdet ihr mit Vision-Modellen viel bauen können, falls ihr das nicht ohnehin schon tut.
00:00:27Kurz zu mir: Ich bin Merve. Ich arbeite seit der LLaVA-1.5-Ära an Computer Vision, und in letzter Zeit beschäftige ich mich mehr mit Agenten und On-Device-Dingen, weil ich fasziniert bin. Ich liebe Vision-Language-Modelle so sehr, dass ich sogar ein Buch darüber geschrieben habe. Aber ich möchte nicht mehr, dass Entwickler direkt Vision-Language-Modelle nutzen, sondern dass wirklich jeder Entwickler beginnt,
00:00:54Vision-Anwendungen End-to-End zu bauen. Dieser Vortrag wird euch dafür eine solide Grundlage liefern. Ein häufiges Verhalten, das ich bei Entwicklern beobachte, ist, dass sie versuchen, Vision-Language-Modelle für alles einzusetzen. Aber damit bekommt man nie Echtzeit. Und mit Echtzeit meine ich: Selbst auf einem Toaster
00:01:18bekommt man etwa 30 bis 40 FPS, egal ob man Bildklassifizierung, Instanzsegmentierung oder etwas anderes baut.
00:01:28Und sie sind nicht besonders robust, verglichen mit einem trainierten RT-DETR, worüber Joseph im ersten Vortrag gesprochen hat.
00:01:39Dieser wird euer Vision-Language-Modell immer übertreffen, und das werde ich heute beweisen.
00:01:47Auf der rechten Seite könnt ihr mich sehen, wie ich Dinge mit RT-DETR mache.
00:01:52Ein weiterer Punkt ist, dass Entwickler die Lizenzen nicht lesen. Wann immer ich etwas über Objekterkennung poste, fragen mich alle nach YOLO. YOLO ist ein gutes Modell, aber es steht, glaube ich, unter einer GPL-3.0-Lizenz.
00:02:07Ich könnte alles darauf verwetten, dass einige Entwickler es einsetzen, ohne zu wissen,
00:02:12dass sie dafür bezahlen müssen. Deshalb möchte ich, dass ihr heute zu Apache-2.0-Modellen wechselt.
00:02:23Dazu habe ich etwas namens Vibe Vision gebaut. Es ist inspiriert von diesem Post von Maziar.
00:02:30Er gibt im Grunde das SAM-2.1-Modell als Werkzeug an Gemma 3 weiter, damit es dieses aufruft. Das finde ich extrem
00:02:39beeindruckend. Und heute habe ich ein Toolkit gebaut, mit dem man das mit noch mehr Dingen tun kann.
00:02:49Ich destilliere hier also quasi mein eigenes Wissen. Zunächst enthält dieses Toolkit meine Lieblingsmodelle als Tools,
00:02:57damit ihr sie eurem Agenten geben könnt. Denn euer Coding-Agent ist als Computer-Vision-Ingenieur
00:03:03im Grunde ziemlich ahnungslos. Wenn ich mein Wissen destilliere und ein Modell auswähle, prüfe ich
00:03:09immer Folgendes: Die Lizenz hat höchste Priorität. Es muss Apache 2.0, MIT oder
00:03:16eine andere freie Lizenz sein. Zweitens muss die Leistung stimmen, gemessen an der Größe
00:03:24oder den Architekturentscheidungen. Das überprüfe ich anhand der Benchmarks, sobald ein Modell von einer Computer-Vision-Konferenz
00:03:31veröffentlicht wird. Und drittens natürlich die Vibes. Dieses Toolkit hat noch einen zweiten Teil, der ein wenig wie ein
00:03:41Vibe-Training-Teil ist – und das ist der spannendste Part. Den gehe ich zuerst durch. Ich habe mich
00:03:47in die Lage von Entwicklern versetzt, die eine Vision-Anwendung bauen wollen. Habe ich gelabelte Bilder? Einfach, dann trainiere ich ein Modell
00:03:55oder gebe meinem Computer-Vision-Agenten Tutorials dazu, denn das ist alles frei verfügbar
00:04:02– wir haben dafür Transformers gebaut. Wenn ich aber nur ungelabelte Bilder habe, muss ich sie annotieren, die Annotationen
00:04:11auswerten und dann ein Modell trainieren. Aber wie skaliert man das? Man kann tatsächlich ein Vision-Language-Modell
00:04:17als Annotator und als Judge nutzen und dann trainieren, was man möchte. Aber wie
00:04:24sieht diese Pipeline aus? Ich habe genau das gebaut: Ein VLM für das Labeln, ein VLM als
00:04:35Judge und anschließend das Training. Das ist eine recht langwierige Aufgabe für Coding-Agenten und bietet viele
00:04:42Infrastruktur-Optionen. Man kann es lokal oder remote ausführen. Im Grunde läuft es auf der Hugging-Face-Infrastruktur.
00:04:48Wir haben Jobs, die einmalige Batch-Verarbeitungen oder Trainingsläufe ermöglichen.
00:04:54Wir haben auch ein serverloses Routing-System namens Inference Providers, mit dem man mehrere
00:05:00Anbieter nutzen kann. Zudem nutzen wir Buckets zum Ablegen von Zwischendaten neben den Dataset-
00:05:07und Modell-Repositories. Aber was ermöglicht diese Arbeit? Erstens mein Lieblingsmodell RT-DETR – RT-DETR
00:05:17Segmentation, woran ich aktuell arbeite. Wir haben bessere Agenten für komplexe,
00:05:24mehrstufige Aufgaben, bei denen man den Labeling- und Trainingsprozess überwachen muss.
00:05:32Kleinere, aber leistungsfähigere Vision-Modelle ermöglichen sehr günstiges Labeln. Und mit
00:05:40Transformers haben wir das v5-Refactoring durchgeführt, sodass die Performance für Vision-Modelle derzeit besser ist.
00:05:47So sieht die Pipeline in der Praxis aus: Zuerst labele ich den Datensatz. Ich nehme also einen Bilddatensatz,
00:05:54irgendeinen Bilddatensatz, und labele ihn mit Qwen2.5-VL-7B. Dann übergebe ich den
00:06:02gelabelten Datensatz an zwei Judges: Der erste ist Gemma 3 4B, was ein 4B-Judge ist, und der zweite ist
00:06:10Llama-3.2-11B-Vision mit fast 11B. Ich habe mir die Forschung angesehen: Es ist besser,
00:06:18ein Ensemble kleinerer Judges zu haben. Anschließend führe ich die Urteile zusammen. Ich habe auch die
00:06:26Forschung dazu geprüft: Die meisten bitten das VLM oder LLM, eine Punktzahl zu vergeben. Aber diese Punktzahlen
00:06:34funktionieren überhaupt nicht, besonders wenn die Judges unterschiedlich groß sind. Danach übergebe ich es
00:06:40zum Training von RT-DETR Medium oder Large. Ich habe mich mit den Leuten von Roboflow unterhalten, und sie haben mich ermutigt,
00:06:47das zu nutzen. Und es funktioniert tatsächlich, ich werde es euch gleich zeigen. Aber wie funktioniert es genau?
00:06:55Man nimmt das Repository und fragt es einfach: „Kannst du das Training auf diesem Datensatz
00:07:04auf dem Hub durchführen?“ Dann startet es. Wenn der Datensatz bereits Labels hat, kann man direkt
00:07:11mit dem Training beginnen. Wenn nicht, startet man das Annotieren. Der Trick dabei ist,
00:07:19dass ich dem Judge die Bilder mit den eingeblendeten Bounding Boxes übergebe. Qwen gibt Bounding Boxes
00:07:27technisch als Token aus. Die übergebe ich nicht direkt, sondern zeichne die Bounding Boxes auf das Bild
00:07:33zusammen mit Labels und Label-Beschreibungen. Ich sage: „Wenn diese Label-Beschreibung diese Bounding Box
00:07:40auf dem Bild hat, sag mir, ob du zustimmst oder nicht.“ Dann führe ich die Urteile der Judges
00:07:49über eine Mindestübereinstimmung zusammen und nicht über Konsens – worauf ich gleich noch eingehen werde. Und diese
00:07:56Label-Beschreibungen werden ebenfalls von Coding-Agenten generiert, und man segnet sie als Mensch einfach ab.
00:08:03Die Modelle, die ich in dieser Pipeline verwendet habe, haben alle Apache-2.0-Lizenzen, außer
00:08:10dem Llama-Modell, das eine Lizenz hat, bei der man ab einem gewissen Umsatz
00:08:19dafür zahlt. Aber man kann es bedenkenlos nutzen. Was die Coding-Agenten angeht, die diese Pipeline
00:08:26überwachen: Ich habe sie anfangs mit Claude 3.5 Sonnet gebaut und den Workflow dann mit Qwen 2.5 Coder ausgeführt,
00:08:35das bei komplexen Aufgaben einen wirklich guten Job macht. Zur Infra: Ich arbeite bei Hugging
00:08:42Face, habe viele Compute-Credits und bin ein sehr ungeduldiger Mensch. Deshalb nutze ich ordentlich
00:08:50Hardware für Experimente. Ich habe es aber gebenchmarkt: Insgesamt kostet es etwa 3 bis 4 Dollar, wenn man
00:08:58diese gesamte Pipeline ausführen möchte, um Modelle zu trainieren – was ich verrückt finde. Für Qwen2.5 habe ich anfangs
00:09:05Serverless genutzt, weil ich dachte: Das ist bequem und extrem günstig. Ich habe DeepInfra genutzt, was
00:09:12supergünstig ist. Wenn man Together nutzt, ist es besser, Batch-Verarbeitung über Jobs zu machen.
00:09:19Für das Bewertungssystem habe ich Hugging Face Jobs genutzt, was weniger kostet, und fürs Training eine L4-GPU.
00:09:27Aber das Modell ist extrem klein – RT-DETR ist winzig. Man kann auch etwas anderes nutzen oder es
00:09:33lokal machen, wenn man möchte. Ich bin nur ungeduldig und wollte eine große Batch-Size. Ich habe es an zwei Problemen getestet:
00:09:42Erstens die Erkennung von Verkehrsschildern, zweitens das Parsea von Dokumenten. Für die Verkehrsschilder-Erkennung
00:09:48hatte ich bereits Labels. Ich habe also mit den echten Ground-Truth-Annotationen verglichen, ob meine Pipeline
00:09:54funktioniert oder nicht. Beim Dokumenten-Parsing ging das nicht, weil ich einen DocVQA-
00:10:02Datensatz genutzt habe. Das Problem war, dass ich Bilder, Tabellen, Unterschriften und Ähnliches extrahieren wollte.
00:10:08Das war also eine neuartige Aufgabe, und ich wollte sehen, ob RT-DETR das lernen kann. Erstes Ergebnis: Es funktioniert, juhu!
00:10:19Wir haben eine gute Mean Average Precision von über 50. Ich vergleiche es so: Ich habe ein Test-Set,
00:10:29schicke es durch Qwen und vergleiche es dann mit den Pseudo-Annotationen
00:10:35und den Ground-Truth-Annotationen dieses Test-Sets. Es gibt einen kleinen Unterschied, aber das war zu erwarten,
00:10:42da es von Qwen gelernt hat. Auch die ROC-AUC ist ehrlich gesagt ein sehr guter Wert für so einen
00:10:50Anwendungsfall. Und beim Dokumenten-Parsing verallgemeinert es tatsächlich, was ich verrückt finde.
00:10:58Hier sieht man die Ausgabe des trainierten Modells: Es hat die Unterschrift erkannt, während die Qwen-Annotation
00:11:06dieses Test-Sets sie übersehen hat. Ich würde also sagen, dass es sich auch sehr gut verallgemeinern lässt.
00:11:12Aber das verdanken wir auch der Qualität von RT-DETR als Backbone. Hier sieht man auch,
00:11:21wie es die Bilder technisch erfasst – und zwar eins zu eins. Als ich das gebaut habe, ist mir
00:11:30aufgefallen, dass ich keine Ahnung vom Bauen mit Vision-Agenten hatte. Dazu habe ich ein paar Erkenntnisse.
00:11:37Erstens gibt es ein großes Ungleichgewicht beim Bewerten: Je nach Problem neigt Llama dazu, viel abzulehnen.
00:11:44Deshalb konnte ich keinen Konsens nehmen. Denn wenn ich alles eliminiert hätte, wo sich
00:11:50sowohl Llama als auch Gemma einig waren, es zu entfernen, wären nur sehr wenige Beispiele übrig geblieben.
00:11:58Das hätte zu einer sehr schlechten Verallgemeinerung geführt. Also habe ich entschieden: Wenn einer von beiden „Ja“ sagt,
00:12:04nehme ich dieses Beispiel. Und trotzdem hat es gut funktioniert. Wenn ihr aber einen großen Datensatz habt und euch
00:12:09der Recall wichtig ist, empfehle ich, den Konsens zu nehmen oder es genau zu beobachten. Beim Dokumenten-Parsing
00:12:17ist der Unterschied nicht so groß. Zweitens ist die Prompt-Generierung etwas schwierig. Das ist der einzige Teil, den man
00:12:28als Mensch genehmigen muss: Das Modell generiert die Prompts für den Judge, und man
00:12:35sagt: „Ok, das genehmige ich.“ Denn man muss sich den Datensatz trotzdem kurz ansehen.
00:12:42Daran führt kein Weg vorbei. Und drittens – das ist super interessant: Euer
00:12:52Coding-Agent mag noch so gut sein – egal ob man Claude 3.5 Sonnet nimmt, was ein sehr guter
00:12:59Coding-Agent ist – er ist als Computer-Vision-Ingenieur ebenso ahnungslos und lässt gesunden Menschenverstand vermissen.
00:13:06Er hat zum Beispiel Verkehrsschilder horizontal gespiegelt oder Farbänderungen bei
00:13:14Ampeln vorgenommen, was die Datensätze definitiv beschädigt und unbrauchbar macht. Das habe ich später korrigiert,
00:13:21sodass man festlegen kann, ob man Augmentierung möchte oder nicht. Euer Coding-Agent hilft euch dabei.
00:13:30Und schließlich ist der zweite Teil dieses Toolkits meine bevorzugten Modelle als Tools.
00:13:35Dieses Repository deckt meine Lieblingsmodelle ab, von Tiefenschätzung bis hin zu Zero-Shot-Segmentierung.
00:13:42Und das wird teilweise unterstützt durch erstens die Hugging Face Benchmarks, die wir vor ein paar Monaten herausgebracht haben.
00:13:48Wir haben im Grunde eine Benchmark-Bestenliste, und dort
00:13:55findet man offene Modelle sowie deren Evaluierungsergebnisse, sodass man verschiedene Modelle unterschiedlicher
00:14:02Größen vergleichen kann. Ich halte das auf dem Laufenden, aber es basiert teilweise auch auf mir, da ich gerne
00:14:13Computer-Vision-Konferenzpapiere lese. Ich möchte dieses Modell besonders hervorheben, weil
00:14:20nicht viele davon wissen. Manche Modelle können keine offene Referenzsegmentierung durchführen,
00:14:26wie etwa: "Segmentiere dieses rote Auto", und das klappt. Aber wenn man sagt: "Das rote Auto neben
00:14:33dem orangen Auto, das neben dem blauen Auto steht", schafft es das nicht. Falcon Perception,
00:14:39ein Modell von TII, kann das tatsächlich. Und es hat nur etwa 600 Millionen Parameter mit einer Apache-2.0-Lizenz.
00:14:47Das hier übernimmt also die Zero-Shot-Segmentierung für mich.
00:14:51Das ist keine vollständige Liste. Für Posenschätzung haben wir die Sapiens-Familie
00:14:58für personenzentrierte Aufgaben, bei denen man Keypoint-Erkennung, menschliche
00:15:04Tiefenschätzung usw. benötigt. Für Zero-Shot-Erkennung habe ich Moondream 3 und MM-Grounding-DINO,
00:15:13ein Modell mit Apache-2.0-Lizenz, das ebenfalls sehr gut und im Vergleich zu Moondream sehr klein ist. Ich biete
00:15:20mehrere Modelle in verschiedenen Größen an, je nach Hardware, damit Sie wählen können: Wenn Sie
00:15:25Schnelligkeit wollen, nehmen Sie die Tiny-Alternative. Für OCR habe ich Modelle aus dem olmOCR-Benchmark
00:15:34in verschiedenen Größen genommen. Und bei der Tiefenschätzung habe ich festgestellt, dass das große Modell
00:15:40keine kommerzielle Lizenz hat, der Rest aber schon, sodass man es nutzen kann. Das eine hat
00:15:45eine Apache-2.0-Lizenz und kommt mit Unterstützung für Supervision und Tracker. Beide sind
00:15:51Bibliotheken von Roboflow, mit denen man Instanzen, Bounding Boxes usw. verfolgen kann.
00:16:00Zu den Zukunftsplänen: Ich kann mir vorstellen, dass Sie sagen: "Das wird für
00:16:06Anwendungsfälle in der Industrie nicht funktionieren, weil diese andere Komponenten beinhalten, etwa schwer beschreibbare
00:16:13Teile, für die natürliche Sprache kein guter Zugang ist." In dem Sinne könnte bildgestützte Erkennung
00:16:21helfen. Wer bildgestützte Erkennung nicht kennt: Man hat im Grunde ein Beispielbild,
00:16:27wie zum Beispiel Huggy hier, und bittet das Modell: "Erkenne dieses Objekt in diesem Bild"
00:16:36über alle Bilder hinweg. Ich denke, das könnte bei Industrie-Anwendungsfällen helfen, wo
00:16:41man Dinge nicht mit natürlicher Sprache beschreiben kann. Außerdem möchte ich eine Art
00:16:52"Intersection over Union"-Zusammenführung testen. Man hat gelabelte Boxen und Judge-Boxen. Man bittet den Judge,
00:17:00eine Box zu generieren, und nimmt dann die Intersection over Union, anstatt ihn nur ablehnen oder
00:17:06akzeptieren zu lassen. Derzeit arbeite ich an der Segmentierungsunterstützung. Danke fürs Zuhören! Wenn
00:17:14Sie mehr erfahren möchten: Ich habe ein kleines Vision-Repo. Es enthält alles über
00:17:20Fine-Tuning, Quantisierung von Modellen, multimodale Modelle – einfach alles rund um Vision sowie
00:17:27Transformers-Anleitungen. Wir halten sie aktuell, es gibt viele Tutorials. Wir haben auch Hugging Face Skills,
00:17:36die spezielle Computer-Vision-Skills sowie Infra-Skills bieten, sodass man einfach ein
00:17:43Training per Ein-Zeilen-Prompt durchführen kann. Das ist mein Twitter-Profil, und dieses Repo liegt auf GitHub unter
00:17:51mervenoyan/vision-intern. Ich glaube, ich habe noch Zeit für eine Frage. Vielen Dank!
00:18:04Ja, er fragt, ob ich plane, VLMs selbst zu trainieren, im Sinne einer Selbstverbesserung.
00:18:16Das wäre super spannend, aber zuerst möchte ich das Problem lösen, dass Entwickler
00:18:22aufgabenspezifische Modelle trainieren und auf Edge-Geräten bereitstellen. Und danach könnte das kommen. Vielleicht noch eine Frage, ja?
00:18:34Nicht wirklich, das denke ich nicht. Ich habe nur... weil der Coding-Agent den
00:18:44Kontext hat, wollte ich, dass er den Prompt generiert. Vielleicht noch eine Frage? Okay, vielen Dank!
00:19:04Also,
Community Posts
No posts yet. Be the first to write about this video!
Write about this video