20

Stavo dando un'occhiata alla rete neurale convolutional da CS231n Convolutional Neural Networks for Visual Recognition. Nella rete neurale convettiva, i neuroni sono disposti in 3 dimensioni (height, width, depth). Ho problemi con lo depth della CNN. Non riesco a visualizzare quello che è.Qual è la profondità di una rete neurale convoluzionale?

Nel collegamento hanno detto The CONV layer's parameters consist of a set of learnable filters. Every filter is small spatially (along width and height), but extends through the full depth of the input volume.

Ad esempio, guarda questa immagine. Scusa se l'immagine è troppo schifosa. crappy picture

Posso cogliere l'idea di togliere una piccola area dall'immagine, quindi confrontarla con i "Filtri". Quindi i filtri saranno raccolte di piccole immagini? Inoltre hanno detto We will connect each neuron to only a local region of the input volume. The spatial extent of this connectivity is a hyperparameter called the receptive field of the neuron. Quindi il campo recettivo ha la stessa dimensione dei filtri? Anche quale sarà la profondità qui? E cosa significhiamo usando la profondità di una CNN?

Quindi, la mia domanda è principalmente, se prendo un'immagine avente dimensione [32*32*3] (Diciamo che ho 50000 di queste immagini, rendendo l'insieme di dati [50000*32*32*3]), che cosa devo scegliere come sua profondità e Cosa significherebbe dalla profondità. Inoltre quale sarà la dimensione dei filtri?

Inoltre sarà molto utile se qualcuno può fornire qualche collegamento che dia intuizione a questo.

EDIT: Quindi, in una parte del tutorial (ad esempio parte del mondo reale), si dice The Krizhevsky et al. architecture that won the ImageNet challenge in 2012 accepted images of size [227x227x3]. On the first Convolutional Layer, it used neurons with receptive field size F=11, stride S=4 and no zero padding P=0. Since (227 - 11)/4 + 1 = 55, and since the Conv layer had a depth of K=96, the Conv layer output volume had size [55x55x96].

Qui vediamo la profondità è di 96. Quindi, è la profondità qualcosa che ho scelto arbitrariamente? o qualcosa che computo? Anche nell'esempio sopra (Krizhevsky et al) avevano 96 profondità. Quindi cosa significa con le sue 96 profondità? Anche il tutorial ha dichiarato Every filter is small spatially (along width and height), but extends through the full depth of the input volume.

Quindi questo significa che la profondità sarà così? Se è così allora posso assumere Depth = Number of Filters? enter image description here

risposta

4

in profondo Reti Neurali la profondità si riferisce a quanto è profonda la rete è, ma in questo contesto, la profondità viene utilizzato per il riconoscimento visivo e traduce al 3 dimensione di un'immagine.

In questo caso si dispone di un'immagine e la dimensione di questo input è 32x32x3 che è (width, height, depth). La rete neurale dovrebbe essere in grado di apprendere in base a questi parametri poiché la profondità si traduce nei diversi canali delle immagini di allenamento.

UPDATE:

in ogni strato della vostra CNN impara regolarità su immagini di addestramento. Nei primissimi strati, le regolarità sono curve e spigoli, quindi quando si approfondiscono i livelli si inizia a imparare livelli più alti di regolarità come colori, forme, oggetti ecc. Questa è l'idea di base, ma ci sono molti dettagli tecnici. Prima di proseguire dare a questo un colpo: http://www.datarobot.com/blog/a-primer-on-deep-learning/

UPDATE 2:

Dai un'occhiata alla prima figura nel link che hai fornito. Dice 'In questo esempio, il livello di input rosso contiene l'immagine, quindi la sua larghezza e altezza sarebbero le dimensioni dell'immagine e la profondità sarebbe 3 (canali rosso, verde, blu).' Significa che un neurone di ConvNet trasforma l'immagine di input organizzando i suoi neuroni in tre dimeonsioni.

Come risposta alla tua domanda, la profondità corrisponde ai diversi canali di colore di un'immagine.

Inoltre, circa la profondità del filtro. Il tutorial lo afferma.

Ogni filtro è piccolo spazialmente (lungo la larghezza e l'altezza), ma si estende attraverso la profondità completa del volume di ingresso.

che sostanzialmente significa che un filtro è una parte più piccola di un'immagine che si sposta nella profondità dell'immagine per apprendere le regolarità nell'immagine.

UPDATE 3:

Per l'esempio del mondo reale Ho appena dato un'occhiata al foglio originale e dice questo: Il primo strato convoluzionale filtra l'immagine 224 × 224 × 3 di ingresso con 96 gherigli di dimensioni 11 × 11 × 3 con un passo di 4 pixel.

Nel tutorial indica la profondità come canale, ma nel mondo reale è possibile progettare qualsiasi dimensione desiderata. Dopo tutto quello che è il vostro disegno

Il tutorial ha lo scopo di dare un assaggio di come ConvNets funzionano in teoria, ma se io disegno un ConvNet nessuno mi può fermare proponendo uno con una profondità diversa.

Ha senso?

+1

puoi elaborare un po '? Sto cercando di cogliere l'idea di base. –

+0

Scusate ma non riuscivo ancora a capire quale sarebbe stata la profondità e i filtri della CNN. Il link che hai fornito assomiglia a un'astrazione. Voglio capire i dettagli tecnici. Sarebbe molto utile se puoi andare al link che ho fornito e dare un'occhiata. Sono nuovo di questo quindi potrei perdere alcuni punti ovvi. –

+0

Spero che questo sia più chiaro ora. –

0

La profondità della rete è il numero di livelli nella rete. Nella carta Krizhevsky, la profondità è di 9 livelli (si tratta di un problema di fencepost con come vengono contati i livelli?). Architecutre of the Krizhevsky et al CNN

3

Non sono sicuro del motivo per cui questo è cosparso così pesantemente. Ho anche avuto difficoltà a capirlo all'inizio, e pochissimi fuori da Andrej Karpathy (grazie a d00d) lo hanno spiegato. Sebbene, nella sua riscrittura (http://cs231n.github.io/convolutional-networks/), calcoli la profondità del volume di output utilizzando un esempio diverso rispetto all'animazione.

Inizia leggendo la sezione intitolata 'esempi NumPy'

Qui, passiamo attraverso iterativo.

In questo caso abbiamo un 11x11x4. (Motivo per cui si parte con 4 è una specie di particolare, come sarebbe più facile da afferrare con una profondità di 3)

davvero prestare attenzione a questa linea:

Una colonna di profondità (o una fibra) a posizione (x, y) sarebbero le attivazioni X [x, y ,:].

Una slice di profondità, o equivalentemente una mappa di attivazione alla profondità d sarebbero le attivazioni X [:,:, d].

V[0,0,0] = np.sum(X[:5,:5,:] * W0) + b0

V e il volume di uscita. Lo zero'th index v [0] è la tua colonna - in questo caso V[0] = 0 questa è la prima colonna del tuo volume di output. V[1] = 0 questa è la prima riga del volume di output. V[3]= 0 è la profondità. Questo è il primo livello di output.

Ora, ecco dove le persone si confondono (almeno l'ho fatto). La profondità di input non ha assolutamente nulla a che fare con la profondità di output. La profondità di input ha solo il controllo della profondità del filtro. W nell'esempio di Andrej.

A parte: molte persone si chiedono perché 3 è la profondità di input standard. Per le immagini a colori, questo sarà sempre 3 per immagini semplici.

np.sum(X[:5,:5,:] * W0) + b0 (convoluzione 1)

Qui, stiamo calcolando elementwise tra un vettore di pesatura W0 che è 5x5x4. 5x5 è una scelta arbitraria. 4 è la profondità dal momento che dobbiamo abbinare la nostra profondità di input. Il vettore di peso è il tuo filtro, kernel, campo ricettivo o qualunque nome offuscato la gente decida di chiamarlo lungo la strada.

se si arriva a questo da uno sfondo non python, questo è forse il motivo per cui c'è più confusione poiché la notazione per l'affettatura degli array non è intuitiva. Il calcolo è un prodotto punto della prima dimensione di convoluzione (5x5x4) dell'immagine con il vettore di peso. L'output è un singolo valore scalare che prende la posizione della prima matrice di output del filtro. Immagina una matrice 4 x 4 che rappresenti il ​​prodotto di somma di ciascuna di queste operazioni di convoluzione attraverso l'intero input. Ora impilarli per ciascun filtro. Questo ti darà il tuo volume di output. Nell'articolo di Andrej, inizia a muoversi lungo l'asse x. L'asse y rimane lo stesso.

Ecco un esempio di come dovrebbe apparire V[:,:,0] in termini di convoluzione. Ricordate qui, il terzo valore del nostro indice è la profondità del vostro livello di uscita

[result of convolution 1, result of convolution 2, ..., ...] [..., ..., ..., ..., ...] [..., ..., ..., ..., ...] [..., ..., ..., result of convolution n]

L'animazione è la cosa migliore per la comprensione di questo, ma Andrej ha deciso di scambiarlo con un esempio che non corrisponde al calcolo sopra.

Mi ci è voluto un po '. In parte perché Numpy non indicizza il modo in cui fa Andrej nel suo esempio, almeno non ci ho giocato. Inoltre, ci sono alcune ipotesi che l'operazione di somma del prodotto sia chiara. Questa è la chiave per capire come viene creato il tuo livello di output, cosa rappresenta ciascun valore e qual è la profondità.

Speriamo che questo aiuti!

0

La profondità è il numero di filtri che guardano l'immagine. Supponiamo che il tuo contributo sia l'immagine RGB. Quindi ha 3 canali e la profondità è 3. Quindi devi applicare 5 filtri. Ora ricorda che ogni filtro sta guardando tutti e 3 i canali dell'immagine. Quindi ciascun filtro produrrà una mappa delle caratteristiche. Quindi in generale 5 mappe di caratteristiche.

1

La profondità dello strato CONV è il numero di filtri che sta utilizzando. La profondità di un filtro è uguale alla profondità dell'immagine che sta usando come input.

Ad esempio: supponiamo di utilizzare un'immagine di 227 * 227 * 3. Supponiamo ora di utilizzare un filtro di dimensioni 11 * 11 (dimensione spaziale). Questo quadrato 11 * 11 verrà fatto scorrere lungo l'intera immagine per produrre una singola matrice bidimensionale come risposta. Ma per farlo, deve coprire ogni aspetto all'interno dell'area 11 * 11. Quindi la profondità del filtro sarà la profondità dell'immagine = 3. Supponiamo ora di avere 96 filtri di questo tipo ciascuno producendo una risposta diversa. Questa sarà la profondità del livello Convolutional. È semplicemente il numero di filtri usati.

2

Poiché il volume di ingresso quando si esegue un problema di classificazione delle immagini è N x N x 3. All'inizio non è difficile immaginare cosa significherà la profondità - solo il numero di canali - Red, Green, Blue. Ok, quindi il significato per il primo livello è chiaro. Ma per quanto riguarda i prossimi? Ecco come cerco di visualizzare l'idea.

  1. Su ogni livello applichiamo un set di filtri che convogliano attorno all'input. Immaginiamo che attualmente siamo al primo livello e circoliamo attorno a un volume V della dimensione N x N x 3. Come @Semih Yagcioglu ha menzionato all'inizio stiamo cercando alcune caratteristiche approssimative: curve, bordi ecc ... Diciamo che applichiamo N filtri di uguale dimensione (3x3) con falcata 1. Quindi ognuno di questi filtri sta cercando un diverso curva o spigolo durante la convoluzione intorno a V. Naturalmente, il filtro ha la stessa profondità, vogliamo fornire l'intera informazione non solo la rappresentazione in scala di grigi.

  2. Ora, se i filtri M cercheranno M diverse curve o spigoli. E ciascuno di questi filtri produrrà una mappa delle caratteristiche costituita da scalari (il significato dello scalare è il filtro che dice: la probabilità di avere questa curva qui è X%). Quando convolviamo con lo stesso filtro attorno al volume otteniamo questa mappa di scalari che ci dice dove esattamente abbiamo visto la curva.

  3. Quindi viene fornito l'impilamento della mappa. Immagina di impilare come la seguente cosa. Abbiamo informazioni su dove ogni filtro ha rilevato una determinata curva. Bello, poi quando li impiliamo otteniamo informazioni su quali curve/spigoli sono disponibili in ogni piccola parte del nostro volume di input. E questo è l'output del nostro primo strato convoluzionale.

  4. È facile cogliere l'idea alla base della non-linearità tenendo conto dello 3. Quando applichiamo la funzione ReLU su alcune feature map, diciamo: Rimuovi tutte le probabilità negative per curve o spigoli in questa posizione. E questo ha sicuramente senso.

  5. Quindi l'input per il livello successivo sarà un volume $ V $ $ che trasporta informazioni su curve e spigoli diversi in diverse posizioni spaziali (Ricordare: Ogni livello Trasporta informazioni su 1 curva o bordo).

  6. Ciò significa che il livello successivo sarà in grado di estrarre informazioni su forme più sofisticate combinando queste curve e bordi. Per combinarli, di nuovo, i filtri dovrebbero avere la stessa profondità del volume di input.
  7. Occasionalmente applichiamo il Pooling. Il significato è esattamente quello di ridurre il volume. Da quando usiamo strides = 1, di solito guardiamo un pixel (neurone) troppe volte per la stessa caratteristica.

Spero che questo abbia senso. Guarda i fantastici grafici forniti dal famoso corso CS231 per verificare come viene calcolata esattamente la probabilità per ciascuna caratteristica in una determinata posizione.

+0

Quindi, correggimi se sbaglio. Se ho capito bene, il numero di filtri su ogni livello è determinato arbitrariamente. Più filtri applichi, più gradi di libertà hanno il livello e quindi migliora la sua capacità di riconoscere le forme complesse. Naturalmente, più non è sempre il migliore, in quanto si dovrebbe quindi essere cauti nel sovraffollare la rete. – CatOsMandros

0

La prima cosa che dovete notare è

receptive field of a neuron is 3D 

cioè se il campo recettivo è 5x5 il neurone sarà collegato ad 5x5x (profondità di ingresso) il numero di punti.Quindi qualunque sia la tua profondità di input, uno strato di neuroni svilupperà solo 1 livello di output.

Each neuron is connected to whole depth in receptive field

Ora, la prossima cosa da notare è

depth of output layer = depth of conv. layer 

cioè Il volume di uscita è indipendente dal volume di ingresso, e dipende solo dai filtri numerici (profondità). Questo dovrebbe essere abbastanza ovvio dal punto precedente.

Si noti che il numero di filtri (profondità del livello cnn) è un parametro iper. Puoi prenderlo come vuoi, indipendentemente dalla profondità dell'immagine.