Come funziona l'operazione DepthConcat in "Approfondire le convoluzioni"?


12

Leggendo Approfondendo le convoluzioni, mi sono imbattuto in un livello DepthConcat , un blocco costitutivo dei moduli di avvio proposti , che combina l'output di più tensori di dimensioni variabili. Gli autori chiamano questo "filtro concatenazione". Sembra che ci sia un'implementazione per Torch , ma non capisco davvero cosa faccia. Qualcuno può spiegare con parole semplici?

Risposte:


9

Non credo che l'output del modulo di avvio abbia dimensioni diverse.

inserisci qui la descrizione dell'immagine

Per gli strati convoluzionali le persone usano spesso l'imbottitura per conservare la risoluzione spaziale.

Il livello di raggruppamento in basso a destra (cornice blu) tra gli altri livelli convoluzionali potrebbe sembrare imbarazzante. Tuttavia, a differenza dei tradizionali livelli di pooling / subsampling (riquadro rosso, falcata> 1), hanno usato un passo di 1 in quello strato di pooling . I livelli di raggruppamento Stride-1 funzionano effettivamente allo stesso modo dei livelli convoluzionali, ma con l'operazione di convoluzione sostituita dall'operazione massima.

Quindi anche la risoluzione dopo il livello di pooling rimane invariata e possiamo concatenare i livelli di pooling e convoluzionale insieme nella dimensione "profondità".

inserisci qui la descrizione dell'immagine

Come mostrato nella figura sopra dal documento, il modulo di avvio mantiene effettivamente la risoluzione spaziale.


6

Avevo in mente la stessa domanda mentre leggevi quel white paper e le risorse a cui hai fatto riferimento mi hanno aiutato a trovare un'implementazione.

Nel codice Torcia a cui hai fatto riferimento , dice:

--[[ DepthConcat ]]--
-- Concatenates the output of Convolutions along the depth dimension
-- (nOutputFrame). This is used to implement the DepthConcat layer
-- of the Going deeper with convolutions paper :

La parola "profondità" in Deep learning è un po 'ambigua. Fortunatamente questa risposta SO fornisce una certa chiarezza:

In Deep Neural Networks la profondità si riferisce a quanto è profonda la rete ma in questo contesto, la profondità viene utilizzata per il riconoscimento visivo e si traduce nella terza dimensione di un'immagine.

In questo caso hai un'immagine e la dimensione di questo input è 32x32x3 che è (larghezza, altezza, profondità). La rete neurale dovrebbe essere in grado di apprendere sulla base di questi parametri mentre la profondità si traduce nei diversi canali delle immagini di allenamento.

Quindi DepthConcat concatena i tensori lungo la dimensione della profondità che è l'ultima dimensione del tensore e in questo caso la 3a dimensione di un tensore 3D.

DepthConcat deve rendere uguali i tensori in tutte le dimensioni tranne la profondità, come dice il codice Torcia :

-- The normal Concat Module can't be used since the spatial dimensions
-- of tensors to be concatenated may have different values. To deal with
-- this, we select the largest spatial dimensions and add zero-padding
-- around the smaller dimensions.

per esempio

A = tensor of size (14, 14, 2)
B = tensor of size (16, 16, 3)
result = DepthConcat([A, B])
where result with have a height of 16, a width of 16 and a depth of 5 (2 + 3). 

inserisci qui la descrizione dell'immagine

Nel diagramma sopra, vediamo un'immagine del tensore del risultato DepthConcat, in cui l'area bianca è il riempimento zero, il rosso è il tensore A e il verde è il tensore B.

Ecco lo pseudo codice per DepthConcat in questo esempio:

  1. Guarda il tensore A e il tensore B e trova le dimensioni spaziali più grandi, che in questo caso sarebbero le dimensioni 16 e 16 dell'altezza del tensore B. Poiché il tensore A è troppo piccolo e non corrisponde alle dimensioni spaziali del Tensore B, dovrà essere imbottito.
  2. Riempi le dimensioni spaziali del tensore A con zeri aggiungendo zeri alla prima e alla seconda dimensione ottenendo la dimensione del tensore A (16, 16, 2).
  3. Concatena il tensore A imbottito con il tensore B lungo la profondità (3a) dimensione.

Spero che questo aiuti qualcun altro a pensare la stessa domanda leggendo quel white paper.


Sì. introduzione perfetta. Questo è concatenato in direzione della profondità. Non nelle direzioni spaziali.
Shamane Siriwardhana,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.