Icone color1 12

Utilizzo di deep learning per il riconoscimento di oggetti

Autrice: Joyce Xu

Traduttrice: Sabrina Sala

 

 

1

 

Con la comparsa di veicoli a guida autonoma, sistemi di videosorveglianza intelligenti e varie applicazioni come quella del conteggio delle persone, la richiesta di sistemi di riconoscimento facciale è ormai in continua crescita. Questi sistemi riguardano non solo il riconoscimento e la classificazione degli oggetti presenti nelle immagini, ma anche la localizzazione di ciascuno di essi, tracciando attorno ad essi un appropriato riquadro di delimitazione. Ciò ha reso il sistema di riconoscimento di oggetti un compito sempre più complesso rispetto al suo predecessore nell’ambito della visione artificiale: la classificazione di immagini.

Fortunatamente gli approcci più appropriati per il riconoscimento di oggetti sono, attualmente, estensioni di modelli per la classificazione di immagini. Qualche mese fa Google ha rilasciato una nuova API (interfaccia di programmazione di un’applicazione) di riconoscimento di oggetti in Tensorflow. In questa release troviamo modelli pre-addestrati con i relativi pesi:

Nello scorso (METTERE LINK SU SITO DLI) articolo, abbiamo parlato delle tre architetture di reti neurali sopra citate (MobileNets, Inception e ResNet), oggi affronteremo invece i modelli di riconoscimento di oggetti per Tensorflow: Faster R-CNN, R-FCN e SSD. Attraverso questo articolo capiremo come il deep learning è applicato a questi modelli per il riconoscimento di oggetti, come questi ultimi si differenzino tra loro e quali siano i punti in comune.

Faster R-CNN

La faster R-CNN è ormai un modello di riferimento per la rilevazione di oggetti basata sul deep learning, che ha ispirato molti modelli successivi di rilevazione e segmentazione, inclusi i due che andremo ad esaminare. Sfortunatamente non possiamo comprendere appieno la Faster R-CNN senza analizzare R-CNN e Fast R-CNN, sue predecessori.

R-CNN

Possiamo certamente dire che la R-CNN, Region-based Convolutional Neural Network, è la rete che ha dato il via ai giochi. Consiste in tre fasi:

  1. Scansione dell’immagine di input per la rilevazione di possibili oggetti, utilizzando un algoritmo chiamato Selective Search, che estrae approssimativamente 2000 regioni di questa immagine (Region Proposal)
  2. Esecuzione della rete neurale convoluzionale (CNN) in cima a ciascuna regione.
  3. Estrapolazione dell’output da ogni CNN per immetterlo dentro ad:
    1. una SVM (Support Vector Machine) per classificare la regione
    2. Effettuare una regressione lineare per restringere il riquadro di delimitazione dell’oggetto, se esistente.

Le fasi sono illustrate (dal basso verso l’alto) nella figura sottostante

2

2

In altre parole, prima generiamo le possibili regioni, quindi estraiamo le caratteristiche e infine classifichiamo quelle regioni sulla base delle caratteristiche estratte. In sostanza, abbiamo trasformato la rilevazione di oggetti in un problema di classificazione. La R-CNN risulta molto intuitiva ma, sfortunatamente, anche molto lenta.

Fast R-CNN

Lo sviluppo immediatamente successivo è la Fast R-CNN. Questa ricorda l’originale in molte delle sue caratteristiche ma è migliore in termini di velocità di rilevazione per due aspetti:

  1. L’estrazione di caratteristiche viene effettuata prima di estrarre le regioni di interesse, ma utilizzando solo una CNN per l’intera immagine al posto che 2000 CNN sulle 2000 regioni sovrapposte.
  2. La SVM viene rimpiazzata da una funzione softmax e, inoltre, la rete neurale viene utilizzata anche per le previsioni anziché creare un nuovo modello.

Il modello appare similmente a:

 

3 1

Come possiamo vedere dall’immagine, stiamo ora generando proposte regionali basate non sull’immagine originale, ma piuttosto sull’ultima mappa delle caratteristiche estrapolate dalla rete. Ciò ci permette di allenare una sola CNN per l’intera immagine.

In aggiunta, al posto che allenare differenti SVM per classificare ogni oggetto, vi è un singolo strato softmax che genera direttamente la probabilità per la classe di riferimento. Quindi, abbiamo ora una sola rete neurale da allenare, a differenza di quanto succedeva prima dove invece c’era una rete neurale affiancata a molteplici SVM.

La Fast R-CNN performa, perciò, molto meglio in termini di velocità. Tuttavia, rimane un grosso difetto: l’algoritmo di selective search per proporre le possibili regioni.

Faster R-CNN

Siamo giunti ora all’obiettivo iniziale del nostro articolo: Faster R-CNN. L’intuizione è stata quella di rimpiazzare il lento algoritmo di selective search con una rete neurale veloce. Nello specifico essa ha introdotto la region proposal network (RPN), rete di proposta regionale.

Come funziona la RPN:

  • All’ultimo strato di una CNN iniziale, una finestra scorrevole 3×3 si muove attraverso la mappa delle caratteristiche per mapparla poi in una dimensione inferiore (ad esempio 256-d).
  • Per ogni posizione della finestra scorrevole, la RPN genera molteplici regioni possibili basate su vincoli spaziali di dimensioni fisse chiamati riquadri di ancoraggio (anchor boxes).
  • Ogni proposta regionale consiste in:
    • un punteggio (score) per la presenza dell’oggetto in quella determinata regione
    • 4 coordinate rappresentanti il riquadro di delimitazione della regione.

In altre parole, guardiamo alla nostra regione nell’ultima mappa delle caratteristiche, considerando i differenti k riquadri di ancoraggio attorno ad essa. Per ciascun riquadro viene visualizzata l’eventualità che contenga un oggetto e quali siano le coordinate del riquadro. Nell’immagine è rappresentato come appare dalla posizione di una finestra scorrevole:

 

4 1

4 1

Il punteggio 2k rappresenta la probabilità data da softmax per ciascun riquadro k per la presenza di un oggetto. Da notare è che, nonostante la RPN elabori le coordinate dei riquadri di delimitazione, essa non classifica comunque i possibili oggetti: ha il solo scopo di individuare regioni in cui siano presenti oggetti e quindi comunicare le coordinate dei relativi riquadri. Se un riquadro di ancoraggio ha un punteggio, relativo alla presenza di un oggetto, superiore a una determinata soglia, allora quel dato riquadro verrà selezionato come possibile regione.

Avendo ora le nostre possibili regioni, le introduciamo direttamente nella Fast R-CNN. Aggiungiamo uno strato di Pooling, alcuni strati completamente connessi, infine uno strato di classificazione softmax e un regressore dei riquadri di delimitazione (bounding box regressor). Possiamo dire, in un certo senso, che Faster R-CNN = RPN + Fast R-CNN.

 

5 1

5 1

La Faster R-CNN raggiunge così miglior velocità e accuratezza. Nonostante siano stati molteplici i tentativi successivi di aumentare la velocità di riconoscimento degli oggetti, solo pochi modelli sono stati davvero in grado di superare questa rete. In altre parole, la Faster R-CNN non rappresenta certo il metodo più semplice e veloce per la object detection ma presenta tuttora una delle migliori performance. Quindi, la Faster R-CNN in Tensorflow con la Inception ResNet è il modello più lento ma anche il più accurato.

Nonostante la Faster R-CNN possa sembrare complessa, è possibile notare che il cuore della sua struttura è il medesimo di quello originario della R-CNN: identificare possibili regioni di oggetti e classificarle. Questo è l’approccio dominante della maggior parte degli odierni modelli di rilevazione di oggetti, incluso quello che andremo ad analizzare ora.

R-FCN

Ritorniamo per un momento indietro. Abbiamo detto che la Fast R-CNN ha migliorato di molto la sua velocità di rilevazione condividendo una singola CNN per tutte le regioni. Questo meccanismo di base è lo stesso della R-FCN: aumentare la velocità massimizzando il numero di parametri condivisi.

La Region-based FullyConvolutional Net (R-FCN) condivide la totalità della computazione per ogni singolo output.

Da una parte, quando classifichiamo un oggetto vogliamo che il modello risulti invariante alle traslazioni, in modo da identificarlo ovunque esso appaia. Dall’altra, abbiamo però la necessità di conoscere anche un’eventuale varianza alle traslazioni: se il nostro oggetto si trova nell’angolo in alto a sinistra, il modello deve tracciare un riquadro di delimitazione in quel determinato punto. Perciò, come trovare un compromesso tra i due estremi, varianza e invarianza?

La soluzione proposta dalla R-FCN è rappresentata dalle position-sentitive score maps: mappe dei punteggi (relative alle features, estratte tramite convoluzioni, alla quale è attribuito un punteggio in base alla presenza della data classe) sensibili alla posizione degli oggetti che intendiamo classificare.

Ognuna di queste mappe rappresenta una posizione relativa di una classe di oggetti. Per esempio, una mappa dei punteggi potrebbe attivarsi qualora identifichi la parte in alto a destra di un gatto, mentre un’altra potrebbe attivarsi quando rileva la parte inferiore sinistra di una macchina. Essenzialmente queste score maps sono mappe di caratteristiche convoluzionali che sono state allenate a riconoscere determinate parti di ogni oggetto.

La R-FCN funziona in questo modo:

  1. Eseguire una CNN (in questo caso una ResNet) sull’immagine di input.
  2. Aggiungere uno strato convoluzionale che coinvolga tutte le mappe generate dal passaggio precedente in modo da ottenere un insieme di punteggi complessivi dell’immagine. Ottenendo k²(C+1) mappe di punteggio, dove k² rappresenta il numero di posizioni relative per dividere un oggetto (per esempio 3² per una griglia 3×3), e dove C+1 rappresenta il numero di classi più lo sfondo.
  3. Eseguire una RPN per generare le regioni di interesse (RoI)
  4. Dividere ciascuna RoI nelle medesime k² sottoregioni di cui è composta la mappa dei punteggi
  5. Dobbiamo ora verificare se nell’insieme dei punteggi complessivi, ogni sottoregione combaci con la corrispondente posizione relativa di un oggetto. Per esempio, se vogliamo considerare la sottoregione in alto a sinistra, dobbiamo prendere la mappa dei punteggi che corrisponde all’angolo in alto a sinistra di un oggetto e farne una media all’interno della RoI. Questo processo è ripetuto per ogni classe.
  6. Dopo che ogni k² sottoregione ha un valore di “object match” per ogni classe, si fa una media delle sottoregioni per ottenere un punteggio per ogni classe.
  7. Classificare le RoI con una funzione softmax sui rimanenti C+1 vettori dimensionali.

Una R-FCN, avente una RPN che genera le RoI, apparirà all’incirca così:

6 1

6 1

Capire come funzioni questo modello è più semplice se si può visualizzare concretamente ciò che fa. Qui di seguito abbiamo un esempio del suo funzionamento mentre cerca di individuare un neonato.

 

 

 

 

7Figura 4: visualizzazione di una RoI che non si sovrappone correttamente all’oggetto

In parole semplici: la R-FCN considera ogni regione, suddividendole poi in sottoregioni e chiedendosi per ciascuna di queste se corrispondano o meno alla relativa porzione dell’immagine di input. Ad esempio “assomiglia alla porzione in centro a destra di un bambino?”. Ciò viene ripetuto per ogni classe. Se la maggior parte delle sottoregioni risulta corrispondente, allora la RoI viene classificata come neonato, dopo che la funzione softmax viene eseguita su tutte le classi.

In questo modo, la R-FCN è capace di identificare contemporaneamente la varianza alle traslazioni, proponendo differenti regioni di oggetti, e l’invarianza alle traslazioni attraverso il riferimento di ogni regione alle stesse mappe di punteggio. Queste mappe di punteggio dovrebbero imparare a classificare un gatto come tale, ovunque esso appaia. Inoltre, è completamente convoluzionale: ciò significa che la computazione è condivisa nell’intera rete.

Ciò permette alla R-FCN di essere nettamente più veloce rispetto alla Faster R-CNN, raggiungendo comunque lo stesso grado di accuratezza.

SSD

L’ultimo modello che andremo ad analizzare è la Single-Shot Detector (SDD). Come la R-FCN ha raggiunto una velocità molto maggiore rispetto alla Faster R-CNN ma in modo nettamente diverso.

I primi due modelli eseguono region proposal e region classification in due fasi distinte. Inanzitutto, utilizzano una RPN (region proposal network) per generare le regioni di interesse, successivamente classificano queste regioni attraverso i propri strati interamente connessi o gli strati convoluzionali sensibili alla posizione degli oggetti da classificare. La SSD unisce questi due processi in un singolo passaggio, prevedendo simultaneamente i riquadri di delimitazione e le classi, nel momento in cui esamina l’immagine.

Data un’immagine di input ed un insieme di etichette al dataset, la SSD agisce in questo modo:

  • Passa l’immagine attraverso una serie di strati convoluzionali, producendo mappe delle caratteristiche a scale differenti (per esempio 10×10, poi 6×6 e ancora 3×3 ecc.)
  • Per ogni posizione in ciascuna di queste mappe delle caratteristiche, usa un filtro convoluzionale 3×3 per valutare un piccolo set di riquadri di delimitazione predefiniti. Questi ultimi sono l’equivalente dei riquadri di ancoraggio (anchor boxes) della Faster R-CNN.
  • Per ogni riquadro prevede simultaneamente:
    1. Il riquadro del bounding box
    2. La probabilità per ogni classe.
  • Durante l’allenamento fa corrispondere il riquadro effettivo con quello predetto sulla base del metodo Intersection over Union (IoU), ovvero l’Indice di Jaccard. I riquadri meglio predetti verranno etichettati come “positivi”, come anche tutti gli altri riquadri che abbiano un valore IoU >0.5.

L’allenamento della SSD ha però una difficoltà peculiare rispetto ai precedenti modelli. Nei primi due modelli, la RPN permetteva di prendere in considerazione solo ciò che aveva anche solo la minima possibilità di essere un oggetto. Con la SSD, invece, questo primo filtro viene eliminato: esso classifica e traccia riquadri di delimitazione in ogni singola posizione nell’immagine, usando riquadri di differenti forme e di molteplici scale. Ciò ha come risultato l’avere un numero molto più elevato di riquadri dove, però, la maggior parte di questi è negativo (dal momento che non rileva oggetti).

La SSD corregge questo problema in due modi. Per prima cosa utilizza la non-maximum suppression (NMS) per raggruppare diversi riquadri sovrapposti in un unico riquadro. Quindi se ad esempio quattro riquadri di simile forma e grandezza contengono lo stesso oggetto, la NMS permette di tenere il riquadro migliore, il più accurato, e di scartare i restanti. In secondo luogo, utilizza una tecnica chiamata hard negative mining per bilanciare le classi durante l’allenamento. Con questa tecnica, solo un sottogruppo degli esempi negativi con la più elevata loss in fase di training (i cosiddetti falsi positivi) è utilizzato per ogni iterazione in fase di allenamento. La SSD mantiene un rapporto 3:1 tra negativi e positivi.

La sua architettura appare così:

 

8

Come detto poco sopra, vediamo esserci degli “extra feature layers”. Queste mappe delle caratteristiche dalle misure variabili aiutano a individuare oggetti di diverse dimensioni. Eccone un esempio:

9

In mappe delle caratteristiche di dimensioni più piccole (4×4), ogni riquadro ricopre una regione più ampia dell’immagine, permettendo così di individuare oggetti più grandi. La region proposal e la classificazione sono perciò eseguite nello stesso momento: avendo p classi di oggetti, ogni riquadro di delimitazione è associato a un vettore dimensionale (4+p) che produce 4 riquadri di coordinate e p probabilità di classe. In ultima istanza, viene utilizzata anche qui una funzione sotmax per classificare gli oggetti.

Possiamo perciò dire che la SSD non è poi così diversa rispetto ai due modelli precedenti. Tuttavia omette il passaggio di individuazione delle regioni, considerando ogni riquadro in ogni posizione dell’immagine insieme alla sua classificazione. Eseguendo tutti questi processi simultaneamente, la SSD è di certo il più veloce tra i tre modelli presi in considerazione.

Conclusioni

La Faster R-CNN, la R-FCN, e la SSD sono tre dei migliori e più usati modelli per la rilevazione di oggetti. Tutti fanno affidamento su reti neurali convoluzionali per le prime fasi del processo e seguono, all’incirca, lo stesso metodo di proposta delle regioni e classificazione.

 

0 commenti

Lascia un Commento

Vuoi partecipare alla discussione?
Fornisci il tuo contributo!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *