Il sottotitolo è corretto, FPN è un metodo molto semplice che può essere usato con quasi ogni modello per migliorare i risultati. Entreremo presto nei tecnicismi del documento, ma per questo blog, ci sono alcuni pre-requisiti. Dovreste avere un’idea di alto livello sui seguenti Fast RCNN, Faster RCNN, anchor boxes, la conoscenza di SSD vi sarà utile. Ho anche dei blog per tutti questi documenti che potete controllare (link alla fine di questo blog). FPN è relativamente più semplice se capite bene tutti i prerequisiti.
Piramidi di immagini (immagini multiple di scale multiple) sono spesso usate al momento delle previsioni per migliorare i risultati. Ma il calcolo dei risultati utilizzando le moderne architetture di apprendimento profondo è spesso un processo costoso sia in termini di calcolo che di tempo.
FPN si basa sullo sfruttamento della gerarchia piramidale multiscala inerente alla CNN profonda. È analogo alla differenza tra RCNN e Fast RCNN, RCNN è un rilevatore di oggetti basato su regioni in cui prima troviamo le ROI usando un algoritmo come la ricerca selettiva e poi ritagliamo queste ROI (circa 2000) dall’immagine e le alimentiamo nella CNN per ottenere risultati; in Fast RCNN gli strati iniziali della CNN sono condivisi per l’immagine completa e il ritaglio delle ROI è fatto sulla mappa delle caratteristiche estratte, risparmiando così molto tempo. Nel caso di FPN, la ricerca si basa sullo sfruttamento della natura multi-scala interna, e la piramide dell’immagine è in qualche modo implementata internamente all’architettura e alla condivisione della maggior parte delle parti della rete. Salteremo nei dettagli tecnici ora.
CNN si basa sulla struttura gerarchica in cui la risoluzione della mappa delle caratteristiche è ridotta dopo ogni strato ma la semantica catturata da ogni strato più profondo è più forte dello strato precedente. Le caratteristiche semanticamente più forti sono spazialmente più grossolane a causa del downsampling. FPN crea un’architettura in cui le caratteristiche semanticamente più forti sono fuse con le caratteristiche degli strati precedenti (che sono sottocampionate meno volte e quindi hanno informazioni di localizzazione più accurate).
L’architettura consiste in due percorsi:
- Percorso bottom-up (normale CNN feed-forward)
- Percorso top-down (nuova architettura usata per la fusione delle caratteristiche)
- È una normale architettura CNN feed-forward. Nel documento, gli autori hanno usato l’architettura Resnet per valutare le prestazioni. Per prima cosa nomineremo gli strati come C2, C3, C4, C5 che sono 2,3,4 e 5 strati nell’architettura Resnet. La dimensione della mappa delle caratteristiche dopo l’applicazione di C2 è imagesize/4 e questa dimensione spaziale viene ricampionata di un fattore 2 dopo ogni strato.
Percorso top-down (piramide destra nell’immagine sopra)
In questo percorso, le caratteristiche più profonde sono fuse con quelle più basse usando connessioni laterali. Poiché il numero di canali degli strati nel percorso bottom-up non è lo stesso, viene applicata una convoluzione 1*1 per ottenere un numero fisso di canali per ogni strato (questa dimensione è mantenuta 256 nel documento). La dimensione spaziale è anche diversa, quindi si sovracampiona (2x) le caratteristiche più profonde in modo che la dimensione spaziale di questa caratteristica corrisponda a una mappa di caratteristiche a più alta risoluzione dello strato precedente nel percorso bottom-down. Ora le dimensioni delle due mappe di caratteristiche sono le stesse e vengono fuse per addizione elementale.
Lo possiamo capire con un esempio. Diciamo che la dimensione della nostra immagine è 512*512, ora la dimensione della mappa delle caratteristiche dopo ogni strato di convoluzione (C2, C3, C4, C5) sarà . Il numero di canali in uscita di ogni strato è . Ora applichiamo una convoluzione 1*1 (con numero di canali di uscita = 256) sulle uscite di C2, C3, C4, C5 per ottenere un numero uguale di canali. Chiameremo queste caratteristiche intermedie con lo stesso numero di canali di uscita come S2, S3, S4, S5 corrispondenti a C2, C3, C4, C5. Ora S5 viene upsampled a 32*32 e fuso con S4 usando l’addizione elementare. Ora, questa uscita sarà sovracampionata a 64*64 e sarà fusa con S3 e così via. Chiameremo gli output di questa fase come T2, T3, T4, T5.
Per ridurre l’effetto dell’aliasing a causa dell’upsampling viene applicata una convoluzione 3*3 su T2, T3, T4, T5 per ottenere le nostre mappe caratteristiche finali P2, P3, P4, P5 corrispondenti a C2, C3, C4, C5. Queste caratteristiche sono utilizzate per generare i punteggi finali di classificazione e regressione (bbox). I parametri per la testa possono essere condivisi e la testa separata non dà alcun beneficio aggiunto.
Questo è tutto nella teoria di FPN. Ma vedremo come FPN può essere implementato per Faster RCNN e Fast RCNN.
FPN per Faster RCNN
Faster RCNN usa la rete di proposte di regioni. RPN è usata per generare proposte di bounding box e queste proposte sono poi usate per generare previsioni finali. RPN è una piccola rete che viene implementata sulle caratteristiche estratte dall’ultimo strato (C5). Una convoluzione 3*3 è applicata a questa caratteristica estratta seguita da due strati di convoluzione simili 1*1 (uno per la classificazione e l’altro per la regressione).
RPN è adattata qui semplicemente sostituendo una mappa di caratteristiche a scala singola con FPN. Così ora la RPN è implementata per P2-P5 e non solo per C5. Per l’addestramento di RPN, si usano scatole di ancoraggio di scale multiple. Ma poiché la multiscala è ora inerente alla caratteristica estratta, non è necessario avere scatole di ancoraggio multiscala su nessuno dei livelli. Invece, una singola casella di ancoraggio di scala è assegnata ad ogni livello. La dimensione delle scatole di ancoraggio usate nel documento è {32², 64², 128², 256², 512²} per {P2, P3, P4, P5, P6}. P6 è introdotto qui in modo da poter utilizzare una scatola di ancoraggio di grandi dimensioni. P6 è sottocampionata da P5 con passo 2. Vengono usate scatole di ancoraggio con rapporti di aspetto {1:1, 1:2, 2:1}.
Queste scatole di ancoraggio sono abbinate a scatole di verità a terra e il modello viene addestrato da un capo all’altro.
FPN per Fast RCNN
L’implementazione di FPN in fast RCNN è molto semplice. Fast RCNN usa tecniche di proposta di regioni come la ricerca selettiva per generare ROI e usa il ROI pooling sulla mappa di caratteristiche a scala singola per ottenere risultati finali. Applicando FPN avremo più mappe di caratteristiche di scale diverse e abbiamo bisogno di una strategia per assegnare un dato ROI alla mappa di caratteristiche (ora abbiamo più mappe di caratteristiche, quale mappa di caratteristiche usare per un dato ROI?)
La feature map usata è calcolata usando: