Quali sono le differenze tra Convolutional1D, Convolutional2D e Convolutional3D?


10

Ho imparato a conoscere le reti neurali convoluzionali. Guardando Kerasesempi, mi sono imbattuto in tre diversi metodi di convoluzione. Vale a dire, 1D, 2D e 3D. Quali sono le differenze tra questi tre strati? Quali sono i loro casi d'uso? Ci sono alcuni link o riferimenti per mostrare i loro casi d'uso?

Risposte:


5

L'unica differenza è la dimensionalità dello spazio di input. L'input per un livello convoluzionale ha la forma seguente:

input_shape = (batch_size, input_dims, canali)

  • Forma di input per conv1D : (batch_size, W, canali)

    Esempio: 1 secondo segnale vocale stereo campionato a 44100 Hz, forma: (batch_size, 44100,2)

  • Forma di input per conv2D : (batch_size, (H, W), canali)

    Esempio: immagine RGB 32x32, forma: (batch_size, 32,32,3)

  • Forma di input per conv3D : (batch_size, (H, w, D), canali)

    Esempio (più complicato): 1 secondo video di immagini RGB 32x32 a 24 fps, forma: (batch_size, 32,32,3,24)

Che cos'è un canale?

La cosa fondamentale è pensare a cosa significa il canale per i nostri dati di input. Lo strato convoluzionale applica filtri diversi per ciascun canale, quindi i pesi dello strato conv hanno la seguente forma:

(kernel_size,num_channels,num_filter_per_channels)

Esempio:

Livello convoluzionale con 12 filtri e matrice quadrata del kernel della dimensione di 3. Questo livello applicherà 12 filtri diversi per ciascun canale. Negli esempi forniti in precedenza:

  • 1 secondo segnale vocale stereo campionato a 44100 Hz, kernel_size = 3

    12 x 2 = 24 filtri monodimensionali, 12 filtri per ciascun canale

     Weigths shape: (3, 2, 12)
  • Immagine RGB 32x32, kernel_size = (3,3)

    12 x 3 = 36 filtri bidimensionali, 12 filtri per ciascun canale

    Weights shape: (3, 3, 3, 12)
  • 1 secondo video di immagini RGB 32x32 a 24 fps, kernel_size = (3,3,3)

    24 x 12 = 288 filtri tridimensionali, 12 filtri per ciascun canale

    Weights shape: (3, 3, 3, 24, 12)

Pertanto, decidere cosa significa un canale è molto importante, poiché ogni canale ha il proprio set di filtri. Per i primi esempi, sembra semplice decidere che i segnali stereo e le immagini RGB sono canali diversi ... sono comunemente chiamati così (canali stereo, canali RGB). Nell'esempio video, è più ambiguo ... L'impostazione di un video come input 3D con la dimensione temporale come canale potrebbe non essere l'opzione migliore poiché in questo modo l'ordine in cui arrivano i frame temporali non ha importanza (le uscite per i filtri di ciascun canale sono riassunti) con conseguente perdita della dinamica temporale intrinseca dei dati di input. Un approccio migliore (a seconda dell'applicazione) è quello di elaborare le immagini RGB con convoluzioni 2D in una rete neurale ricorrente. Lo stesso succede con il segnale vocale,

È importante notare che un segnale con una dimensione di ingresso D può essere considerato come un segnale di dimensione D + 1 con un canale, ma lo spazio caratteristica risultante può essere meno rappresentativo / utile :

 (44100,2) --> expand_dimension(axis=-1)--> ((44100,2),1)

Codice di Keras che supporta gli esempi

from keras import Input, Conv1D, Conv2D, Conv3D
#1D
in_ = Input(shape=(44100,2))
layer = Conv1D(filters=12,kernel_size=3)
out_ = layer(in_)
print("Weights shape: {}".format(layer.get_weights()[0].shape))

#2D
in_ = Input(shape=(32,32,3))
layer = Conv2D(filters=12,kernel_size=3)
out_ = layer(in_)
print("Weights shape: {}".format(layer.get_weights()[0].shape))

#3D
in_ = Input(shape=(32,32,3,24))
layer = Conv3D(filters=12,kernel_size=3)
out_ = layer(in_)
print("Weights shape: {}".format(layer.get_weights()[0].shape))

8

Conv1D viene utilizzato per segnali di ingresso simili alla voce. Impiegandoli è possibile trovare modelli attraverso il segnale. Ad esempio, hai un segnale vocale e un livello convoluzionale. Ogni convoluzione attraversa la voce per trovare modelli significativi impiegando una funzione di costo.

Conv2D viene utilizzato per le immagini. Questo caso d'uso è molto popolare. Il metodo di convoluzione utilizzato per questo livello è chiamato convoluzione su volume . Ciò significa che hai un'immagine bidimensionale che contiene più canali, ad esempio RGB. In questo caso, ogni filtro convoluzionale dovrebbe essere un filtro tridimensionale per essere contorto, in realtà correlato in modo incrociato, con l'immagine per trovare schemi appropriati attraverso l'immagine.

Conv3D viene solitamente utilizzato per i video in cui è presente un frame per ogni intervallo di tempo. Questi livelli di solito hanno più parametri da imparare rispetto ai livelli precedenti. Il motivo per cui li chiamiamo è che oltre alle immagini per ciascun fotogramma, esiste un altro asse chiamato tempo contenente valori discreti e ognuno di essi corrisponde a un fotogramma particolare.3D

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.