YOLO V2: "Better, Faster, Stronger" [ITA] - www.antonioconsiglio.com

YOLO V2: "Better, Faster, Stronger" [ITA]

Oct. 21, 2023, 3:55 p.m.

Se vi siete persi il mio precedente "articolo" sull'architettura YOLO vi invito a leggerlo se non siete a conoscenza dell'architettura. Se invece siete già a conoscenza dell'architettura YOLO in questo "articolo" cercherò di descrivere le modifiche effettuate all'architettura base che ha portato l'architettura YOLO V2 ad ottenere risultati quali un 78.6 mAP a 40 FPS (frames per sencond) relativo al dataset VOC 2007 (questo dataset presenta 20 classi).

I PROBLEMI DI YOLO

L'architettura YOLO soffriva di alcuni problemi rispetto alle architetture a due stadi quali "Fast R-CNN", tra questi c'era la bassa recall (ovvero il rapporto tra gli oggetti localizzati diviso il totale degli oggetti etichettati) e un significante numero di errori di localizzazione. Gli autori del paper si sono quindi soffermati su questi due aspetti fondamentali, ovvero migliorare la recall e la precisione nella localizzazione tenendo però alta l'accuracy della classificazione.


DESCRIZIONE GENERALE

Tra le modifiche principali dell’architettura, rispetto ad YOLO, ci sono:

Batch Normalization: Questa tecnica non fa altro che normalizzare gli output di tutti layer convoluzionali, aggiungendo questi blocchi all’architettura classica si aggiungono altri due parametri che cambieranno durante il training del modello (Vedi Figura 1). L’aggiunta di questi blocchi ha permesso anche l’eliminazione di altri blocchi che avevano come obiettivo quello di regolarizzare l’architettura.

L’aggiunta di questi blocchi ha portato ad un miglioramento del 2% sul mAP (mean Average Precision)

Figura 1: S. Ioffe and C. Szegedy. Batch normalization: arXiv preprint arXiv:1502.03167, 2015

High Resolution Classifier: La prima architettura YOLO, prevedeva il training del classifier con immagini in input con una risoluzione di 224x224 per poi utilizzare però in input delle immagini con una risoluzione 448x448. A differenza della prima architettura, questa volta gli autori hanno allenato prima il classfier con una risoluzione di 224x224 per poi effettuare un fine-tune di  10 epoche di training con una risoluzione doppia sul dataset ImageNet, ovvero 448x448.

 Questa modifica ha portato ad un miglioramento del 4% sul mAP.

Convolutional With Anchor Boxes: Le cordinate relative alla bounding-box dell’oggetto trovato erano predette direttamente attraverso l’utilizzo di un Fully connected Layer alla fine del feature extractor formato dai layers convoluzionali. Gli autori del modello in YOLOv2 si sono inspirati al Faster R-CNN, che invece di predire direttamente la bounding-box ne predice gli offset rispetto a quest’ultima.

Per fare questo, YOLOv2 utilizz della Anchor boxes, ovvero un set di box di dimensioni predefinite selezionate rispetto alle dimensioni di quello che si intende predire. Quindi invece di predire direttamente la bounding-box il modello predice degli offset rispetto all’anchor box con lo score più alto. Con l’utilizzo delle Anchor Boxes il modello ottiene il miglioramento del 7% sulla recall una piccola riduzione nell’accuracy del modello.

Entrando più nel dettaglio dell’architettura, per implementare questa opzione gli autori hanno eliminato Il Fully Connected Layer che si occupava della regressione per le bounding-box ed eliminato un pooling layer per ottenere una feature map (alla fine della rete convoluzionale) con maggiore risoluzione (ricordiamo che i pooling layers sono utilizzati per ridurre la dimensione quali H e W dell’immagine e ridurre quindi il tempo di esecuzione del modello). La dimensione in input del modello è stata ridotta da 448x448 (dimensione utilizzata per allenare la rete convoluzionale) a 416x416 così da ottenere una matrice HxW di dimensioni dispari e quindi avere un centro univoco.

Dimension Clusters: Il primo problema riscontrato causato dall’utilizzo delle anchor boxes stava nel fatto che queste fossero definite manualmente e il risultato del modello dipendeva tantissimo da questa scelta. Per avere risultati migliori quindi gli autori hanno utilizzato un algoritmo semplice di clusterizzazione K-means però hanno utilizzato come distanza non la euclidea ma data dal risultato di à distance = 1- IoU (intersection over union).

Tra i risultati ottenuti (Fig.2)  gli autori hanno optato per 5 clusters (quindi 5 anchor boxes) come migliore compromesso tra complessità del modello e recall.

Figura 2: S. Ioffe and C. Szegedy. Batch normalization: arXiv preprint arXiv:1502.03167, 2015

Direct location prediction: L’utilizzo di anchor boxes ha portato inizialmente all’instabilità del modello soprattutto nelle prime iterazioni. La Region Proposition Network (RPN) predice gli offset degli Anchor Boxes, offset che non sono vincolati a una posizione specifica e potrebbero finire in qualsiasi parte dell'immagine, indipendentemente dalla posizione che ha predetto questo riquadro. In YOLO la previsione non è libera, e il modello richiede molto tempo per prevedere offset sensati. Pertanto, per ciascun riquadro di ancoraggio YOLOv2 predice le coordinate del riquadro di delimitazione relative alla posizione della cella della griglia; a tale scopo, è stata utilizzata una funzione di attivazione logistica per produrre coordinate entro un intervallo di [0,1]. In Figura 3 un esempio sul calcolo della bounding box dove Cx e Cy rappresentano la posizione della cella della griglia rispetto all’angolo superiore sinistro dell’immagine, Pw e Ph rappresentao la larghezza e altezza delle Anchor boxes.

Il modello fa 5 predizioni formate ognuna da un vettore di 5 elementi [t­x, t­y, t­w, t­h, t­o]

Figura 3: S. Ioffe and C. Szegedy. Batch normalization: arXiv preprint arXiv:1502.03167, 2015

Fine-Grained Features: Come già scritto precedentemete la feature map in output è una matrice 13x13xn_ch. Questa risoluzione fa bene il suo lavoro per oggetti grandi ma pecca su oggetti piccoli. Per migliorare le prestazioni sulla detection di oggetti più piccoli gli autori hanno estratto dal layer con risoluzione 26x26 la feature maps e creato una matrice passano da una dimensione iniziale di 26x26x512 a 13x13x2048. Questa matrice è stata impilata alla feature map ottenuta al passaggio successivo (Vedi Figura 4)

Multi-Scale Training: Grazie al fatto che il modello presenta solo layers di pooling e convoluzionali, la dimensione di input può essere variata senza alcun problema. Per questo motivo per poter avere un modello robusto per varie dimensioni di input il modello è stato allenato cambiando randomicamente le dimensioni dell’immagine in input ogni 10 epoche di training. Le dimensioni di input utilizzate vanno da 320 a 608 come multipli di 32 che è il fattore di riduzione che si ottiene alla fine della rete convoluzionale.


STRUTTURA DELL'ARCHITETTURA

 

A differenza di YOLO che utilizzava come backbone una rete convoluzionale insiparata a GoogLeNet in YoloV2 gli autori hanno introdotto una nuova rete convoluzionale che hanno chiamato Darknet-19, dove solitamente il numero finale sta ad indicare il numero di layer convoluzionali presenti all'interno dell'architettura. Questa architettura si ispira all'achitettura VGG-16 in quanto sono stati utilizzati layers convoluzionali 3x3 e con il numero di filtri che viene raddoppiato dopo ogni Pooling layer.

Inoltre nel modello è stato utilizzato un Global Average Pooling layer (un layer che riduce la dimensione del tensore in ingresso da [batch, channels, h, w] --> [batch,channels,1,1] alla fine del backbone per ottenere la feature map e aggiunti dei layer di normalizzazione alla fine di ogni layer convoluzionale ( Batch Normalization https://arxiv.org/abs/1502.03167).

Il modello richiede solo 5.58 miliardi di operazioni per processare un'immagine con delle prestazioni in linea con lo stato dell'arte sul dataset ImageNet.


TRAINING

Per la classificazione l'architettura è stata allenata,utilizzando come dataset ImageNet class classification composto da 1000 classi differenti per 160 epoche utilizzando come optimizer il stochastic gradient descent (letteralmente discesa stocastica del gradiente) con un learning rate di 0.1 e un polynomial rate decay ( un decremento polinomiale del lerning rate) con una potenza di 4, un weight decay di 0.0005 e un momento pari a 0.9. Durante il training sono stati utilizzati techniche standard di augmentation. Come già scritto prima, il training si conclude con un fine tuning della rete effettuato cambiando le dimensioni dell'input, con un learning rate di 0.001 e gli altri parametri costanti.

Per l'object detection, l'architettura è stata modificata eliminando l'ultimo layer convoluzionale e aggiungendone tre con kernel 3x3 e 1024 filtri, seguiti da un layer convoluzionale 1x1 con numero di filtri pari al numero di output di cui abbiamo bisogno. Il numero di filtri in output è dato dalla somma del numero di anchor boxes utilizzate, moltiplicato per il numero di cordinate che in questo caso è pari a 5 e numero di anchor boxes per il numero di classi che si vogliono identificare. Inoltre è stato aggiunto un passthrough layer tra la l'ultimo layer composto da 512 filtri  al penultimo layer convoluzionale per poter avere così feature con più informazioni. Il modello poi è stato allenato per 160 epoche con un learning rate pari a 10-3 in partenza e diviso poi per 10 alla 60esima e 90esima epoca di training. I dataset utilizzati sono COCO e VOC.

Per i risultati ottenuti dagli autori del paper vi lascio il link dove potete scaricare la pubblicazione ufficiale in inglese e approfondire: https://arxiv.org/pdf/1612.08242.pdf