Passo 1: Data Gathering
Il processo di Data Gathering è stato fatto dai ragazzi di triennale. Hanno estratto una serie di ambienti digitali usando procThor e mi hanno fornito una serie di immagini nonchè informazioni sugli ogetti e le loro posizioni all’interno delle immagini. Ci sono più oggetti all’interno di ogni immagine, e più immagini (corrispondenti a diverse posizioni dell’agente) per ogni ambiente.
Passo 2: Data preprocessing
I dati, per come sono arrivati, devono essere raccolti in un dataset che sia facilmente utilizzabile dal modello. Intendiamo fare una valutazione di Kosmos usando un oggetto per ogni immagine e verificare che il modello faccia il grounding dell’entità correttamente. Vogliamo quindi fornire al modello un immagine, ed interrogare il modello sulla posizione dell’entità all’interno dell’immagine, verificare poi la bontà del modello. Per fare ciò, dobbiamo seprare ogni entità in ogni immagine di ogni ambiente. Ho scelto, sotto consiglio di Claudiu, di rappresentare questo dataset come csv. Questo è un estratto di come si presenta:
Per ottenere questo file ho utilizzato uno script python che estrae queste informazioni dal dataset e le inserisce in un dataframe, che poi è stato esportato sotto forma di csv:
Passo 3: Model evaluation
A questo punto dobbiamo valutare il modello su questi dati. Per adesso la valutazione è stata fatta in zero shot su uno split dei dati del 20%. Abbiamo diviso il dataset in tre parti: train test ed eval. In questo caso abbiamo usato solamente “eval”. Per fare la valutazione zero shot del modello dobbiamo fornirgli, un prompt, ottenuto sulla base del nome dell’entità, e l’immagine che contiene quell’entità.
Per fare ciò ho utilizzato uno script python che opera seguendo questa struttura: Per ogni riga del CSV
- ottieni il prompt a partire dalla lexical reference
- recupera l’immagine “raw” dal dataset
- chiedi a Kosmos di eseguire il grounding sull’immagine con il prompt.
- estrai dall’output di kosmos il bounding box dell’entità (kosmos generalmente non restituisce solo l’entità che ci interessa):
- Confronta il bounding box di kosmos con quello fornito dal dataset
Per ora i risultati ottenuti “zero-shot” sono di una precisione del 54% circa.
Passo 4: interpretazione dei risultati.
Per quanto possano essere deludenti (sotto alcuni aspetti), questi risultati sono incoraggianti. Da una prima esplorazione dei risultati si può vedere come molti errori siano di natura di comprensione: Come si può vedere in questa immagine il modello pensa a “TV Stand” come al supporto della televisione, mentre nel dataset “TV stand” indica il mobile su cui è posto il televisore. Questo è stato segnato come errore perchè i bounding boxes non si sovrappongono al 50%+
Passi successivi:
Per i passi successivi abbiamo in programma un fine tuning del modello su questo task, inoltre abbiamo intenzione di testare il modello su “few shots”. Fornendo all’interno del prompt i bounding box di altre immagini
Inoltre questo processo verrà ripetuto per un ulteriore task: quello di “entity labeling”, che è sostanzialmente il task inverso a questo: dato un bounding box, ottenere il nome dell’entità evidenziata.