Stavo esaminando un po di letteratura relativa alle reti completamente convoluzionali e mi sono imbattuto nella seguente frase ,

Una rete completamente convoluzionale si ottiene sostituendo i livelli ricchi di parametri e completamente connessi nelle architetture CNN standard con livelli convoluzionali con $ 1 \ times 1 $ kernel.

Ho due domande.

  1. Cosa si intende per ricco di parametri ? Si chiama ricco di parametri perché gli strati completamente connessi trasmettono i parametri senza alcun tipo di riduzione “spaziale”?

  2. Inoltre, come funzionano i kernel $ 1 \ times 1 $ ? Il kernel “t $ 1 \ times 1 $ significa semplicemente che si sta facendo scorrere un singolo pixel sullimmagine? Sono confuso su questo.

Risposta

Reti a convoluzione completa

A La rete convoluzione completa (FCN) è una rete neurale che esegue solo operazioni di convoluzione (e sottocampionamento o sovracampionamento). Allo stesso modo, una FCN è una CNN senza livelli completamente connessi.

Reti neurali di convoluzione

La tipica rete neurale di convoluzione (CNN) non è completamente convoluzionale perché spesso contiene anche layer completamente connessi (che non eseguono loperazione di convoluzione), che sono ricchi di parametri , nel senso che hanno molti parametri (rispetto alla loro equivalente convoluzione strati), sebbene i livelli completamente connessi possano essere visualizzati anche come convoluzioni con ker nels che coprono le intere regioni di input , che è lidea principale alla base della conversione di una CNN in una FCN. Guarda questo video di Andrew Ng che spiega come convertire un livello completamente connesso in uno convoluzionale.

Un esempio di FCN

Un esempio di rete completamente convoluzionale è U-net (chiamato in questo modo per via della sua forma a U, che puoi vedere dallillustrazione sotto), che è una famosa rete utilizzata per la semantica segmentation , ovvero classifica i pixel di unimmagine in modo che i pixel che appartengono alla stessa classe (ad es. una persona) siano associati alla stessa etichetta (ad es. persona), ovvero pixel-saggio ( o denso).

inserisci qui la descrizione dellimmagine

Segmentazione semantica

Quindi, nella segmentazione semantica, vuoi associare unetichetta a ogni pixel (o piccola porzione di pixel) dellimmagine in ingresso. Ecco “unillustrazione più suggestiva di una rete neurale che esegue la segmentazione semantica.

inserisci la descrizione dellimmagine qui

Segmentazione istanze

Cè anche segmentazione istanze , dove vuoi anche differenziare diverse istanze della stessa classe (ad esempio, vuoi distinguere due persone nella stessa immagine etichettandole in modo diverso). Un esempio di una rete neurale utilizzata per la segmentazione delle istanze è la maschera R-CNN . Il post del blog Segmentation: U-Net, Mask R-CNN e Medical Applications (2020) di Rachel Draelos descrive molto bene questi due problemi e le reti.

Ecco un esempio di immagine in cui le istanze della stessa classe (cioè persona) sono state etichettate in modo diverso (arancione e blu).

inserisci qui la descrizione dellimmagine

Sia la segmentazione semantica che quella delle istanze sono dense attività di classificazione (in particolare, rientrano nella categoria della segmentazione delle immagini ), ovvero, vuoi classificare ogni pixel o molte piccole porzioni di pixel di unimmagine.

$ 1 \ times 1 $ convoluzioni

Nel diagramma U-net sopra, puoi vedere che ci sono solo convoluzioni, copia e ritaglia, max- operazioni di pooling e upsampling. Non ci sono livelli completamente connessi.

Quindi, come associamo unetichetta a ciascun pixel (o una piccola patch di p ixels) dellinput? Come eseguiamo la classificazione di ogni pixel (o patch) senza un livello finale completamente connesso?

È qui che $ 1 \ times 1 $ le operazioni di convoluzione e sovracampionamento sono utili!

Nel caso del diagramma U-net sopra (in particolare, la parte in alto a destra del diagramma, che è illustrato di seguito per chiarezza), due $ 1 \ times 1 \ times 64 $ i kernel vengono applicati al volume di input (non alle immagini!) per produrre due mappe di caratteristiche di dimensioni $ 388 \ times 388 $ . Hanno usato due kernel $ 1 \ times 1 $ perché cerano due classi nei loro esperimenti (cell e not-cell). Il post del blog citato ti dà anche lintuizione alla base, quindi dovresti leggerlo.

inserisci qui la descrizione dellimmagine

Se hai provato ad analizzare attentamente il diagramma U-net, noterai che loutput mappa hanno dimensioni spaziali (altezza e peso) diverse rispetto alle immagini di input, che hanno dimensioni $ 572 \ times 572 \ times 1 $ .

Quello “s va bene perché il nostro obiettivo generale è eseguire una classificazione densa (ovvero classificare le patch dellimmagine, dove le patch possono contenere solo un pixel ), anche se ho detto che avremmo eseguito la classificazione in termini di pixel, quindi forse ti aspettavi che gli output avessero le stesse dimensioni spaziali esatte degli input. Tuttavia, tieni presente che, in pratica, potresti anche avere le mappe di output da avere la stessa dimensione spaziale degli input: semplicemente ne ed eseguire una diversa operazione di sovracampionamento (deconvoluzione).

Come funzionano le convoluzioni $ 1 \ times 1 $ ?

A $ 1 \ times 1 $ convoluzione è solo la tipica convoluzione 2d ma con un $ 1 \ times1 $ kernel.

Come probabilmente già saprai (e se non lo sapevi, ora lo sai), se hai un $ g \ times g $ kernel applicato a un input di dimensione $ h \ times w \ times d $ , dove $ d $ è la profondità del volume di input (che, ad esempio, nel caso di immagini in scala di grigi, è $ 1 $ ), il kernel ha effettivamente la forma $ g \ times g \ times d $ , cioè la terza dimensione del kernel è uguale alla terza dimensione dellinput a cui è applicato. Questo è sempre il caso, ad eccezione delle convoluzioni 3d, ma ora stiamo parlando delle tipiche convoluzioni 2d! Vedi questa risposta per maggiori informazioni.

Quindi, nel caso in cui desideriamo applicare un $ 1 \ times 1 $ convoluzione a un input di forma $ 388 \ times 388 \ times 64 $ , dove $ 64 $ è la profondità dellinput, quindi i kernel $ 1 \ times 1 $ che dovremo usare hanno forma $ 1 \ times 1 \ times 64 $ (come ho detto sopra per lU-net). Il modo in cui riduci la profondità dellinput con $ 1 \ times 1 $ è determinato dal numero di $ 1 \ times 1 $ kernel che desideri utilizzare. Questa è esattamente la stessa cosa di qualsiasi operazione di convoluzione 2D con kernel diversi (ad esempio $ 3 \ times 3 $ ).

Nel caso del U-net, le dimensioni spaziali dellinput vengono ridotte nello stesso modo in cui vengono ridotte le dimensioni spaziali di qualsiasi input a una CNN (cioè convoluzione 2d seguita da operazioni di downsampling). La differenza principale (oltre a non utilizzare layer completamente connessi) tra U-net e altre CNN è che lU-net esegue operazioni di sovracampionamento, quindi può essere visto come un codificatore (parte sinistra) seguito da un decodificatore (parte destra) .

Commenti

  • Grazie per la tua risposta dettagliata, la apprezzo davvero!

Lascia un commento

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