Ricerca nel sito web

PaliGemma: un modello leggero e aperto di linguaggio visivo (VLM)


Introduzione

Google ha recentemente introdotto un nuovo modello di visione leggero PaliGemma. Questo modello è stato rilasciato il 14 maggio 2024 e dispone di funzionalità multimodali.

Un modello visione-linguaggio (VLM) è un tipo avanzato di intelligenza artificiale che integra dati visivi e testuali per eseguire attività che richiedono la comprensione e la generazione sia di immagini che di linguaggio. Questi modelli combinano tecniche di visione artificiale e di elaborazione del linguaggio naturale, consentendo loro di analizzare immagini, generare didascalie descrittive, rispondere a domande sul contenuto visivo e persino impegnarsi in ragionamenti visivi complessi.

I VLM possono comprendere il contesto, dedurre relazioni e produrre output multimodali coerenti sfruttando set di dati su larga scala e sofisticate architetture neurali. Ciò li rende strumenti potenti per applicazioni in campi come il riconoscimento delle immagini, la creazione automatizzata di contenuti e i sistemi di intelligenza artificiale interattiva.

Gemma è una famiglia di modelli aperti leggeri e all'avanguardia, sviluppati utilizzando la stessa ricerca e tecnologia dei modelli Gemini. PaliGemma è un potente modello di linguaggio di visione aperto (VLM) che è stato recentemente aggiunto alla famiglia Gemma.

Prerequisiti per PaliGemma

  • Conoscenze di base sul ML: comprensione dei concetti di machine learning e dei modelli di linguaggio visivo (VLM).
  • Capacità di programmazione: competenza in Python.
  • Dipendenze: installa le librerie PyTorch e Hugging Face Transformers.
  • Hardware: sistema abilitato per GPU per training e inferenza più rapidi.
  • Set di dati: accesso a un set di dati sul linguaggio visivo adatto per test o perfezionamenti.

Cos'è PaliGemma?

PaliGemma è un nuovo e potente modello di linguaggio di visione aperto ispirato a PaLI-3, costruito utilizzando il modello di visione SigLIP e il modello di linguaggio Gemma. È progettato per prestazioni di alto livello in attività quali sottotitoli di immagini e brevi video, risposta visiva a domande, riconoscimento del testo nelle immagini, rilevamento di oggetti e segmentazione.

Sia i checkpoint preaddestrati che quelli ottimizzati sono open source in varie risoluzioni, oltre a quelli specifici per attività per un utilizzo immediato.

PaliGemma combina SigLIP-So400m come codificatore di immagini e Gemma-2B come decodificatore di testo. SigLIP è un modello SOTA in grado di comprendere immagini e testo, simile a CLIP, caratterizzato da un codificatore di immagini e testo addestrato congiuntamente. Il modello combinato PaliGemma, ispirato a PaLI-3, è pre-addestrato sui dati immagine-testo e può essere facilmente ottimizzato per attività come didascalie e segmentazione dei riferimenti. Gemma, un modello solo decoder, gestisce la generazione del testo. Integrando la codifica delle immagini di SigLIP con Gemma tramite un adattatore lineare, PaliGemma diventa un potente modello di linguaggio visivo.

Fonte

Panoramica delle versioni di modello PaliGemma

Punti di controllo misti:

  • Modelli preaddestrati ottimizzati per una serie di attività.
  • Adatto per l'inferenza di uso generale con istruzioni di testo libero.
  • Destinato solo a scopi di ricerca.

Punti di controllo FT:

  • Modelli ottimizzati specializzati su diversi benchmark accademici.
  • Disponibile in varie risoluzioni.
  • Destinato solo a scopi di ricerca.

Risoluzioni del modello:

  • 224x224
  • 448x448
  • 896x896

Precisioni del modello:

  • bfloat16
  • float16
  • float32

Struttura dell'archivio:

  • Ogni repository contiene checkpoint per una determinata risoluzione e attività.
  • Sono disponibili tre revisioni per ciascuna precisione.
  • Il ramo principale contiene checkpoint float32.
  • Le revisioni bfloat16 e float16 contengono precisezze corrispondenti.

Compatibilità:

  • Sono disponibili repository separati per i modelli compatibili con 🤗 trasformatori e l'implementazione JAX originale.

Considerazioni sulla memoria:

  • I modelli ad alta risoluzione (448x448, 896x896) richiedono molta più memoria.
  • I modelli ad alta risoluzione sono utili per attività a grana fine come l'OCR.
  • Il miglioramento della qualità è marginale per la maggior parte delle attività.
  • Le versioni 224x224 sono adatte alla maggior parte degli scopi.

Prova PaliGemma

Esploreremo come utilizzare 🤗 trasformatori per l'inferenza PaliGemma.

Per prima cosa installiamo le librerie necessarie con il flag di aggiornamento per assicurarci di utilizzare le ultime versioni di 🤗 trasformatori e altre dipendenze.

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

Per utilizzare PaliGemma è necessario accettare la licenza Gemma. Visita il repository per richiedere l'accesso. Se hai già accettato la licenza Gemma, sei a posto. Una volta ottenuto l'accesso, accedi a Hugging Face Hub utilizzando notebook_login() e inserisci il tuo token di accesso eseguendo la cella sottostante.

Immagine in ingresso

Fonte

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

Successivamente, importeremo le librerie necessarie e importeremo AutoTokenizer, PaliGemmaForConditionalGeneration e PaliGemmaProcessor dalla libreria transformers.

Una volta completata l'importazione, caricheremo il modello PaliGemma pre-addestrato e il modello verrà caricato con il tipo di dati torch.bfloat16, che può fornire un buon equilibrio tra prestazioni e precisione sull'hardware moderno.

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)

Una volta eseguito il codice, il processore preelaborerà sia l'immagine che il testo.

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)

Successivamente, utilizza il modello per generare il testo in base alla domanda di input,

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

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

Produzione:-

quanti cani ci sono nell'immagine? 1

Carica il modello a 4 bit

Possiamo anche caricare il modello a 4 e 8 bit, per ridurre le risorse computazionali e di memoria necessarie per l'addestramento e l'inferenza. Innanzitutto, inizializza 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
)

Successivamente, ricarica il modello e passa l'oggetto sopra come 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)

Genera l'output,

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

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

Produzione:-

quanti cani ci sono nell'immagine? 1

Utilizzo di PaliGemma per l'inferenza: passaggi chiave

Tokenizzazione del testo di input:

  • Il testo viene tokenizzato come al solito.
  • All'inizio viene aggiunto un token <bos>.
  • Viene aggiunto un token di nuova riga (\n), il che è importante poiché faceva parte del prompt di input dell'addestramento del modello.

Aggiunta di token immagine:

  • Il testo tokenizzato è preceduto da un numero specifico di token <image>.
  • Il numero di token <image> dipende dalla risoluzione dell'immagine in input e dalla dimensione della patch del modello SigLIP.

Per i modelli PaliGemma:

  • Risoluzione 224x224:256 token <image> (224/14 * 224/14).
  • Risoluzione 448x448: 1024 token <image>.
  • Risoluzione 896x896:4096 token <image>.

Considerazioni sulla memoria:

  • Immagini più grandi producono sequenze di input più lunghe, che richiedono più memoria.
  • Immagini più grandi possono migliorare i risultati per attività come l'OCR, ma il miglioramento della qualità è generalmente ridotto per la maggior parte delle attività.
  • Metti alla prova le tue attività specifiche prima di optare per risoluzioni più elevate.

Generazione di incorporamenti di token:

  • Il prompt di input completo passa attraverso il livello di incorporamento del testo del modello linguistico, producendo incorporamenti di token a 2048 dimensioni.

Elaborazione dell'immagine:

  • L'immagine in input viene ridimensionata alla dimensione richiesta (ad esempio, 224x224 per i modelli con risoluzione più piccola) utilizzando il ricampionamento bicubico.
  • Viene quindi passato attraverso il codificatore di immagini SigLIP per creare incorporamenti di immagini a 1152 dimensioni per patch.
  • Questi incorporamenti di immagini vengono proiettati su 2048 dimensioni per corrispondere agli incorporamenti di token di testo.

Combinazione di incorporamenti di immagini e testo:

  • Gli incorporamenti di immagini finali vengono uniti con gli incorporamenti di testo <image>.
  • Questo input combinato viene utilizzato per la generazione di testo autoregressivo.

Generazione di testo autoregressivo:

  • Utilizza l'attenzione del blocco completo per l'input completo (immagine + <bos> + prompt + \n).
  • Impiega una maschera di attenzione causale per il testo generato.

Inferenza semplificata:

  • Le classi processore e modello gestiscono automaticamente tutti questi dettagli.
  • L'inferenza può essere eseguita utilizzando l'API dei trasformatori di alto livello, come dimostrato negli esempi precedenti.

Applicazioni

I modelli di linguaggio visivo come PaliGemma hanno una vasta gamma di applicazioni in vari settori. Alcuni esempi sono elencati di seguito:

  1. Didascalie delle immagini: generazione automatica di didascalie descrittive per le immagini, che possono migliorare l'accessibilità per le persone ipovedenti e migliorare l'esperienza dell'utente.
  2. Visual Question Answering (VQA): risposta a domande sulle immagini, che può consentire motori di ricerca più interattivi, assistenti virtuali e strumenti educativi.
  3. Recupero immagine-testo: recupero di immagini rilevanti sulla base di query testuali e viceversa, facilitando la scoperta di contenuti e la ricerca nei database multimediali.
  4. Chatbot interattivi: impegnarsi in conversazioni con gli utenti comprendendo sia gli input testuali che il contesto visivo, portando a risposte più personalizzate e contestualmente rilevanti.
  5. Creazione di contenuti: generazione automatica di descrizioni testuali, riassunti o storie basate su input visivi, aiutando nella creazione automatizzata di contenuti per il marketing, lo storytelling e i settori creativi.
  6. Agenti artificiali: utilizzo di queste tecnologie per potenziare robot o agenti virtuali con la capacità di percepire e comprendere l'ambiente circostante, consentendo applicazioni nella robotica, nei veicoli autonomi e nei sistemi di casa intelligente.
  7. Imaging medico: analisi di immagini mediche (ad es. raggi X, risonanza magnetica) insieme a note o rapporti clinici, assistenza ai radiologi nella diagnosi e nella pianificazione del trattamento.
  8. Moda e vendita al dettaglio: fornire consigli personalizzati sui prodotti basati su preferenze visive e descrizioni testuali, migliorando l'esperienza di acquisto e aumentando i tassi di conversione delle vendite.
  9. Riconoscimento ottico dei caratteri: il riconoscimento ottico dei caratteri (OCR) prevede l'estrazione del testo visibile da un'immagine e la sua conversione in un formato di testo leggibile dalla macchina. Anche se sembra semplice, l’implementazione dell’OCR nelle applicazioni di produzione può comportare sfide significative.
  10. Strumenti didattici: creazione di materiali didattici interattivi che combinano contenuti visivi con spiegazioni testuali, quiz ed esercizi per migliorare la comprensione e la memorizzazione.

Questi sono solo alcuni esempi e le potenziali applicazioni dei modelli del linguaggio visivo continuano ad espandersi man mano che ricercatori e sviluppatori esplorano nuovi casi d’uso e integrano queste tecnologie in vari domini.

Conclusione

In conclusione, possiamo dire che PaliGemma rappresenta un progresso significativo nel campo dei modelli visione-linguaggio, offrendo un potente strumento per comprendere e generare contenuti basati sulle immagini. Con la sua capacità di integrare perfettamente informazioni visive e testuali, PaliGemma apre nuove strade per la ricerca e l'applicazione in un'ampia gamma di settori. Dalla didascalia delle immagini al riconoscimento ottico dei caratteri e oltre, le capacità di PaliGemma sono promettenti per guidare l’innovazione e affrontare problemi complessi nell’era digitale.

Ci auguriamo che la lettura dell'articolo ti sia piaciuta!

Risorse

  • Presentazione di PaliGemma, Gemma 2 e un toolkit aggiornato per l'intelligenza artificiale responsabile
  • PaliGemma: il modello linguistico Open Vision all'avanguardia di Google
  • LEGGIMI su Github di PaliGemma
  • Documentazione PaliGemma
  • Documentazione di messa a punto di PaliGemma
  • Perfeziona PaliGemma in Google Colab
  • Blog del volto che abbraccia

Articoli correlati: