in questo file è contenuta, sotto forma di xml, il labeling di un’immagine, a cui è stato associato il bounding box per una televisione.
Image:
questa invece è l’immagine originale.
L’algoritmo
L’algoritmo prende in input queste due cose e ci dice se Kosmos 2 è in grado di generare un bonding box (in questo caso per l’entità “television”) accettabile. Per il codice completo (del main) si rimanda qui
passo 1: estrazione delle entità
in questo passo viene preso il file xml e viene estratta l’entità a cui dobbiamo fare riferimento (le entità in caso siano più di una).
il risultato di questa fase è una lista di entità con il relativo bounding box, nel nostro caso:
passo 2: generare il prompt da passare a kosmos
Kosmos ha bisogno dell’immagine, ma anche di un prompt che gli dica “hey, kosmos, mi faresti il grounding della televisione?”
Ovviamente questo dipende da qual’è l’entità di cui dobbiamo fare il grounding: quindi lo generiamo a partire dall’output del passo precedente (che tra le altre cose ci aveva dato il nome dell’entità):
Questo lo step nel main:
questa la funzione “extract_entities_from_xml”:
il prompt per dire a Kosmos: “trovami in quest’immagine il bounding box di television” è:
passo 3: Dire a kosmos di generare il bounding box dell’entità
A questo punto kosmos ha tutto quello che gli serve per generare il bounding box di “television”.
questo il codice nel main:
questo il codice nella funzione “process_image_with_kosmos”:
Da Kosmos possiamo farci avere molte cose in output, ma ciò che serve a noi è il bounding box dell’entità “television”. Kosmos da questa, insieme da altre informazioni nell’output di “kosmos_entities”
Come si può vedere Kosmos (completely unsolicited) ci ha dato anche il bounding box di qualcos’altro (in questo caso sofa), questo non è un problema perchè l’importante è che ci dia almeno quello di “television”, ma va preso in considerazione perchè lo fa spesso.
passo4: Confrontiamo l’output di kosmos con il labeled data
ora dobbiamo capire se kosmos ha fatto qualcosa di accettabile oppure no?
cosa consideriamo accettabile?
Accettabile è il caso di considerare quando, kosmos fa correttamente il bounding box dell’entità che gli abbiamo chiesto quindi serve che
I Bounding box corrispondano con un’entità di quelle che ci ha dato kosmos
che l’entità abbia il nome giusto
In poche parole: non ci interessa che kosmos abbia individuato correttamente il bounding box se poi quel bounding box mi dice che è una “fatina dei denti” e non il televisore che gli avevo chiesto di trovare.
in questo codice prendiamo ogni entità (di quelle assegnate sul file xml, quindi normalmente una sola), poi prendiamo ogni entità che ha restituito kosmos, e ne confrontiamo l’overlap index.
L’overlap index è una misura che calcola quanto si sovrappongono i due bounding box. Generalmente in letteratura, se i due bounding box si sovrappongono per più del 50% allora si considera una corrispondenza.
Output dell’esempio
alla fine abbiamo avuto un match tra i due bounding box: