Website-Suche

PaliGemma: Ein leichtes offenes Vision-Sprachmodell (VLM)


Einführung

Google hat kürzlich ein neues leichtes Vision-Modell PaliGemma vorgestellt. Dieses Modell wurde am 14. Mai 2024 veröffentlicht und verfügt über multimodale Funktionen.

Ein Vision-Language-Modell (VLM) ist eine fortschrittliche Art künstlicher Intelligenz, die visuelle und textliche Daten integriert, um Aufgaben auszuführen, die das Verständnis und die Erzeugung von Bildern und Sprache erfordern. Diese Modelle kombinieren Techniken aus Computer Vision und natürlicher Sprachverarbeitung und ermöglichen es ihnen, Bilder zu analysieren, beschreibende Bildunterschriften zu erstellen, Fragen zu visuellen Inhalten zu beantworten und sogar komplexe visuelle Überlegungen anzustellen.

VLMs können Kontexte verstehen, Beziehungen ableiten und kohärente multimodale Ergebnisse erzeugen, indem sie umfangreiche Datensätze und ausgefeilte neuronale Architekturen nutzen. Dies macht sie zu leistungsstarken Werkzeugen für Anwendungen in Bereichen wie Bilderkennung, automatisierte Inhaltserstellung und interaktive KI-Systeme.

Gemma ist eine Familie leichter, hochmoderner offener Modelle, die mit der gleichen Forschung und Technologie wie die Gemini-Modelle entwickelt wurden. PaliGemma ist ein leistungsstarkes Open-Vision-Sprachmodell (VLM), das kürzlich zur Gemma-Familie hinzugefügt wurde.

Voraussetzungen für PaliGemma

  • Grundlegendes ML-Wissen: Verständnis von Konzepten des maschinellen Lernens und Vision-Language-Modellen (VLMs).
  • Programmierkenntnisse: Kenntnisse in Python.
  • Abhängigkeiten: Installieren Sie die Bibliotheken PyTorch und Hugging Face Transformers.
  • Hardware: GPU-fähiges System für schnelleres Training und Inferenz.
  • Datensatz: Zugriff auf einen geeigneten Vision-Language-Datensatz zum Testen oder zur Feinabstimmung.

Was ist PaliGemma?

PaliGemma ist ein leistungsstarkes neues offenes Vision-Sprachmodell, das von PaLI-3 inspiriert ist und auf der Grundlage des SigLIP-Vision-Modells und des Gemma-Sprachmodells erstellt wurde. Es ist für erstklassige Leistung bei Aufgaben wie Bild- und kurzen Videountertiteln, visueller Beantwortung von Fragen, Texterkennung in Bildern, Objekterkennung und Segmentierung konzipiert.

Sowohl die vorab trainierten als auch die fein abgestimmten Prüfpunkte sind Open-Source-Lösungen in verschiedenen Auflösungen sowie aufgabenspezifischen Lösungen für den sofortigen Einsatz.

PaliGemma kombiniert SigLIP-So400m als Bild-Encoder und Gemma-2B als Text-Decoder. SigLIP ist ein SOTA-Modell, das Bilder und Text verstehen kann, ähnlich wie CLIP, und über einen gemeinsam trainierten Bild- und Text-Encoder verfügt. Das kombinierte PaliGemma-Modell, inspiriert von PaLI-3, ist auf Bild-Text-Daten vorab trainiert und kann leicht für Aufgaben wie Untertitelung und verweisende Segmentierung optimiert werden. Gemma, ein reines Decoder-Modell, übernimmt die Textgenerierung. Durch die Integration der Bildkodierung von SigLIP mit Gemma über einen linearen Adapter wird PaliGemma zu einem leistungsstarken Vision-Sprachmodell.

Quelle

Übersicht über die PaliGemma-Modellveröffentlichungen

Mix-Checkpoints:

  • Vorab trainierte Modelle, die auf eine Mischung von Aufgaben abgestimmt sind.
  • Geeignet für allgemeine Inferenzen mit Freitext-Eingabeaufforderungen.
  • Nur für Forschungszwecke gedacht.

FT-Kontrollpunkte:

  • Fein abgestimmte Modelle, die auf verschiedene akademische Benchmarks spezialisiert sind.
  • Erhältlich in verschiedenen Auflösungen.
  • Nur für Forschungszwecke gedacht.

Modellauflösungen:

  • 224x224
  • 448x448
  • 896x896

Modellgenauigkeiten:

  • bfloat16
  • float16
  • float32

Repository-Struktur:

  • Jedes Repository enthält Prüfpunkte für eine bestimmte Lösung und Aufgabe.
  • Für jede Präzision stehen drei Revisionen zur Verfügung.
  • Der Hauptzweig enthält Float32-Prüfpunkte.
  • Die Revisionen bfloat16 und float16 enthalten entsprechende Genauigkeiten.

Kompatibilität:

  • Für Modelle, die mit 🤗 Transformern und der ursprünglichen JAX-Implementierung kompatibel sind, stehen separate Repositorys zur Verfügung.

Überlegungen zum Speicher:

  • Hochauflösende Modelle (448x448, 896x896) benötigen deutlich mehr Speicher.
  • Hochauflösende Modelle sind für feinkörnige Aufgaben wie OCR von Vorteil.
  • Bei den meisten Aufgaben ist die Qualitätsverbesserung marginal.
  • 224x224-Versionen sind für die meisten Zwecke geeignet.

Probieren Sie PaliGemma aus

Wir werden untersuchen, wie 🤗-Transformatoren für die PaliGemma-Inferenz verwendet werden.

Lassen Sie uns zunächst die erforderlichen Bibliotheken mit dem Update-Flag installieren, um sicherzustellen, dass wir die neuesten Versionen von 🤗 Transformern und anderen Abhängigkeiten verwenden.

!pip install -q -U accelerate bitsandbytes git+https://github.com/huggingface/transformers.git

Um PaliGemma nutzen zu können, müssen Sie die Gemma-Lizenz akzeptieren. Besuchen Sie das Repository, um Zugriff anzufordern. Wenn Sie die Gemma-Lizenz bereits akzeptiert haben, können Sie loslegen. Sobald Sie Zugriff haben, melden Sie sich mit notebook_login() beim Hugging Face Hub an und geben Sie Ihr Zugriffstoken ein, indem Sie die Zelle unten ausführen.

Eingabebild

Quelle

input_text = "how many dogs are there in the image?"

Als Nächstes importieren wir die erforderlichen Bibliotheken und import AutoTokenizer, PaliGemmaForConditionalGeneration und PaliGemmaProcessor aus der transformers-Bibliothek.

Sobald der Import abgeschlossen ist, laden wir das vorab trainierte PaliGemma-Modell und das Modell wird mit dem Datentyp torch.bfloat16 geladen, der auf moderner Hardware ein gutes Gleichgewicht zwischen Leistung und Präzision bieten kann.

from transformers import AutoTokenizer, PaliGemmaForConditionalGeneration, PaliGemmaProcessor
import torch

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model_id = "google/paligemma-3b-mix-224"
model = PaliGemmaForConditionalGeneration.from_pretrained(model_id, torch_dtype=torch.bfloat16)
processor = PaliGemmaProcessor.from_pretrained(model_id)

Sobald der Code ausgeführt ist, verarbeitet der Prozessor sowohl das Bild als auch den Text vor.

inputs = processor(text=input_text, images=input_image,
                  padding="longest", do_convert_rgb=True, return_tensors="pt").to("cuda")
model.to(device)
inputs = inputs.to(dtype=model.dtype)

Als nächstes verwenden Sie das Modell, um den Text basierend auf der Eingabefrage zu generieren.

with torch.no_grad():
  output = model.generate(**inputs, max_length=496)

print(processor.decode(output[0], skip_special_tokens=True))

Ausgabe:-

Wie viele Hunde sind auf dem Bild zu sehen? 1

Laden Sie das Modell in 4-Bit

Wir können Modelle auch in 4-Bit und 8-Bit laden, um die für Training und Inferenz erforderlichen Rechen- und Speicherressourcen zu reduzieren. Initialisieren Sie zunächst die BitsAndBytesConfig.

from transformers import BitsAndBytesConfig
import torch
nf4_config = BitsAndBytesConfig(
   load_in_4bit=True,
   bnb_4bit_quant_type="nf4",
   bnb_4bit_use_double_quant=True,
   bnb_4bit_compute_dtype=torch.bfloat16
)

Laden Sie als Nächstes das Modell neu und übergeben Sie das obige Objekt als quantization_config,

from transformers import AutoTokenizer, PaliGemmaForConditionalGeneration, PaliGemmaProcessor
import torch

device="cuda"
model_id = "google/paligemma-3b-mix-224"
model = PaliGemmaForConditionalGeneration.from_pretrained(model_id, torch_dtype=torch.bfloat16,
                                                          quantization_config=nf4_config, device_map={"":0})
processor = PaliGemmaProcessor.from_pretrained(model_id)

Generieren Sie die Ausgabe,

with torch.no_grad():
  output = model.generate(**inputs, max_length=496)

print(processor.decode(output[0], skip_special_tokens=True))

Ausgabe:-

Wie viele Hunde sind auf dem Bild zu sehen? 1

Verwendung von PaliGemma zur Inferenz: Wichtige Schritte

Tokenisierung des Eingabetextes:

  • Text wird wie gewohnt tokenisiert.
  • Am Anfang wird ein <bos>-Token hinzugefügt.
  • Ein Newline-Token (\n) wird angehängt, was wichtig ist, da es Teil der Trainingseingabeaufforderung des Modells war.

Bildtoken hinzufügen:

  • Dem tokenisierten Text wird eine bestimmte Anzahl von <image>-Tokens vorangestellt.
  • Die Anzahl der <image>-Tokens hängt von der Auflösung des Eingabebilds und der Patchgröße des SigLIP-Modells ab.

Für PaliGemma-Modelle:

  • Auflösung 224 x 224: 256 <image> Token (224/14 * 224/14).
  • Auflösung 448 x 448: 1024 <image> Token.
  • Auflösung 896 x 896: 4096 <image>-Tokens.

Überlegungen zum Speicher:

  • Größere Bilder führen zu längeren Eingabesequenzen und erfordern mehr Speicher.
  • Größere Bilder können die Ergebnisse bei Aufgaben wie OCR verbessern, aber der Qualitätsgewinn ist bei den meisten Aufgaben normalerweise gering.
  • Testen Sie Ihre spezifischen Aufgaben, bevor Sie sich für höhere Auflösungen entscheiden.

Generieren von Token-Einbettungen:

  • Die vollständige Eingabeaufforderung durchläuft die Texteinbettungsebene des Sprachmodells und erzeugt 2048-dimensionale Token-Einbettungen.

Bearbeiten des Bildes:

  • Die Größe des Eingabebilds wird mithilfe von bikubischem Resampling auf die erforderliche Größe (z. B. 224 x 224 für Modelle mit der kleinsten Auflösung) geändert.
  • Anschließend wird es durch den SigLIP Image Encoder geleitet, um pro Patch 1152-dimensionale Bildeinbettungen zu erstellen.
  • Diese Bildeinbettungen werden auf 2048 Dimensionen projiziert, um mit den Text-Token-Einbettungen übereinzustimmen.

Kombinieren von Bild- und Texteinbettungen:

  • Die endgültigen Bildeinbettungen werden mit den Texteinbettungen <image> zusammengeführt.
  • Diese kombinierte Eingabe wird zur autoregressiven Textgenerierung verwendet.

Autoregressive Textgenerierung:

  • Verwendet die volle Blockaufmerksamkeit für die gesamte Eingabe (Bild + <bos> + Eingabeaufforderung + \n).
  • Verwendet eine kausale Aufmerksamkeitsmaske für den generierten Text.

Vereinfachte Schlussfolgerung:

  • Die Prozessor- und Modellklassen verarbeiten alle diese Details automatisch.
  • Die Inferenz kann mithilfe der High-Level-Transformers-API durchgeführt werden, wie in den vorherigen Beispielen gezeigt.

Anwendungen

Vision-Sprachmodelle wie PaliGemma haben ein breites Anwendungsspektrum in verschiedenen Branchen. Nachfolgend sind einige Beispiele aufgeführt:

  1. Bildunterschrift: Automatische Generierung beschreibender Bildunterschriften, die die Zugänglichkeit für sehbehinderte Personen verbessern und das Benutzererlebnis verbessern können.
  2. Visual Question Answering (VQA): Beantwortung von Fragen zu Bildern, was interaktivere Suchmaschinen, virtuelle Assistenten und Lehrmittel ermöglichen kann.
  3. Bild-Text-Abfrage: Abrufen relevanter Bilder basierend auf Textabfragen und umgekehrt, was die Entdeckung von Inhalten und die Suche in Multimedia-Datenbanken erleichtert.
  4. Interaktive Chatbots: Nehmen Sie an Gesprächen mit Benutzern teil, indem Sie sowohl Texteingaben als auch visuellen Kontext verstehen, was zu personalisierteren und kontextbezogeneren Antworten führt.
  5. Inhaltserstellung: Automatische Generierung von Textbeschreibungen, Zusammenfassungen oder Geschichten basierend auf visuellen Eingaben, was die automatisierte Inhaltserstellung für Marketing, Storytelling und die Kreativbranche unterstützt.
  6. Künstliche Agenten: Nutzung dieser Technologie, um Robotern oder virtuellen Agenten die Fähigkeit zu verleihen, die Umgebung wahrzunehmen und zu verstehen, was Anwendungen in der Robotik, autonomen Fahrzeugen und Smart-Home-Systemen ermöglicht.
  7. Medizinische Bildgebung: Analyse medizinischer Bilder (z. B. Röntgenaufnahmen, MRTs) zusammen mit klinischen Notizen oder Berichten, Unterstützung von Radiologen bei der Diagnose und Behandlungsplanung.
  8. Mode und Einzelhandel: Bereitstellung personalisierter Produktempfehlungen basierend auf visuellen Vorlieben und Textbeschreibungen, die das Einkaufserlebnis verbessern und die Verkaufskonversionsraten erhöhen.
  9. Optische Zeichenerkennung: Bei der optischen Zeichenerkennung (OCR) wird sichtbarer Text aus einem Bild extrahiert und in ein maschinenlesbares Textformat umgewandelt. Obwohl es einfach klingt, kann die Implementierung von OCR in Produktionsanwendungen erhebliche Herausforderungen mit sich bringen.
  10. Lehrmittel: Erstellen interaktiver Lernmaterialien, die visuelle Inhalte mit Texterklärungen, Tests und Übungen kombinieren, um das Verständnis und die Merkfähigkeit zu verbessern.

Dies sind nur einige Beispiele, und die potenziellen Anwendungen von Vision-Language-Modellen nehmen ständig zu, da Forscher und Entwickler neue Anwendungsfälle erforschen und diese Technologien in verschiedene Bereiche integrieren.

Abschluss

Zusammenfassend können wir sagen, dass PaliGemma einen bedeutenden Fortschritt im Bereich der Vision-Sprach-Modelle darstellt und ein leistungsstarkes Werkzeug zum Verstehen und Generieren von Inhalten auf der Grundlage von Bildern bietet. Mit seiner Fähigkeit, visuelle und textliche Informationen nahtlos zu integrieren, eröffnet PaliGemma neue Wege für Forschung und Anwendung in einer Vielzahl von Branchen. Von der Bildunterschrift bis zur optischen Zeichenerkennung und darüber hinaus sind die Fähigkeiten von PaliGemma vielversprechend, um Innovationen voranzutreiben und komplexe Probleme im digitalen Zeitalter anzugehen.

Wir wünschen Ihnen viel Spaß beim Lesen des Artikels!

Ressourcen

  • Wir stellen PaliGemma, Gemma 2 und ein verbessertes Toolkit für verantwortungsvolle KI vor
  • PaliGemma – Googles hochmodernes Open-Vision-Sprachmodell
  • PaliGemma Github README
  • PaliGemma-Dokumentation
  • PaliGemma-Feinabstimmungsdokumentation
  • Optimieren Sie PaliGemma in Google Colab
  • Hugging Face-Blog

Verwandte Artikel: