Modelli di visione fondamentale e ingegneria di prompt visivi per applicazioni di guida autonoma

Modelli di visione fondamentale e ingegneria di feedback visivi per l'autonomia nelle applicazioni di guida

La progettazione di prompt è diventata una competenza indispensabile per chiunque lavori con modelli di linguaggio di grandi dimensioni (LLM) per generare testi di alta qualità e rilevanti. Sebbene la progettazione di prompt di testo sia stata ampiamente discussa, la progettazione di prompt visivi è un campo emergente che richiede attenzione. I prompt visivi possono includere bounding box o maschere che guidano i modelli di visione nella generazione di output pertinenti e precisi. In questo articolo, esploreremo le basi della progettazione di prompt visivi, i suoi vantaggi e come può essere utilizzata per risolvere un caso d’uso specifico: la segmentazione delle immagini per la guida autonoma.

Negli ultimi anni, il campo della visione artificiale ha subito notevoli avanzamenti nell’area della segmentazione delle immagini. Una di queste innovazioni è il Segment Anything Model (SAM) di Meta AI, che ha il potenziale per rivoluzionare la segmentazione a livello di oggetti con addestramento a zero o poche ripetizioni. In questo articolo, utilizziamo il modello SAM come esempio di modello di visione fondamentale e ne esploriamo l’applicazione al dataset BDD100K, un dataset autonomo ed eterogeneo per l’apprendimento multitask. Unendo le capacità di SAM con i dati forniti da BDD100K, mostreremo il potenziale della progettazione di prompt visivi con diverse versioni di SAM. Ispirandoci al framework LangChain per i modelli di linguaggio, proponiamo una catena visiva per eseguire il prompting visivo mediante la combinazione di modelli di rilevamento degli oggetti con SAM.

Sebbene questo articolo si concentri sulla guida autonoma, i concetti discussioni sono applicabili in modo ampio a settori che hanno applicazioni di visione artificiale come l’assistenza sanitaria, le scienze della vita, i media e l’intrattenimento. Iniziamo imparando qualcosa di più sul funzionamento di un modello di visione fondamentale come SAM. Abbiamo utilizzato Amazon SageMaker Studio su un’istanza ml.g5.16xlarge per questo articolo.

Segment Anything Model (SAM)

I modelli fondamentali sono grandi modelli di machine learning (ML) addestrati su vasta quantità di dati e possono essere sollecitati o ottimizzati per casi d’uso specifici. Qui esploreremo il Segment Anything Model (SAM), che è un modello fondamentale per la visione, in particolare la segmentazione delle immagini. È preaddestrato su un massiccio dataset di 11 milioni di immagini e 1,1 miliardi di maschere, rendendolo il più grande dataset di segmentazione fino ad oggi. Questo esteso dataset copre una vasta gamma di oggetti e categorie, fornendo a SAM una fonte di dati di addestramento diversificata e su larga scala.

Il modello SAM è addestrato per comprendere gli oggetti e può generare maschere di segmentazione per qualsiasi oggetto nelle immagini o nei frame video. Il modello consente la progettazione di prompt visivi, consentendoti di fornire input come testo, punti, bounding box o maschere per generare etichette senza alterare l’immagine originale. SAM è disponibile in tre dimensioni: base (ViT-B, 91 milioni di parametri), grande (ViT-L, 308 milioni di parametri) e enorme (ViT-H, 636 milioni di parametri), per adattarsi a diversi requisiti di calcolo e casi d’uso.

La motivazione principale dietro SAM è migliorare la segmentazione a livello di oggetti con un numero minimo di campioni di addestramento e epoch per qualsiasi oggetto di interesse. La potenza di SAM risiede nella sua capacità di adattarsi a nuove distribuzioni di immagini e compiti senza conoscenze precedenti, una caratteristica nota come trasferimento a zero ripetizioni. Questa adattabilità è ottenuta grazie al suo addestramento sul vasto dataset SA-1B, che ha dimostrato un’impressionante prestazione a zero ripetizioni, superando molti risultati precedenti completamente supervisionati.

Come mostrato nell’architettura seguente per SAM, il processo di generazione di maschere di segmentazione prevede tre fasi:

  1. Un encoder d’immagine produce un’incorporamento univoco per l’immagine.
  2. Un encoder di prompt converte qualsiasi prompt in un vettore di incorporamento per il prompt.
  3. Un decoder leggero combina le informazioni dall’encoder d’immagine e dall’encoder di prompt per prevedere le maschere di segmentazione.

Come esempio, possiamo fornire un’input con un’immagine e una bounding box attorno a un oggetto di interesse in quell’immagine (ad es. una macchina argento o una corsia di guida) e il modello SAM produrrà maschere di segmentazione per quell’oggetto.

Ingegneria di prompt visuale

L’ingegneria di prompt si riferisce alla strutturazione degli input di un modello in modo che il modello comprenda l’intento e produca l’output desiderato. Con l’ingegneria del prompt testuale, puoi strutturare il testo di input attraverso modifiche come la scelta delle parole, la formattazione, l’ordinamento e altro ancora per ottenere l’output desiderato. L’ingegneria del prompt visuale presuppone che l’utente stia lavorando in una modalità visuale (immagine o video) e fornisce input. Di seguito è riportato un elenco non esaustivo di potenziali modi per fornire input al modello AI generativo nel dominio visuale:

  • Punto – Un punto singolo (x, y) coordinata nel piano immagine
  • Punti – Punti (x, y) multipli, non necessariamente correlati tra loro
  • Bounding box – Un insieme di quattro valori (x, y, w, h) che definiscono una regione rettangolare nel piano immagine
  • Contorno – Un insieme di punti (x, y) coordinate nel piano immagine che formano una forma chiusa
  • Mask – Un array delle stesse dimensioni dell’immagine con una maschera parziale dell’oggetto di interesse

Con le tecniche di ingegneria del prompt visuale in mente, esploriamo come queste possono essere applicate al modello pre-addestrato SAM. Abbiamo utilizzato la versione di base del modello pre-addestrato.

Prompting Zero-shot con il modello SAM pre-addestrato

Per iniziare, esploriamo l’approccio zero-shot. Di seguito è riportata un’immagine di esempio dal set di dati di addestramento scattata dalla telecamera anteriore di un veicolo.

Possiamo ottenere maschere di segmentazione per tutti gli oggetti dall’immagine senza alcun prompt visuale esplicito generando automaticamente maschere con solo un’immagine di input. Nell’immagine seguente, vediamo parti dell’auto, della strada, del segnale stradale, delle targhe, del cavalcavia, dei pilastri, dei cartelli e altro ancora che sono segmentati.

Tuttavia, questo output non è immediatamente utile per i seguenti motivi:

  • Le auto non sono segmentate nel complesso, ma in parti. Per la maggior parte dei modelli di percezione, ad esempio, non ci interessa davvero che ciascuno dei pneumatici abbia maschere di output separate. Questo vale anche quando si cercano altri oggetti noti di interesse, come strade, vegetazione, segnali e così via.
  • Le parti dell’immagine utili per attività successive come l’area percorribile sono divise, senza spiegazioni. D’altra parte, le istanze simili vengono identificate separatamente e potremmo essere interessati a raggruppare oggetti simili (segmentazione panottica vs segmentazione di istanze).

Ingegneria del prompt visuale con il modello SAM pre-addestrato

Felizmente, SAM supporta la fornitura di prompt di input e possiamo utilizzare punti, array di punti e bounding box come input. Con queste istruzioni specifiche, ci aspettiamo che SAM migliori le segmentazioni concentrandosi su punti o aree specifiche. Questo può essere confrontato con il template di prompt linguistico "Qual è un buon nome per un'azienda che produce {prodotto}?" dove l’input insieme a questo prompt template dall’utente è il {prodott}. {prodott} è uno slot di input. Nel prompt visuale, i bounding box, i punti o le maschere sono gli slot di input.

L’immagine seguente fornisce il bounding box originale delle verità fondamentali attorno ai veicoli e la patch dell’area percorribile dai dati di verità fondamentali di BDD100K. L’immagine mostra anche un punto di input (una X gialla) al centro del bounding box verde a cui ci riferiremo nelle prossime sezioni.

Proviamo a generare una maschera per la macchina a sinistra con la bounding box verde come input per SAM. Come mostrato nell’esempio seguente, il modello base di SAM non trova realmente nulla. Questo si evidenzia anche nel punteggio di segmentazione basso. Quando osserviamo più da vicino le maschere di segmentazione, vediamo che ci sono piccole regioni restituite come maschere (indicate con frecce rosse) che non sono utilizzabili per alcuna applicazione successiva.

Proviamo una combinazione di una bounding box e un punto come input visivo. La croce gialla nell’immagine precedente rappresenta il centro della bounding box. Fornire le coordinate (x, y) di questo punto come indicazione insieme al vincolo della bounding box ci restituisce la seguente maschera e un punteggio leggermente più alto. Tuttavia, questo non è ancora utilizzabile in alcun modo.

Infine, con il modello pre-addestrato di base, possiamo fornire solo il punto di input come indicazione (senza la bounding box). Le immagini seguenti mostrano due delle prime tre maschere che abbiamo trovato interessanti.

La Maschera 1 segmenta l’intera macchina, mentre la Maschera 3 segmenta un’area che contiene la targa dell’auto vicino alla croce gialla (input dell’indicazione). Tuttavia, la Maschera 1 non è ancora una maschera stretta e pulita attorno all’auto; ciò indica la qualità del modello, che possiamo presumere migliora con la dimensione del modello.

Possiamo provare modelli pre-addestrati più grandi con la stessa indicazione di input. Le immagini seguenti mostrano i nostri risultati. Utilizzando il enorme modello pre-addestrato di SAM, la Maschera 3 rappresenta l’intera macchina, mentre la Maschera 1 e la Maschera 2 possono essere utilizzate per estrarre la targa.

La versione grande del modello SAM fornisce anche risultati simili.

Il processo che abbiamo seguito qui è simile all’ingegnerizzazione manuale delle indicazioni per prompt di testo che potresti già conoscere. Si noti che un recente miglioramento nel modello SAM per segmentare qualsiasi cosa in alta qualità fornisce risultati molto migliori specifici per oggetti e contesti. Nel nostro caso, scopriamo che l’uso di indicazioni senza supervisione con prompt di testo e visivi (punto, bounding box, punto e bounding box in input) non migliora drasticamente i risultati come abbiamo visto in precedenza.

Modelli di prompt e catene visive

Come possiamo vedere dagli esempi precedenti di indicazioni senza supervisione, SAM fatica a identificare tutti gli oggetti nella scena. Questo è un buon esempio di dove possiamo sfruttare i modelli di prompt e le catene visive. La catena visiva si ispira al concetto di catena nel popolare framework LangChain per le applicazioni del linguaggio. Aiuta a collegare le fonti di dati e un LLM per produrre l’output. Ad esempio, possiamo utilizzare una catena di API per chiamare un’API e invocare un LLM per rispondere alla domanda in base alla risposta dell’API.

Ispirandoci a LangChain, proponiamo una catena visiva sequenziale che si presenta come nell’immagine seguente. Utilizziamo uno strumento (come un modello di rilevamento oggetti pre-addestrato) per ottenere bounding box iniziali, calcolare il punto al centro della bounding box e utilizzarlo per indirizzare il modello SAM con l’immagine di input.

Ad esempio, l’immagine seguente mostra le maschere di segmentazione come risultato dell’esecuzione di questa catena.

Un altro esempio di catena può coinvolgere un input di testo dell’oggetto di interesse che l’utente desidera identificare. Per implementare ciò, abbiamo costruito una pipeline utilizzando Grounding DINO, un modello di rilevamento degli oggetti per sollecitare SAM per la segmentazione.

Grounding DINO è un modello di rilevamento degli oggetti a zero-shot che può eseguire il rilevamento degli oggetti utilizzando il testo fornendo nomi di categorie (come “semafori” o “camion”) ed espressioni (come “camion giallo”). Accetta coppie di testo e immagine per eseguire il rilevamento degli oggetti. Si basa su un’architettura transformer e consente modalità crociate con dati di testo e immagine. Per saperne di più su Grounding DINO, consulta Grounding DINO: unendo DINO a Grounded Pre-Training per il rilevamento di oggetti in modalità “Open Set”. Questo genera bounding box e etichette e può essere elaborato ulteriormente per generare punti centrali, filtrare in base alle etichette, alle soglie e altro ancora. Questo viene utilizzato (box o punti) come sollecitazione a SAM per la segmentazione, che restituisce maschere.

Ecco alcuni esempi che mostrano il testo di input, l’output di DINO (bounding box) e l’output finale di SAM (maschere di segmentazione).

Le seguenti immagini mostrano l’output per “camion giallo”.

Le seguenti immagini mostrano l’output per “auto argento”.

L’immagine seguente mostra l’output per “corsia di guida”.

Possiamo utilizzare questa pipeline per creare una catena visiva. Lo snippet di codice seguente spiega questo concetto:

pipeline = [object_predictor, segment_predictor]image_chain = ImageChain.from_visual_pipeline(pipeline, image_store, verbose=True)image_chain.run('Tutte le auto argento', image_id='5X3349')

Sebbene questo sia un semplice esempio, questo concetto può essere esteso per elaborare i feed delle telecamere sui veicoli per eseguire il tracciamento degli oggetti, la ridazione dei dati personali identificabili (PII) e altro ancora. Possiamo anche ottenere le bounding box da modelli più piccoli o, in alcuni casi, utilizzando strumenti standard di visione artificiale. È abbastanza semplice utilizzare un modello preaddestrato o un servizio come Amazon Rekognition per ottenere etichette (visuali) iniziali per la tua sollecitazione. Al momento di scrivere questo articolo, ci sono oltre 70 modelli disponibili su Amazon SageMaker Jumpstart per il rilevamento di oggetti, e Amazon Rekognition identifica già diverse categorie utili di oggetti nelle immagini, tra cui auto, pedoni e altri veicoli.

Successivamente, analizziamo alcuni risultati quantitativi relativi alle prestazioni dei modelli SAM con un subset di dati BDD100K.

Risultati quantitativi

Il nostro obiettivo è confrontare le prestazioni di tre modelli preaddestrati quando viene fornita la stessa sollecitazione visiva. In questo caso, utilizziamo il punto centrale della posizione dell’oggetto come input visivo. Confrontiamo le prestazioni in base alle dimensioni dell’oggetto (proporzionalmente alla dimensione dell’immagine) – piccolo (area <0,11%), VoAGI (0,11% < area < 1%) e grande (area > 1%). Le soglie dell’area della bounding box sono definite dalle metriche di valutazione di Common Objects in Context (COCO) [Lin et al., 2014].

La valutazione è a livello di pixel e utilizziamo le seguenti metriche di valutazione:

  • Precisione = (numero di istanze rilevanti e recuperate) / (numero totale di istanze recuperate)
  • Recall = (numero di istanze rilevanti e recuperate) / (numero totale di istanze rilevanti)
  • Le istanze qui sono rappresentate da ciascun pixel all’interno del bounding box dell’oggetto di interesse

La seguente tabella riporta le prestazioni di tre diverse versioni del modello SAM (base, grande e enorme). Queste versioni hanno tre diversi encoder: ViT-B (base), ViT-L (grande), ViT-H (enorme). Gli encoder hanno diversi conteggi di parametri, dove il modello base ha meno parametri di quello grande e quello grande ha meno parametri di quello enorme. Anche se aumentare il numero di parametri mostra prestazioni migliorate con oggetti più grandi, questo non è vero per gli oggetti più piccoli.

Miglioramento del fine-tuning di SAM per il tuo caso d’uso

In molti casi, utilizzare direttamente un modello SAM pre-addestrato potrebbe non essere molto utile. Ad esempio, guardiamo una tipica scena nel traffico: l’immagine seguente è l’output del modello SAM con punti di prompt campionati casualmente come input a sinistra e le etichette effettive dell’attività di segmentazione semantica da BDD100K a destra. Queste sono ovviamente molto diverse.

Le pile di percezione nelle AV possono facilmente utilizzare la seconda immagine, ma non la prima. D’altro canto, ci sono alcuni output utili dalla prima immagine che possono essere utilizzati e che il modello non è stato addestrato esplicitamente, ad esempio marcature di corsia, segmentazione del marciapiede, maschere della targa e così via. Possiamo migliorare il modello SAM mediante fine-tuning per migliorare i risultati della segmentazione. Per eseguire questo fine-tuning, abbiamo creato un set di dati di addestramento utilizzando un subset di segmentazione delle istanze (500 immagini) dal dataset di BDD10K. Questo è un sottoinsieme molto piccolo di immagini, ma il nostro scopo è dimostrare che i modelli di visione fondamentali (come LLMs) possono funzionare bene per il tuo caso d’uso con un numero sorprendentemente piccolo di immagini. L’immagine seguente mostra l’immagine di input, la maschera di output (in blu, con un bordo rosso per l’auto a sinistra) e i possibili prompt (bounding box in verde e punto centrale X in giallo).

Abbiamo eseguito il fine-tuning utilizzando la libreria Hugging Face su Amazon SageMaker Studio. Abbiamo utilizzato l’istanza ml.g4dn.xlarge per i test del modello SAM base e l’istanza ml.g4dn.2xlarge per i test del modello SAM enorme. Nei nostri esperimenti iniziali, abbiamo osservato che il fine-tuning del modello base con solo bounding box non è stato efficace. I modelli pre-addestrati e fine-tuned non sono stati in grado di apprendere le maschere ground truth specifiche dell’auto dai dataset originali. Aggiungere punti di query al fine-tuning non ha migliorato l’addestramento.

Successivamente, possiamo provare a eseguire il fine-tuning del modello SAM enorme per 30 epoche, con un dataset molto piccolo (500 immagini). La maschera ground truth originale ha l’aspetto dell’immagine seguente per il tipo di etichetta auto.

Come mostrato nelle immagini seguenti, la versione pre-addestrata originale del modello enorme con un prompt specifico del bounding box (in verde) non fornisce alcun output, mentre la versione fine-tuned fornisce un output (ancora non preciso, ma il fine-tuning è stato interrotto dopo 40 epoche e con un dataset di addestramento molto piccolo di 500 immagini). Il modello enorme pre-addestrato originale non è stato in grado di prevedere maschere per nessuna delle immagini testate. Come esempio di applicazione downstream, il modello fine-tuned può essere utilizzato in flussi di lavoro di pre-etichettatura come quello descritto in Modulo di auto-etichettatura per sistemi avanzati di assistenza alla guida basati su deep learning su AWS.

Conclusione

In questo post, abbiamo discusso del modello visivo fondamentale noto come Modello Segmenta Qualsiasi Cosa (SAM) e la sua architettura. Abbiamo utilizzato il modello SAM per parlare della prontezza visiva e dei vari input nell’ingegneria della prontezza visiva. Abbiamo esplorato come si comportano i diversi indizi visivi e le loro limitazioni. Abbiamo anche descritto come le catene visive migliorano le prestazioni rispetto all’utilizzo di un solo indizio, simile all’API LangChain. Successivamente, abbiamo fornito una valutazione quantitativa di tre modelli pre-addestrati. Infine, abbiamo discusso del modello SAM sintonizzato e dei suoi risultati rispetto al modello di base originale. Il sintonizzare dei modelli fondamentali aiuta a migliorare le prestazioni del modello per specifiche attività come la segmentazione. Dovrebbe essere notato che il modello SAM, a causa dei suoi requisiti di risorse, limita l’uso per casi d’uso in tempo reale e inferenze al limite nel suo stato attuale. Speriamo che con future iterazioni e tecniche migliorate, si riducano i requisiti di calcolo e si migliori la latenza.

Speriamo che questo post vi incoraggi ad esplorare la prontezza visiva per i vostri casi d’uso. Poiché questa è ancora una forma emergente di ingegneria degli indizi, c’è ancora molto da scoprire in termini di indizi visivi, catene visive e prestazioni di questi strumenti. Amazon SageMaker è una piattaforma di ML completamente gestita che consente ai costruttori di esplorare grandi modelli linguistici e visivi e di creare applicazioni AI generative. Inizia a costruire il futuro con AWS oggi stesso.