¿Cuáles son las diferencias entre Convolutional1D, Convolutional2D y Convolutional3D?

10

He estado aprendiendo sobre redes neuronales convolucionales. Al mirar Kerasejemplos, me encontré con tres métodos diferentes de convolución. A saber, 1D, 2D y 3D. ¿Cuáles son las diferencias entre estas tres capas? ¿Cuáles son sus casos de uso? ¿Hay algunos enlaces o referencias para mostrar sus casos de uso?

Saurabh
fuente

Respuestas:

5

La única diferencia es la dimensionalidad del espacio de entrada. La entrada para una capa convolucional tiene la siguiente forma:

input_shape = (lote_tamaño, input_dims, canales)

  • Forma de entrada para conv1D : (batch_size, W, canales)

    Ejemplo: señal de voz estéreo de 1 segundo muestreada a 44100 Hz, forma: (tamaño de lote, 44100,2)

  • Forma de entrada para conv2D : (batch_size, (H, W), canales)

    Ejemplo: imagen RGB 32x32, forma: (tamaño de lote, 32,32,3)

  • Forma de entrada para conv3D : (tamaño de lote, (H, w, D), canales)

    Ejemplo (más complicado): video de 1 segundo de imágenes RGB de 32x32 a 24 fps, forma: (tamaño de lote, 32,32,3,24)

¿Qué es un canal?

La clave es pensar qué significa el canal para nuestros datos de entrada. La capa convolucional aplica diferentes filtros para cada canal, por lo tanto, los pesos de la capa conv tienen la siguiente forma:

(kernel_size,num_channels,num_filter_per_channels)

Ejemplo:

Capa convolucional con 12 filtros y matriz de núcleo cuadrado de tamaño 3. Esta capa aplicará 12 filtros diferentes para cada canal. En los ejemplos dados anteriormente:

  • Señal de voz estéreo de 1 segundo muestreada a 44100 Hz, kernel_size = 3

    12 x 2 = 24 filtros unidimensionales, 12 filtros para cada canal

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

    12 x 3 = 36 filtros bidimensionales, 12 filtros para cada canal

    Weights shape: (3, 3, 3, 12)
  • 1 segundo video de imágenes RGB de 32x32 a 24 fps, kernel_size = (3,3,3)

    24 x 12 = 288 filtros tridimensionales, 12 filtros para cada canal

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

Por lo tanto, decidir qué significa un canal es muy importante, ya que cada canal tiene su propio conjunto de filtros. Para los primeros ejemplos, parece sencillo decidir que las señales estéreo y las imágenes RGB son canales diferentes ... comúnmente se denominan así (canales estéreo, canales RGB) de hecho. En el ejemplo de video, es más ambiguo ... Configurar un video como una entrada 3D con la dimensión temporal como canal puede no ser la mejor opción ya que de esa manera, el orden en que vienen los cuadros temporales no importa (las salidas para los filtros de cada canal se resumen) lo que resulta en la pérdida de la dinámica temporal intrínseca de los datos de entrada. Un mejor enfoque (dependiendo de la aplicación) es procesar las imágenes RGB con convoluciones 2D en una red neuronal recurrente. Lo mismo sucede con la señal de voz,

Es importante tener en cuenta que una señal con una dimensión de entrada D puede considerarse como una señal de dimensión D + 1 con un canal, pero el espacio de función resultante puede ser menos representativo / útil :

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

Código Keras apoyando los ejemplos

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))
ignatius
fuente
8

Conv1D se usa para señales de entrada que son similares a la voz. Al emplearlos, puede encontrar patrones en la señal. Por ejemplo, tiene una señal de voz y una capa convolucional. Cada convolución atraviesa la voz para encontrar patrones significativos al emplear una función de costo.

Conv2D se usa para imágenes. Este caso de uso es muy popular. El método de convolución usado para esta capa se llama convolución sobre volumen . Esto significa que tiene una imagen bidimensional que contiene múltiples canales, RGB como ejemplo. En este caso, cada filtro convolucional debe ser un filtro tridimensional para ser convolucionado, con correlación cruzada en realidad, con la imagen para encontrar patrones apropiados en la imagen.

Conv3D generalmente se usa para videos donde tiene un marco para cada período de tiempo. Estas capas generalmente tienen más parámetros que aprender que las capas anteriores. La razón por la que los llamamos3rees que, aparte de las imágenes para cada cuadro, hay otro eje llamado tiempo que contiene valores discretos, y cada uno de ellos corresponde a un cuadro en particular.

Medios de comunicación
fuente