I modelli di classificazione delle immagini che abbiamo trattato finora prendevano un'immagine e producevano un risultato categorico, come la classe 'numero' in un problema MNIST. Tuttavia, in molti casi non vogliamo solo sapere che un'immagine rappresenta degli oggetti - vogliamo essere in grado di determinare la loro posizione precisa. Questo è esattamente l'obiettivo del rilevamento degli oggetti.
Immagine dal sito web di YOLO v2
Supponendo di voler trovare un gatto in un'immagine, un approccio molto semplice al rilevamento degli oggetti potrebbe essere il seguente:
- Suddividere l'immagine in un certo numero di riquadri.
- Eseguire la classificazione delle immagini su ciascun riquadro.
- I riquadri che producono un'attivazione sufficientemente alta possono essere considerati contenere l'oggetto in questione.
Immagine dal Notebook di Esercizi
Tuttavia, questo approccio è tutt'altro che ideale, poiché consente all'algoritmo di localizzare il riquadro dell'oggetto in modo molto impreciso. Per una localizzazione più precisa, dobbiamo eseguire una sorta di regressione per prevedere le coordinate dei riquadri - e per questo, abbiamo bisogno di dataset specifici.
Questo post sul blog offre un'ottima introduzione al rilevamento delle forme.
Potresti imbatterti nei seguenti dataset per questo compito:
- PASCAL VOC - 20 classi
- COCO - Common Objects in Context. 80 classi, riquadri delimitatori e maschere di segmentazione
Mentre per la classificazione delle immagini è facile misurare quanto bene l'algoritmo performa, per il rilevamento degli oggetti dobbiamo misurare sia la correttezza della classe, sia la precisione della posizione del riquadro delimitatore inferito. Per quest'ultimo, utilizziamo la cosiddetta Intersezione su Unione (IoU), che misura quanto bene due riquadri (o due aree arbitrarie) si sovrappongono.
Figura 2 da questo eccellente post sul blog su IoU
L'idea è semplice - dividiamo l'area di intersezione tra due figure per l'area della loro unione. Per due aree identiche, IoU sarebbe 1, mentre per aree completamente disgiunte sarà 0. Altrimenti varierà da 0 a 1. Consideriamo tipicamente solo quei riquadri delimitatori per cui IoU supera un certo valore.
Supponiamo di voler misurare quanto bene una determinata classe di oggetti
- Considera la curva Precisione-Richiamo che mostra l'accuratezza in base a un valore di soglia di rilevamento (da 0 a 1).
- A seconda della soglia, rileveremo più o meno oggetti nell'immagine, e valori diversi di precisione e richiamo.
- La curva avrà questo aspetto:
Immagine da NeuroWorkshop
La Precisione Media per una data classe
Considereremo solo quei rilevamenti per cui IoU supera un certo valore. Ad esempio, nel dataset PASCAL VOC tipicamente
Immagine da NeuroWorkshop
La metrica principale per il rilevamento degli oggetti è chiamata Precisione Media Media, o mAP. È il valore della Precisione Media, mediato su tutte le classi di oggetti, e talvolta anche su
Esistono due grandi classi di algoritmi di rilevamento degli oggetti:
- Reti di Proposta di Regione (R-CNN, Fast R-CNN, Faster R-CNN). L'idea principale è generare Regioni di Interesse (ROI) ed eseguire CNN su di esse, cercando l'attivazione massima. È un po' simile all'approccio naïf, con l'eccezione che le ROI vengono generate in modo più intelligente. Uno dei principali svantaggi di tali metodi è che sono lenti, poiché necessitano di molti passaggi del classificatore CNN sull'immagine.
- Metodi One-pass (YOLO, SSD, RetinaNet). In queste architetture progettiamo la rete per prevedere sia le classi che le ROI in un unico passaggio.
R-CNN utilizza Selective Search per generare una struttura gerarchica di regioni ROI, che vengono poi passate attraverso estrattori di caratteristiche CNN e classificatori SVM per determinare la classe dell'oggetto, e regressione lineare per determinare le coordinate del riquadro delimitatore. Paper ufficiale
Immagine da van de Sande et al. ICCV’11
*Immagini da questo blog
Questo approccio è simile a R-CNN, ma le regioni vengono definite dopo che i livelli di convoluzione sono stati applicati.
Immagine dal Paper ufficiale, arXiv, 2015
L'idea principale di questo approccio è utilizzare una rete neurale per prevedere le ROI - la cosiddetta Rete di Proposta di Regione. Paper, 2016
Immagine dal Paper ufficiale
Questo algoritmo è ancora più veloce di Faster R-CNN. L'idea principale è la seguente:
- Estrarre caratteristiche utilizzando ResNet-101
- Le caratteristiche vengono elaborate da Position-Sensitive Score Map. Ogni oggetto delle classi
$C$ è suddiviso in regioni$k\times k$ , e si addestra per prevedere parti degli oggetti. - Per ogni parte delle regioni
$k\times k$ tutte le reti votano per le classi degli oggetti, e la classe dell'oggetto con il massimo voto viene selezionata.
Immagine dal Paper ufficiale
YOLO è un algoritmo in tempo reale a passaggio unico. L'idea principale è la seguente:
- L'immagine è suddivisa in regioni
$S\times S$ - Per ogni regione, CNN prevede
$n$ oggetti possibili, le coordinate del riquadro delimitatore e la confidence=probabilità * IoU.
Immagine dal Paper ufficiale
- RetinaNet: Paper ufficiale
- SSD (Single Shot Detector): Paper ufficiale
Continua il tuo apprendimento nel seguente notebook:
In questa lezione hai fatto un tour rapido di tutti i vari modi in cui il rilevamento degli oggetti può essere realizzato!
Leggi questi articoli e notebook su YOLO e prova a usarli tu stesso
- Un buon post sul blog che descrive YOLO
- Sito ufficiale
- Yolo: Implementazione Keras, notebook passo-passo
- Yolo v2: Implementazione Keras, notebook passo-passo
- Rilevamento degli Oggetti di Nikhil Sardana
- Un buon confronto tra algoritmi di rilevamento degli oggetti
- Revisione degli algoritmi di deep learning per il rilevamento degli oggetti
- Introduzione passo-passo agli algoritmi di rilevamento degli oggetti di base
- Implementazione di Faster R-CNN in Python per il rilevamento degli oggetti











