Multimodale Modelle sind Architekturen, die verschiedene Datentypen wie Textual content, Bilder und Audio gleichzeitig integrieren und verarbeiten. Einige Beispiele sind CLIP und DALL-E von OpenAI, beide im Jahr 2021 veröffentlicht. CLIP versteht Bilder und Textual content gemeinsam und kann so Aufgaben wie die Zero-Shot-Bildklassifizierung ausführen. DALL-E hingegen generiert Bilder aus Textbeschreibungen und ermöglicht so die Automatisierung und Verbesserung kreativer Prozesse unter anderem in den Bereichen Spiele, Werbung und Literatur.
Visuelle Sprachmodelle (VLMs) sind ein Sonderfall multimodaler Modelle. VLMs generieren Sprache basierend auf visuellen Eingaben. Ein prominentes Beispiel ist Paligemma, das Google im Mai 2024 eingeführt hat. Paligemma kann zur visuellen Beantwortung von Fragen, zur Objekterkennung und zur Bildsegmentierung verwendet werden.
In einigen Weblog-Beiträgen werden die Fähigkeiten von Paligemma bei der Objekterkennung untersucht, beispielsweise in dieser hervorragenden Lektüre von Roboflow:
Als ich diesen Weblog schrieb, conflict die vorhandene Dokumentation zur Datenvorbereitung für die Verwendung von Paligemma zur Objektsegmentierung jedoch vage. Deshalb wollte ich evaluieren, ob es einfach ist, Paligemma für diese Aufgabe zu verwenden. Hier teile ich meine Erfahrungen.
Bevor wir detailliert auf den Anwendungsfall eingehen, werfen wir noch einmal einen kurzen Blick auf das Innenleben von Paligemma.
Paligemma vereint a SigLIP-So400m Imaginative and prescient-Encoder mit einem Gemma-Sprachmodell um Bilder und Textual content zu verarbeiten (siehe Abbildung oben). In der neuen Model von Paligemma, die im Dezember dieses Jahres veröffentlicht wurde, kann der Imaginative and prescient-Encoder Bilder mit drei verschiedenen Auflösungen vorverarbeiten: 224px, 448px oder 896px. Der Imaginative and prescient-Encoder verarbeitet ein Bild vor und gibt eine Folge von Bild-Tokens aus, die linear mit Eingabetext-Tokens kombiniert werden. Diese Token-Kombination wird vom Gemma-Sprachmodell weiterverarbeitet, das Textual content-Tokens ausgibt. Das Gemma-Modell hat verschiedene Größen, von 2B bis 27B Parametern.
Ein Beispiel für die Modellausgabe ist in der folgenden Abbildung dargestellt.
Das Paligemma-Modell wurde anhand verschiedener Datensätze trainiert, z WebLi, openImages, WITZund andere (siehe hier Kaggle-Weblog für weitere Einzelheiten). Dies bedeutet, dass Paligemma Objekte ohne Feinabstimmung identifizieren kann. Allerdings sind solche Fähigkeiten begrenzt. Aus diesem Grund empfiehlt Google, Paligemma in domänenspezifischen Anwendungsfällen zu optimieren.
Eingabeformat
Zur Feinabstimmung von Paligemma müssen die Eingabedaten im JSONL-Format vorliegen. Bei einem Datensatz im JSONL-Format ist jede Zeile ein separates JSON-Objekt, wie eine Liste einzelner Datensätze. Jedes JSON-Objekt enthält die folgenden Schlüssel:
Bild: Der Identify des Bildes.
Präfix: Dies gibt die Aufgabe an, die das Modell ausführen soll.
Suffix: Dies liefert die Grundwahrheit, die das Modell lernt, um Vorhersagen zu treffen.
Je nach Aufgabe müssen Sie das Präfix und Suffix des JSON-Objekts entsprechend ändern. Hier einige Beispiele:
{"picture": "some_filename.png",
"prefix": "caption en" (To point that the mannequin ought to generate an English caption for a picture),
"suffix": "That is a picture of a giant, white boat touring within the ocean."
}
{"picture": "another_filename.jpg",
"prefix": "How many individuals are within the picture?",
"suffix": "ten"
}
{"picture": "filename.jpeg",
"prefix": "detect airplane",
"suffix": "<loc0055><loc0115><loc1023><loc1023> airplane" (4 nook bounding field coords)
}
Wenn mehrere Kategorien erkannt werden sollen, fügen Sie im Präfix und Suffix zwischen jeder Kategorie ein Semikolon (;) ein.
Eine vollständige und klare Erklärung, wie die Daten für die Objekterkennung in Paligemma vorbereitet werden, finden Sie in dieser Roboflow-Beitrag.
{"picture": "filename.jpeg",
"prefix": "detect airplane",
"suffix": "<loc0055><loc0115><loc1023><loc1023><seg063><seg108><seg045><seg028><seg056><seg052><seg114><seg005><seg042><seg023><seg084><seg064><seg086><seg077><seg090><seg054> airplane"
}
Beachten Sie, dass Sie für die Segmentierung neben den Begrenzungsrahmenkoordinaten des Objekts 16 zusätzliche Segmentierungstoken angeben müssen, die eine Maske darstellen, die in den Begrenzungsrahmen passt. Entsprechend Das Huge Imaginative and prescient-Repository von Googlediese Token sind Codewörter mit 128 Einträgen (
Wenn Sie mehr über Paligemma erfahren möchten, empfehle ich diese Blogs:
Wie oben erwähnt, wurde Paligemma anhand verschiedener Datensätze trainiert. Daher wird erwartet, dass dieses Modell intestine in der Lage ist, „traditionelle“ Objekte wie Autos, Menschen oder Tiere zu segmentieren. Aber wie sieht es mit der Segmentierung von Objekten in Satellitenbildern aus? Diese Frage veranlasste mich, Paligemmas Fähigkeiten zur Segmentierung von Wasser in Satellitenbildern zu untersuchen.
Kaggles Satellitenbild des Datensatzes von Gewässern ist für diesen Zweck geeignet. Dieser Datensatz enthält 2841 Bilder mit den entsprechenden Masken.
Einige Masken in diesem Datensatz waren falsch und andere erforderten eine weitere Vorverarbeitung. Zu den fehlerhaften Beispielen gehören Masken, bei denen alle Werte auf „Wasser“ eingestellt waren, während im Originalbild nur ein kleiner Teil davon vorhanden conflict. Andere Masken entsprachen nicht ihren RGB-Bildern. Wenn ein Bild gedreht wird, erscheinen diese Bereiche bei einigen Masken so, als ob sie Wasser hätten.
Angesichts dieser Datenbeschränkungen habe ich eine Stichprobe von 164 Bildern ausgewählt, bei denen die Masken keines der oben genannten Probleme aufwiesen. Dieser Bildsatz wird zur Feinabstimmung von Paligemma verwendet.
Vorbereiten des JSONL-Datensatzes
Wie im vorherigen Abschnitt erläutert, benötigt Paligemma Einträge, die die Begrenzungsrahmenkoordinaten des Objekts im normalisierten Bildraum darstellen (
Als ich diesen Weblog schrieb (Anfang Dezember), kündigte Google die zweite Model von Paligemma an. Im Anschluss an diese Veranstaltung veröffentlichte Roboflow ein schöner Überblick der Aufbereitung von Daten zur Feinabstimmung von Paligemma2 für verschiedene Anwendungen, einschließlich Bildsegmentierung. Ich verwende einen Teil ihres Codes, um schließlich die richtigen Segmentierungscodewörter zu erhalten. Was conflict mein Fehler? Nun, zunächst muss die Größe der Masken auf einen Formtensor (Keine, 64, 64, 1) geändert werden und dann muss ein vorab trainierter Variational Auto-Encoder (VAE) verwendet werden, um Anmerkungsmasken in Textbeschriftungen umzuwandeln. Obwohl die Verwendung eines VAE-Modells im Huge Imaginative and prescient-Repository kurz erwähnt wurde, gibt es keine Erklärung oder Beispiele für die Verwendung.
Der Arbeitsablauf, den ich verwende, um die Daten für die Feinabstimmung von Paligemma vorzubereiten, ist unten dargestellt:
Wie beobachtet, ist die Anzahl der Schritte, die zur Vorbereitung der Daten für Paligemma erforderlich sind, groß, daher teile ich hier keine Codeausschnitte. Wenn Sie jedoch den Code erkunden möchten, können Sie ihn besuchen dieses GitHub-Repository. Das Drehbuch konvertieren.py verfügt über alle im oben gezeigten Workflow genannten Schritte. Ich habe auch die ausgewählten Bilder hinzugefügt, damit Sie sofort mit diesem Skript spielen können.
Bei der Vorverarbeitung der Segmentierungscodewörter zurück zu Segmentierungsmasken stellen wir fest, wie diese Masken die Gewässer in den Bildern abdecken:
Bevor ich Paligemma verfeinerte, habe ich seine Segmentierungsfunktionen an den auf Hugging Face hochgeladenen Modellen ausprobiert. Diese Plattform haAls Demo Hier können Sie Bilder hochladen und mit verschiedenen Paligemma-Modellen interagieren.
Die aktuelle Model von Paligemma ist im Allgemeinen intestine darin, Wasser in Satellitenbildern zu segmentieren, aber sie ist nicht perfekt. Mal sehen, ob wir diese Ergebnisse verbessern können!
Es gibt zwei Möglichkeiten, Paligemma zu optimieren: entweder durch Die Transformer-Bibliothek von Hugging Face oder durch die Verwendung von Huge Imaginative and prescient und JAX. Ich habe mich für diese letzte Choice entschieden. Huge Imaginative and prescient bietet eine Colab-Notizbuchdas ich für meinen Anwendungsfall modifiziert habe. Sie können es öffnen, indem Sie zu meinem gehen GitHub-Repository:
Ich habe ein verwendet Chargengröße von 8 und a Lernrate von 0,003. Ich habe die Trainingsschleife zweimal durchlaufen, was 158 Trainingsschritten entspricht. Die Gesamtlaufzeit mit einer T4-GPU-Maschine betrug 24 Minuten.
Die Ergebnisse waren nicht wie erwartet. In einigen Bildern lieferte Paligemma keine Vorhersagen, in anderen waren die resultierenden Masken weit von der Grundwahrheit entfernt. Ich habe auch Segmentierungscodewörter mit mehr als 16 Token in zwei Bildern erhalten.
Erwähnenswert ist, dass ich die erste Paligemma-Model verwende. Möglicherweise werden die Ergebnisse verbessert, wenn Paligemma2 verwendet wird oder indem die Stapelgröße oder die Lernrate weiter angepasst werden. Auf jeden Fall sind diese Experimente nicht Gegenstand dieses Blogs.
Die Demoergebnisse zeigen, dass das Standardmodell von Paligemma Wasser besser segmentieren kann als mein fein abgestimmtes Modell. Meiner Meinung nach ist UNET eine bessere Architektur, wenn das Ziel darin besteht, ein auf die Segmentierung von Objekten spezialisiertes Modell zu erstellen. Weitere Informationen zum Trainieren eines solchen Modells finden Sie in meinem vorherigen Blogbeitrag:
Weitere Einschränkungen:
Ich möchte einige andere Herausforderungen erwähnen, denen ich bei der Feinabstimmung von Paligemma mit Huge Imaginative and prescient und JAX begegnet bin.
- Das Einrichten verschiedener Modellkonfigurationen ist schwierig, da es noch wenig Dokumentation zu diesen Parametern gibt.
- Die erste Model von Paligemma wurde darauf trainiert, Bilder mit unterschiedlichen Seitenverhältnissen zu verarbeiten, die auf 224 x 224 verkleinert wurden. Stellen Sie sicher, dass Sie die Größe Ihrer Eingabebilder nur mit dieser Größe ändern. Dadurch wird verhindert, dass Ausnahmen ausgelöst werden.
- Bei der Feinabstimmung mit Huge Imaginative and prescient und JAX können Probleme mit der JAX-GPU auftreten. Möglichkeiten zur Lösung dieses Issues sind:
A. Reduzieren Sie die Stichproben in Ihren Trainings- und Validierungsdatensätzen.
B. Erhöhung der Chargengröße von 8 auf 16 oder mehr.
- Das fein abgestimmte Modell hat eine Größe von ~ 5GB. Stellen Sie sicher, dass in Ihrem Laufwerk genügend Speicherplatz zum Speichern vorhanden ist.
Die Entdeckung eines neuen KI-Modells ist spannend, insbesondere im Zeitalter multimodaler Algorithmen, die unsere Gesellschaft verändern. Allerdings kann die Arbeit mit hochmodernen Modellen aufgrund der fehlenden verfügbaren Dokumentation manchmal eine Herausforderung darstellen. Daher sollte die Einführung eines neuen KI-Modells von einer umfassenden Dokumentation begleitet werden, um eine reibungslose und breite Einführung sicherzustellen, insbesondere bei Fachleuten, die in diesem Bereich noch unerfahren sind.
Trotz der Schwierigkeiten, auf die ich bei der Feinabstimmung von Paligemma gestoßen bin, sind die aktuellen vorab trainierten Modelle leistungsstark bei der Zero-Shot-Objekterkennung und Bildsegmentierung, die für viele Anwendungen verwendet werden kann, einschließlich der unterstützten ML-Kennzeichnung.
Verwenden Sie Paligemma in Ihren Laptop Imaginative and prescient-Projekten? Teilen Sie Ihre Erfahrungen mit der Feinabstimmung dieses Modells in den Kommentaren!
Ich hoffe, Ihnen hat dieser Beitrag gefallen. Nochmals vielen Dank fürs Lesen!
Sie können mich über LinkedIn kontaktieren unter:
https://www.linkedin.com/in/camartinezbarbosa/
Danksagungen: Ich möchte José Celis-Gil für all die fruchtbaren Diskussionen zur Datenvorverarbeitung und -modellierung danken.