Classifica del rilevamento degli oggetti

Classifica rilevamento oggetti

Benvenuti nel nostro ultimo approfondimento nel mondo delle classifiche e della valutazione dei modelli. In un articolo precedente, abbiamo navigato le acque della valutazione dei Large Language Models. Oggi, ci avventuriamo in un dominio diverso ma altrettanto impegnativo: il rilevamento degli oggetti.

Recentemente, abbiamo pubblicato la nostra classifica dei modelli di rilevamento degli oggetti, che elenca i modelli disponibili nell’Hub in base a determinate metriche. In questo blog, mostreremo come i modelli sono stati valutati e sveleremo le metriche popolari utilizzate nel rilevamento degli oggetti, dall’Intersection over Union (IoU) alla Precisione Media (AP) e al Richiamo Medio (AR). Inoltre, metteremo in luce le divergenze e le insidie intrinseche che possono verificarsi durante la valutazione, garantendo che siate dotati delle conoscenze necessarie non solo per capire ma anche per valutare criticamente le prestazioni del modello.

Ogni sviluppatore e ricercatore mira a un modello in grado di rilevare e delineare accuratamente gli oggetti. La nostra classifica di rilevamento degli oggetti è il luogo ideale per trovare un modello open-source che si adatti meglio alle esigenze dell’applicazione. Ma cosa significa veramente “accurato” in questo contesto? A quali metriche bisogna affidarsi? Come vengono calcolate? E, forse ancora più crucialmente, perché alcuni modelli possono presentare risultati divergenti in rapporti diversi? A tutte queste domande risponderemo in questo blog.

Quindi, intraprendiamo insieme questa esplorazione e sveliamo i segreti della classifica di rilevamento degli oggetti! Se preferite saltare l’introduzione e imparare come vengono calcolate le metriche di rilevamento degli oggetti, passate alla sezione sulle Metriche. Se desiderate scoprire come scegliere i migliori modelli in base alla classifica di rilevamento degli oggetti, potete consultare la sezione relativa.

Indice

  • Introduzione
  • Cos’è il rilevamento degli oggetti
  • Metriche
    • Cos’è la Precisione Media e come viene calcolata?
    • Cos’è il Richiamo Medio e come viene calcolato?
    • Quali sono le varianti di Precisione Media e Richiamo Medio?
  • Classifica di rilevamento degli oggetti
    • Come scegliere il miglior modello in base alle metriche?
    • Quali parametri possono influenzare i risultati della Precisione Media?
  • Conclusioni
  • Risorse aggiuntive

Cos’è il rilevamento degli oggetti?

Nel campo della Visione Artificiale, il rilevamento degli oggetti si riferisce al compito di identificare e localizzare oggetti individuali all’interno di un’immagine. A differenza della classificazione delle immagini, dove il compito è determinare l’oggetto o la scena predominante nell’immagine, il rilevamento degli oggetti non solo categorizza le classi degli oggetti presenti, ma fornisce anche informazioni spaziali, disegnando bounding box intorno a ciascun oggetto rilevato. Un rilevatore di oggetti può anche restituire un “punteggio” (o “confidenza”) per ogni rilevamento. Rappresenta la probabilità, secondo il modello, che l’oggetto rilevato appartenga alla classe prevista per ciascuna bounding box.

L’immagine seguente, ad esempio, mostra cinque rilevamenti: una “palla” con una confidenza del 98% e quattro “persone” con una confidenza del 98%, 95%, 97% e 97%.

I modelli di rilevamento degli oggetti sono versatili e hanno una vasta gamma di applicazioni in diversi settori. Alcuni casi d’uso includono la visione nei veicoli autonomi, il rilevamento del volto, la sorveglianza e la sicurezza, l’imaging medico, la realtà aumentata, l’analisi sportiva, le città intelligenti, il riconoscimento dei gesti, ecc.

L’Hugging Face Hub dispone di centinaia di modelli di rilevamento degli oggetti pre-addestrati su diversi dataset, in grado di identificare e localizzare diverse classi di oggetti.

Un tipo specifico di modelli di rilevamento degli oggetti, chiamati zero-shot, possono ricevere query di testo aggiuntive per cercare oggetti target descritti nel testo. Questi modelli possono rilevare oggetti che non hanno mai visto durante l’addestramento, invece di essere limitati all’insieme di classi utilizzato durante l’addestramento.

La diversità dei rilevatori va oltre la gamma di classi di output che possono riconoscere. Variano in termini di architetture sottostanti, dimensioni dei modelli, velocità di elaborazione e accuratezza delle previsioni.

Una metrica popolare utilizzata per valutare l’accuratezza delle previsioni fatte da un modello di rilevamento degli oggetti è la Precisione Media (AP) e le sue varianti, che saranno spiegate più avanti in questo blog.

La valutazione di un modello di rilevamento degli oggetti comprende diversi componenti, come un dataset con annotazioni di bounding box di riferimento, rilevamenti (previsioni di output) e metriche. Questo processo è rappresentato nello schema fornito nella Figura 2:

Prima di tutto, viene scelto un dataset di benchmarking contenente immagini con annotazioni di bounding box di riferimento e viene alimentato il modello di rilevamento degli oggetti. Il modello prevede bounding box per ciascuna immagine, assegnando etichette di classe associate e punteggi di confidenza a ciascuna box. Durante la fase di valutazione, queste bounding box previste vengono confrontate con le bounding box di riferimento nel dataset. La valutazione restituisce un insieme di metriche, ciascuna compresa tra [0, 1], che riflettono criteri di valutazione specifici. Nella prossima sezione, approfondiremo il calcolo delle metriche nel dettaglio.

Metriche

Questa sezione approfondirà la definizione della Precisione Media e del Richiamo Medio, le loro variazioni e le metodologie di calcolo associate.

Cos’è la Precisione Media e come calcolarla?

La Precisione Media (AP) è un singolo numero che riassume la curva Precisione x Richiamo. Prima di spiegare come calcolarla, dobbiamo prima capire il concetto di Intersezione su Unione (IoU) e come classificare una rilevazione come Vero Positivo o Falso Positivo.

IoU è una metrica rappresentata da un numero compreso tra 0 e 1 che misura l’overlap tra il bounding box previsto e il bounding box reale (ground truth). Viene calcolato dividendo l’area in cui i due box si sovrappongono per l’area coperta da entrambi i box combinati. La Figura 3 mostra visivamente l’IoU utilizzando un esempio di un box predetto e il corrispondente box ground-truth.

Se il ground truth e i box rilevati condividono coordinate identiche, rappresentando la stessa regione nell’immagine, il loro valore IoU è 1. Al contrario, se i box non si sovrappongono su nessun pixel, l’IoU viene considerato 0.

In scenari in cui ci si aspetta una precisione elevata nelle rilevazioni (ad esempio, un veicolo autonomo), i bounding box previsti dovrebbero allinearsi strettamente con i bounding box ground-truth. Per questo motivo, si preferisce un valore di soglia IoU ( TIOU \text{T}_{\text{IOU}} TIOU​ ) che si avvicini a 1. D’altra parte, per applicazioni in cui la posizione esatta dei bounding box rilevati rispetto all’oggetto di interesse non è fondamentale, il valore di soglia può essere rilassato, impostando TIOU \text{T}_{\text{IOU}} TIOU​ più vicino a 0.

Ogni box previsto dal modello viene considerato una rilevazione “positiva”. Il criterio di Intersezione su Unione (IoU) classifica ogni previsione come vero positivo (TP) o falso positivo (FP), in base alla soglia di confidenza che abbiamo definito.

In base a una TIOU \text{T}_{\text{IOU}} TIOU​ predefinita, possiamo definire i Veri Positivi e i Veri Negativi:

  • Vero Positivo (TP): Una rilevazione corretta in cui IoU ≥ TIOU \text{T}_{\text{IOU}} TIOU​.
  • Falso Positivo (FP): Una rilevazione errata (oggetto mancato), in cui IoU < TIOU \text{T}_{\text{IOU}} TIOU​.

Al contrario, i negativi vengono valutati sulla base di un bounding box ground-truth e possono essere definiti come Falso Negativo (FN) o Vero Negativo (TN):

  • Falso Negativo (FN): Si riferisce a un oggetto ground-truth che il modello non è riuscito a rilevare.
  • Vero Negativo (TN): Indica una non rilevazione corretta. Nel campo della rilevazione di oggetti, in un’immagine ci possono essere innumerevoli bounding box che NON rappresentano l’oggetto di interesse. Considerate tutti i possibili box in un’immagine che non rappresentano l’oggetto di interesse – un numero piuttosto vasto, vero? 🙂 Ecco perché non consideriamo il TN nel calcolo delle metriche di rilevazione degli oggetti.

Ora che possiamo identificare i nostri TP, FP e FN, possiamo definire Precisione e Richiamo:

  • Precisione è la capacità di un modello di identificare solo gli oggetti rilevanti. È la percentuale di predizioni positive corrette ed è data da:

Precisione=TP(TP+FP)=Tutte le rilevazioni \text{Precisione} = \frac{TP}{(TP + FP)} = \frac{TP}{\text{Tutte le rilevazioni}} Precisione=(TP+FP)TP​=Tutte le rilevazioniTP​

che si traduce nel rapporto tra i veri positivi e tutti i box rilevati.

  • Richiamo misura la competenza di un modello nel trovare tutti i casi rilevanti (tutti i bounding box ground-truth). Indica la proporzione di TP rilevati tra tutti i ground truth ed è dato da:

Richiamo=TP(TP+FN)=Tutti i ground truth \text{Richiamo} = \frac{TP}{(TP + FN)} = \frac{TP}{\text{Tutti i ground truth}} Richiamo=(TP+FN)TP​=Tutti i ground truthTP​

Si noti che TP, FP e FN dipendono da una soglia IoU predefinita, così come Precisione e Richiamo.

La Precisione Media cattura la capacità di un modello di classificare e localizzare correttamente gli oggetti considerando diversi valori di Precisione e Richiamo. Per questo motivo, illustreremo la relazione tra Precisione e Richiamo tracciando le rispettive curve per una classe di target specifica, ad esempio “cane”. Adotteremo una soglia IoU moderata del 75% per delineare i nostri TP, FP e FN. Successivamente, potremo calcolare i valori di Precisione e Richiamo. Per fare ciò, dobbiamo variare i punteggi di confidenza delle nostre rilevazioni.

La Figura 4 mostra un esempio della curva Precisione x Richiamo. Per una maggiore esplorazione del calcolo di questa curva, gli articoli “A Comparative Analysis of Object Detection Metrics with a Companion Open-Source Toolkit” (Padilla, et al) e “A Survey on Performance Metrics for Object-Detection Algorithms” (Padilla, et al) offrono esempi più dettagliati su come calcolare questa curva.

La curva Precisione x Richiamo illustra l’equilibrio tra Precisione e Richiamo in base a diversi livelli di confidenza dei bounding box di un rilevatore. Ogni punto del grafico viene calcolato utilizzando un diverso valore di confidenza.

Per dimostrare come calcolare il grafico della Precisione Media, useremo un esempio pratico tratto da uno degli articoli citati in precedenza. Consideriamo un dataset di 7 immagini con 15 oggetti di verità fondamentale della stessa classe, come mostrato nella Figura 5. Supponiamo che tutte le caselle appartengano alla stessa classe, “cane”, per semplificazione.

Il nostro ipotetico rilevatore di oggetti ha rilevato 24 oggetti nel nostro dataset, illustrati dalle caselle rosse. Per calcolare Precisione e Richiamo, utilizziamo le equazioni di Precisione e Richiamo a tutti i livelli di confidenza per valutare quanto bene il rilevatore ha svolto il suo compito per questa classe specifica nel nostro dataset di benchmarking. Per fare ciò, è necessario stabilire alcune regole:

  • Regola 1: Per semplicità, consideriamo le nostre rilevazioni come Veri Positivi (VP) se IOU ≥ 30%; altrimenti, sono Falsi Positivi (FP).
  • Regola 2: Per i casi in cui una rilevazione si sovrappone a più di una verità fondamentale (come nelle Immagini 2-7), la casella prevista con l’IoU più alto viene considerata VP, e l’altra è FP.

In base a queste regole, possiamo classificare ogni rilevazione come VP o FP, come mostrato nella Tabella 1:

Si noti che secondo la regola 2, nell’immagine 1, “E” è VP mentre “D” è FP perché l’IoU tra “E” e la verità fondamentale è maggiore dell’IoU tra “D” e la verità fondamentale.

Ora, dobbiamo calcolare Precisione e Richiamo considerando il valore di confidenza di ogni rilevazione. Un buon modo per farlo è ordinare le rilevazioni in base ai loro valori di confidenza, come mostrato nella Tabella 2. Quindi, per ogni valore di confidenza in ogni riga, calcoliamo la Precisione e il Richiamo considerando i VP cumulativi (acc VP) e i FP cumulativi (acc FP). L'”acc VP” di ogni riga aumenta di 1 ogni volta che viene rilevato un VP, e l'”acc FP” aumenta di 1 quando viene rilevato un FP. Le colonne “acc VP” e “acc FP” ci dicono essenzialmente i valori di VP e FP dati un particolare livello di confidenza. Il calcolo di ogni valore della Tabella 2 può essere visualizzato in questo foglio di calcolo.

Ad esempio, consideriamo la 12ª riga (rilevazione “P”) della Tabella 2. Il valore “acc VP = 4” significa che se valutassimo il nostro modello su questo particolare dataset con una confidenza del 0,62, rileveremmo correttamente quattro oggetti target e rileveremmo erroneamente otto oggetti target. Questo si tradurrebbe in:

Precisione = acc VP / (acc VP + acc FP) = 4 / (4+8) = 0,3333 e Richiamo = acc VP / tutti i veri oggetti fondamentali = 4 / 15 = 0,2667.

Ora possiamo tracciare la curva Precisione x Richiamo con i valori, come mostrato nella Figura 6:

Esaminando la curva, è possibile dedurre i possibili compromessi tra Precisione e Richiamo e individuare il punto operativo ottimale del modello in base a una soglia di confidenza selezionata, anche se questa soglia non è esplicitamente rappresentata sulla curva.

Se la confidenza di un rilevatore produce pochi falsi positivi (FP), probabilmente avrà una Precisione elevata. Tuttavia, potrebbe mancare molti veri positivi (VP), causando un alto tasso di falsi negativi (FN) e, di conseguenza, un basso Richiamo. D’altra parte, accettare più rilevazioni positive può aumentare il Richiamo, ma potrebbe anche aumentare il conteggio di FP, riducendo così la Precisione.

L’area sotto la curva Precisione x Richiamo (AUC) calcolata per una classe target rappresenta il valore di Precisione Media per quella particolare classe. L’approccio di valutazione COCO si riferisce a “AP” come il valore medio di AUC tra tutte le classi target nel dataset di immagini, anche indicato come Precisione Media Media (mAP) da altri approcci.

Per un grande dataset, il rilevatore probabilmente emetterà caselle con una vasta gamma di livelli di confidenza, risultando in una linea Precisione x Richiamo irregolare, rendendo difficile calcolare la sua AUC (Average Precision) in modo preciso. Diversi metodi approssimano l’area della curva con approcci diversi. Un approccio popolare è chiamato N-interpolazione, dove N rappresenta quanti punti vengono campionati dalla linea blu Precisione x Richiamo.

L’approccio COCO, ad esempio, utilizza una 101-interpolazione, che calcola 101 punti per valori di Richiamo equispaziati (0. , 0.01, 0.02, … 1.00), mentre altri approcci utilizzano 11 punti (11-interpolazione). La Figura 7 illustra una curva Precisione x Richiamo (in blu) con 11 punti di Richiamo equispaziati.

I punti rossi sono posizionati secondo quanto segue:

ρinterp(R)=max⁡r~:r~≥rρ(r~) \rho_{\text{interp}} (R) = \max_{\tilde{r}:\tilde{r} \geq r} \rho \left( \tilde{r} \right) ρinterp​(R)=maxr~:r~≥r​ρ(r~)

dove ρ(r~) \rho \left( \tilde{r} \right) ρ(r~) è la Precisione misurata al Richiamo r~ \tilde{r} r~.

In questa definizione, anziché utilizzare il valore di Precisione ρ(R) \rho(R) ρ(R) osservato in ogni livello di Richiamo R R R, la Precisione ρinterp(R) \rho_{\text{interp}} (R) ρinterp​(R) viene ottenuta considerando la massima Precisione il cui valore di Richiamo è maggiore di R R R.

Per questo tipo di approccio, l’AUC, che rappresenta la Precisione Media, viene approssimata dalla media di tutti i punti e viene data da:

AP11=111=∑R∈{0,0.1,…,1}ρinterp(R) \text{AP}_{11} = \frac{1}{11} = \sum\limits_{R\in \left \{ 0, 0.1, …,1 \right \}} \rho_{\text{interp}} (R) AP11​=111​=R∈{0,0.1,…,1}∑​ρinterp​(R)

Cos’è il Richiamo Medio e come calcolarlo?

Il Richiamo Medio (AR) è una metrica spesso utilizzata insieme all’AP per valutare i modelli di rilevamento degli oggetti. Mentre l’AP valuta sia la Precisione che il Richiamo attraverso diversi livelli di confidenza per fornire un riassunto numerico delle prestazioni del modello, l’AR si concentra esclusivamente sull’aspetto del Richiamo, senza tener conto delle confidenze e considerando tutte le rilevazioni come positive.

L’approccio COCO calcola l’AR come la media del Richiamo massimo ottenuto su IOU > 0,5 e classi.

Utilizzando IOU nell’intervallo [0,5, 1] e calcolando la media dei valori di Richiamo in questo intervallo, l’AR valuta le previsioni del modello sulla loro localizzazione dell’oggetto. Pertanto, se il tuo obiettivo è valutare il tuo modello sia per un alto Richiamo che per una precisa localizzazione dell’oggetto, l’AR potrebbe essere una metrica di valutazione preziosa da considerare.

Quali sono le varianti di Precisione Media e Richiamo Medio?

In base ai valori soglia predefiniti di IoU e alle aree associate agli oggetti di riferimento, è possibile ottenere diverse versioni di AP e AR:

  • [email protected]: imposta la soglia di IoU = 0,5 e calcola l’AUC Precisione x Richiamo per ogni classe target nel dataset dell’immagine. Successivamente, i risultati calcolati per ogni classe vengono sommati e divisi per il numero di classi.
  • [email protected]: utilizza la stessa metodologia di [email protected], con soglia di IoU = 0,75. Con questo requisito di IoU più alto, [email protected] è considerato più rigoroso di [email protected] e dovrebbe essere utilizzato per valutare i modelli che devono raggiungere un elevato livello di precisione nella localizzazione delle rilevazioni.
  • AP@[.5:.05:.95]: anche indicato come AP dagli strumenti cocoeval. Questa è una versione estesa di [email protected] e [email protected], in quanto calcola AP@ con diverse soglie di IoU (0,5, 0,55, 0,6, …, 0,95) e ne calcola la media dei risultati calcolati come mostrato nell’equazione seguente. Rispetto a [email protected] e [email protected], questa metrica fornisce una valutazione olistica, catturando le prestazioni di un modello in un’ampia gamma di accuratezze di localizzazione.

AP@[.5:.05:0.95=AP0.5+AP0.55+…+AP0.9510 \text{AP@[.5:.05:0.95} = \frac{\text{AP}_{0.5} + \text{AP}_{0.55} + … + \text{AP}_{0.95}}{10} AP@[.5:.05:0.95=10AP0.5​+AP0.55​+…+AP0.95​​

  • AP-S: Applica AP@[.5:.05:.95] considerando oggetti di ground-truth (piccoli) con area<322 \text{area} < 32^2 area<322 pixel.
  • AP-M: Applica AP@[.5:.05:.95] considerando oggetti di ground-truth (di dimensioni VoAGI) con 322<area<962 32^2 < \text{area} < 96^2 322<area<962 pixel.
  • AP-L: Applica AP@[.5:.05:.95] considerando oggetti di ground-truth (grandi) con 322<area<962 32^2 < \text{area} < 96^2322<area<962 pixel.

Per Average Recall (AR), vengono utilizzati 10 threshold di IoU (0.5, 0.55, 0.6,…,0.95) per calcolare i valori di Recall. AR viene calcolato limitando il numero di rilevamenti per immagine o limitando i rilevamenti in base all’area dell’oggetto.

  • AR-1: considera fino a 1 rilevamento per immagine.
  • AR-10: considera fino a 10 rilevamenti per immagine.
  • AR-100: considera fino a 100 rilevamenti per immagine.
  • AR-S: considera oggetti (piccoli) con area<322 \text{area} < 32^2 area<322 pixel.
  • AR-M: considera oggetti (di dimensioni VoAGI) con 322<area<962 32^2 < \text{area} < 96^2 322<area<962 pixel.
  • AR-L: considera oggetti (grandi) con area>962 \text{area} > 96^2 area>962 pixel.

Classifica rilevamento oggetti

Abbiamo recentemente pubblicato la classifica del rilevamento degli oggetti per confrontare l’accuratezza e l’efficienza dei modelli open-source presenti sul nostro Hub.

Per misurare l’accuratezza, abbiamo utilizzato 12 metriche che coinvolgono la Precisione Media e il Richiamo Medio utilizzando lo stile COCO, confrontando i dati sul dataset COCO val 2017.

Come discusso in precedenza, diversi strumenti possono adottare particolarità diverse durante la valutazione. Per evitare incongruenze nei risultati, abbiamo preferito non implementare la nostra versione delle metriche. Invece, abbiamo scelto di utilizzare il codice di valutazione ufficiale di COCO, anche chiamato PyCOCOtools, il codice è disponibile qui.

In termini di efficienza, calcoliamo i frame al secondo (FPS) per ogni modello utilizzando il tempo di valutazione medio su tutto il dataset, considerando le fasi di pre e post-elaborazione. Date le variazioni nei requisiti di memoria GPU per ogni modello, abbiamo scelto di valutare con una dimensione batch di 1 (questa scelta è influenzata anche dalla nostra fase di pre-elaborazione, sulla quale approfondiremo in seguito). Tuttavia, è importante notare che questo approccio potrebbe non corrispondere perfettamente alle prestazioni reali, poiché le dimensioni batch più grandi (che spesso contengono più immagini) sono comunemente utilizzate per una maggiore efficienza.

Successivamente, forniremo consigli su come scegliere il miglior modello in base alle metriche e indicheremo quali parametri possono influire sui risultati. Comprendere queste sfumature è fondamentale, poiché possono sorgere dubbi e discussioni all’interno della comunità.

Come scegliere il miglior modello in base alle metriche?

La scelta di una metrica appropriata per valutare e confrontare i rilevatori di oggetti tiene conto di diversi fattori. Le considerazioni principali includono lo scopo dell’applicazione e le caratteristiche del dataset utilizzato per addestrare e valutare i modelli.

Per prestazioni generali, AP (AP@[.5:.05:.95]) è una buona scelta se si desidera un’accuratezza generale del modello su diversi threshold di IoU, senza un requisito rigido sulla localizzazione degli oggetti rilevati.

Se desideri un modello con un buon riconoscimento degli oggetti e gli oggetti generalmente posizionati correttamente, puoi guardare il [email protected]. Se preferisci un modello più accurato per posizionare i bounding box, è più appropriato il [email protected].

Se hai restrizioni sulle dimensioni degli oggetti, entrano in gioco AP-S, AP-M e AP-L. Ad esempio, se il tuo dataset o l’applicazione presenta prevalentemente oggetti di piccole dimensioni, AP-S fornisce informazioni sull’efficacia del rilevatore nel riconoscimento di tali piccoli target. Questo diventa cruciale in scenari come il rilevamento di veicoli distanti o piccoli artefatti nell’imaging medico.

Quali parametri possono influenzare i risultati della Precisione Media?

Dopo aver scelto un modello di rilevamento degli oggetti dall’Hub, possiamo variare le caselle di output se utilizziamo diversi parametri nelle fasi di pre-elaborazione e post-elaborazione del modello. Questi possono influenzare le metriche di valutazione. Abbiamo identificato alcuni dei fattori più comuni che possono portare a variazioni nei risultati:

  • Ignorare le rilevazioni che hanno un punteggio al di sotto di una certa soglia.
  • Utilizzare batch_sizes > 1 per l’inferenza.
  • I modelli portati potrebbero non produrre gli stessi logit dei modelli originali.
  • Alcuni oggetti veri potrebbero essere ignorati dall’evaluatore.
  • Calcolare l’IoU potrebbe essere complicato.
  • I modelli condizionati al testo richiedono prompt precisi.

Prendiamo il modello DEtection TRansformer (DETR) (facebook/detr-resnet-50) come esempio. Mostreremo come questi fattori possono influenzare i risultati di output.

Filtraggio delle rilevazioni prima della valutazione

Il nostro modello di esempio utilizza la classe DetrImageProcessor per elaborare i bounding box e i logit, come mostrato nello snippet seguente:

from transformers import DetrImageProcessor, DetrForObjectDetection
import torch
from PIL import Image
import requests

url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)

processor = DetrImageProcessor.from_pretrained("facebook/detr-resnet-50")
model = DetrForObjectDetection.from_pretrained("facebook/detr-resnet-50")

inputs = processor(images=image, return_tensors="pt")
outputs = model(**inputs)

# Le immagini PIL hanno le loro dimensioni nel formato (w, h)
target_sizes = torch.tensor([image.size[::-1]])
results = processor.post_process_object_detection(outputs, target_sizes=target_sizes, threshold=0.5)

Il parametro threshold nella funzione post_process_object_detection viene utilizzato per filtrare i bounding box rilevati in base ai loro punteggi di confidenza.

Come discusso in precedenza, la curva Precisione x Richiamo viene costruita misurando la Precisione e il Richiamo nell’intero intervallo dei valori di confidenza [0,1]. Pertanto, limitare le rilevazioni prima della valutazione produrrà risultati distorti, poiché escluderemo alcune rilevazioni.

Variazione della dimensione del batch

La dimensione del batch non influisce solo sul tempo di elaborazione ma può anche comportare diverse caselle rilevate. La fase di pre-elaborazione delle immagini può modificare la risoluzione delle immagini di input in base alle loro dimensioni.

Come indicato nella documentazione di DETR, per impostazione predefinita, DetrImageProcessor ridimensiona le immagini di input in modo che il lato più corto sia di 800 pixel, e ridimensiona nuovamente in modo che il lato più lungo sia al massimo di 1333 pixel. A causa di ciò, le immagini in un batch possono avere dimensioni diverse. DETR risolve questo problema riempiendo le immagini fino alla dimensione più grande in un batch e creando una maschera di pixel che indica quali pixel sono reali/quali sono riempimento.

Per illustrare questo processo, consideriamo gli esempi nella Figura 9 e nella Figura 10. Nella Figura 9, consideriamo la dimensione del batch = 1, quindi entrambe le immagini vengono elaborate indipendentemente con DetrImageProcessor. La prima immagine viene ridimensionata a (800, 1201), facendo sì che il rilevatore preveda 28 caselle con classe vase, 22 caselle con classe chair, dieci caselle con classe bottle, ecc.

La Figura 10 mostra il processo con dimensione del batch = 2, in cui le stesse due immagini vengono elaborate con DetrImageProcessor nello stesso batch. Entrambe le immagini vengono ridimensionate per avere la stessa forma (873, 1201), e viene applicato un riempimento, in modo che la parte delle immagini con il contenuto venga mantenuta con i loro rapporti di aspetto originali. Tuttavia, la prima immagine, ad esempio, produce un numero diverso di oggetti: 31 caselle con la classe vase, 20 caselle con la classe chair, otto caselle con la classe bottle, ecc. Nota che per la seconda immagine, con dimensione del batch = 2, viene rilevata una nuova classe dog. Questo avviene a causa della capacità del modello di rilevare oggetti di diverse dimensioni a seconda della risoluzione dell’immagine.

I modelli portati dovrebbero produrre gli stessi logit dei modelli originali

Da Hugging Face, siamo molto attenti quando portiamo modelli nel nostro codice. Non solo per quanto riguarda l’architettura, la documentazione chiara e la struttura del codice, ma dobbiamo anche garantire che i modelli portati siano in grado di produrre gli stessi logit dei modelli originali dati gli stessi input.

I logit prodotti da un modello vengono post-processati per produrre i punteggi di confidenza, gli ID delle etichette e le coordinate del bounding box. Quindi, piccoli cambiamenti nei logit possono influenzare i risultati delle metriche. Potresti ricordare l’esempio precedente, in cui abbiamo discusso del processo di calcolo della Precisione Media. Abbiamo mostrato che i livelli di confidenza ordinano le rilevazioni e piccole variazioni possono portare a un ordine diverso e quindi a risultati diversi.

È importante riconoscere che i modelli possono produrre bounding box in vari formati, che possono essere presi in considerazione, rendendo necessarie conversioni adeguate da parte dell’evaluator.

  • (x, y, larghezza, altezza): questo rappresenta le coordinate dell’angolo in alto a sinistra seguite dalle dimensioni assolute (larghezza e altezza).
  • (x, y, x2, y2): questo formato indica le coordinate dell’angolo in alto a sinistra e dell’angolo in basso a destra.
  • (rel_x_center, rel_y_center, rel_width, rel_height): i valori rappresentano le coordinate relative del centro e le dimensioni relative del bounding box.

Alcune verità fondamentali vengono ignorate in alcuni dataset di benchmark

Alcuni dataset a volte utilizzano etichette speciali che vengono ignorate durante il processo di valutazione.

Ad esempio, COCO utilizza il tag iscrowd per etichettare grandi gruppi di oggetti (ad esempio molte mele in un cestino). Durante la valutazione, gli oggetti contrassegnati come iscrowd=1 vengono ignorati. Se questo non viene preso in considerazione, è possibile ottenere risultati diversi.

Il calcolo dell’IoU richiede attenzione

L’IoU potrebbe sembrare facile da calcolare sulla base della sua definizione. Tuttavia, c’è un dettaglio fondamentale di cui essere consapevoli: se la verità fondamentale e la rilevazione non si sovrappongono affatto, nemmeno per un pixel, l’IoU dovrebbe essere 0. Per evitare di dividere per zero durante il calcolo dell’unione, è possibile aggiungere un piccolo valore (chiamato epsilon) al denominatore. Tuttavia, è essenziale scegliere attentamente l’epsilon: un valore superiore a 1e-4 potrebbe non essere abbastanza neutrale per fornire un risultato accurato.

I modelli condizionati dal testo richiedono i prompt corretti

Potrebbero esserci casi in cui vogliamo valutare modelli condizionati dal testo come OWL-ViT, che possono ricevere un prompt di testo e fornire la posizione dell’oggetto desiderato.

Per tali modelli, diversi prompt (ad esempio “Trova il cane” e “Dov’è il bulldog?”) possono produrre gli stessi risultati. Tuttavia, abbiamo deciso di seguire la procedura descritta in ciascun articolo. Ad esempio, per l’OWL-ViT, prevediamo gli oggetti utilizzando il prompt “un’immagine di un {}” dove {} viene sostituito con le classi del dataset di benchmark.

Conclusioni

In questo post, abbiamo introdotto il problema della rilevazione degli oggetti e descritto le principali metriche utilizzate per valutarle.

Come abbiamo notato, valutare i modelli di rilevazione degli oggetti può richiedere più lavoro di quanto sembri. Le particolarità di ciascun modello devono essere attentamente prese in considerazione per evitare risultati distorti. Inoltre, ogni metrica rappresenta un punto di vista diverso dello stesso modello e scegliere “la migliore” metrica dipende dall’applicazione del modello e dalle caratteristiche del dataset di benchmark scelto.

Sotto è riportata una tabella che illustra le metriche consigliate per casi d’uso specifici e fornisce esempi di scenari reali. Tuttavia, è importante notare che queste sono solo suggerimenti e la metrica ideale può variare in base alle diverse particolarità di ciascuna applicazione.

I risultati mostrati nel nostro 🤗 Object Detection Leaderboard sono calcolati utilizzando uno strumento indipendente chiamato PyCOCOtools, ampiamente utilizzato dalla comunità per il benchmarking dei modelli. Stiamo cercando di raccogliere dataset di diversi domini (ad esempio immagini mediche, sport, veicoli autonomi, ecc). Puoi utilizzare la pagina di discussione per fare richieste di dataset, modelli e funzionalità. Non vediamo l’ora di vedere il tuo modello o dataset in primo piano nella nostra classifica! 🥇

Risorse aggiuntive

  • Guida alla rilevazione degli oggetti
  • Compito di rilevazione degli oggetti
  • Articolo: Cosa rende efficaci le proposte di rilevazione
  • Articolo: Un’analisi comparativa delle metriche di rilevazione degli oggetti con un toolkit open-source correlato
  • Articolo: Un sondaggio sulle metriche di performance per gli algoritmi di rilevazione degli oggetti

Un ringraziamento speciale 🙌 a @merve, @osanseviero e @pcuenq per il loro feedback e i loro ottimi commenti. 🤗