Quelles sont les différences entre Convolutional1D, Convolutional2D et Convolutional3D?

10

J'ai appris sur les réseaux de neurones convolutionnels. En regardant des Kerasexemples, je suis tombé sur trois méthodes de convolution différentes. À savoir, 1D, 2D et 3D. Quelles sont les différences entre ces trois couches? Quels sont leurs cas d'utilisation? Existe-t-il des liens ou des références pour montrer leurs cas d'utilisation?

Saurabh
la source

Réponses:

5

La seule différence est la dimensionnalité de l'espace d'entrée. L'entrée pour une couche convolutionnelle a la forme suivante:

input_shape = (batch_size, input_dims, canaux)

  • Forme d'entrée pour conv1D : (batch_size, W, canaux)

    Exemple: 1 seconde de signal vocal stéréo échantillonné à 44100 Hz, forme: (batch_size, 44100,2)

  • Forme d'entrée pour conv2D : (batch_size, (H, W), canaux)

    Exemple: image RVB 32x32, forme: (batch_size, 32,32,3)

  • Forme d'entrée pour conv3D : (batch_size, (H, w, D), canaux)

    Exemple (plus délicat): vidéo d'une seconde d'images RVB 32x32 à 24 ips, forme: (batch_size, 32,32,3,24)

Qu'est-ce qu'une chaîne?

L'essentiel est de réfléchir à ce que le canal signifie pour nos données d'entrée. La couche convolutionnelle applique des filtres différents pour chaque canal, ainsi, les poids de la couche conv ont la forme suivante:

(kernel_size,num_channels,num_filter_per_channels)

Exemple:

Couche convolutionnelle avec 12 filtres et matrice à noyau carré de taille 3. Cette couche appliquera 12 filtres différents pour chaque canal. Dans les exemples donnés précédemment:

  • 1 seconde signal vocal stéréo échantillonné à 44100 Hz, kernel_size = 3

    12 x 2 = 24 filtres unidimensionnels, 12 filtres pour chaque canal

     Weigths shape: (3, 2, 12)
  • Image RVB 32x32, kernel_size = (3,3)

    12 x 3 = 36 filtres bidimensionnels, 12 filtres pour chaque canal

    Weights shape: (3, 3, 3, 12)
  • 1 seconde vidéo d'images RVB 32x32 à 24 ips, kernel_size = (3,3,3)

    24 x 12 = 288 filtres tridimensionnels, 12 filtres pour chaque canal

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

Il est donc très important de décider ce que signifie un canal, car chaque canal a son propre ensemble de filtres. Pour les premiers exemples, il semble simple de décider que les signaux stéréo et les images RVB sont des canaux différents ... ils sont communément appelés ainsi (canaux stéréo, canaux RVB). Dans l'exemple vidéo, c'est plus ambigu ... Définir une vidéo comme une entrée 3D avec la dimension temporelle comme canal peut ne pas être la meilleure option car de cette façon, l'ordre dans lequel les images temporelles arrivent n'a pas d'importance (les sorties pour les filtres de chaque canal se résument) entraînant une perte de la dynamique temporelle intrinsèque des données d'entrée. Une meilleure approche (selon l'application) consiste à traiter les images RVB avec des convolutions 2D dans un réseau neuronal récurrent. La même chose se produit avec le signal vocal,

Il est important de noter qu'un signal avec une dimension d'entrée D peut être considéré comme un signal de dimension D + 1 avec un canal, mais l'espace caractéristique résultant peut être moins représentatif / utile :

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

Code Keras supportant les exemples

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))
ignace
la source
8

Conv1D est utilisé pour les signaux d'entrée similaires à la voix. En les utilisant, vous pouvez trouver des modèles à travers le signal. Par exemple, vous avez un signal vocal et vous avez une couche convolutionnelle. Chaque convolution traverse la voix pour trouver des modèles significatifs en utilisant une fonction de coût.

Conv2D est utilisé pour les images. Ce cas d'utilisation est très populaire. La méthode de convolution utilisée pour cette couche est appelée convolution sur volume . Cela signifie que vous avez une image bidimensionnelle qui contient plusieurs canaux, RVB à titre d'exemple. Dans ce cas, chaque filtre convolutionnel doit être un filtre tridimensionnel à convolutionner, en corrélation croisée en fait, avec l'image pour trouver des motifs appropriés à travers l'image.

Conv3D est généralement utilisé pour les vidéos où vous avez un cadre pour chaque intervalle de temps. Ces couches ont généralement plus de paramètres à apprendre que les couches précédentes. La raison pour laquelle nous les appelons est que, à part les images pour chaque image, il existe un autre axe appelé temps contenant des valeurs discrètes, et chacune d'elles correspond à une image particulière.3

Médias
la source