Quais são as diferenças entre Convolutional1D, Convolutional2D e Convolutional3D?

10

Eu tenho aprendido sobre redes neurais convolucionais. Ao examinar Kerasexemplos, deparei-me com três métodos diferentes de convolução. Ou seja, 1D, 2D e 3D. Quais são as diferenças entre essas três camadas? Quais são os casos de uso deles? Existem alguns links ou referências para mostrar seus casos de uso?

Saurabh
fonte

Respostas:

5

A única diferença é a dimensionalidade do espaço de entrada. A entrada para uma camada convolucional tem a seguinte forma:

input_shape = (lote_size, input_dims, canais)

  • Formato de entrada para conv1D : (batch_size, W, canais)

    Exemplo: sinal de voz estéreo de 1 segundo amostrado em 44100 Hz, formato: (batch_size, 44100,2)

  • Formato de entrada para conv2D : (batch_size, (H, W), canais)

    Exemplo: imagem RGB de 32x32, formato: (batch_size, 32,32,3)

  • Formato de entrada para conv3D : (batch_size, (H, w, D), canais)

    Exemplo (mais complicado): 1 segundo vídeo de imagens RGB de 32x32 a 24 qps, formato: (batch_size, 32,32,3,24)

O que é um canal?

O importante é pensar no que o canal significa para nossos dados de entrada. A camada convolucional aplica filtros diferentes para cada canal, portanto, os pesos da camada conv têm o seguinte formato:

(kernel_size,num_channels,num_filter_per_channels)

Exemplo:

Camada convolucional com 12 filtros e matriz quadrada de núcleo de tamanho 3. Esta camada aplicará 12 filtros diferentes para cada canal. Nos exemplos dados anteriormente:

  • 1 segundo sinal de voz estéreo amostrado em 44100 Hz, kernel_size = 3

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

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

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

    Weights shape: (3, 3, 3, 12)
  • 1 segundo vídeo de imagens RGB 32x32 a 24 qps, kernel_size = (3,3,3)

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

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

Portanto, decidir o que significa um canal é muito importante, pois cada canal tem seu próprio conjunto de filtros. Para os primeiros exemplos, parece simples decidir que os sinais estéreo e as imagens RGB são canais diferentes ... eles são geralmente chamados assim (canais estéreo, canais RGB). No exemplo de vídeo, é mais ambíguo ... Definir um vídeo como uma entrada 3D com a dimensão temporal como canal pode não ser a melhor opção, pois, dessa forma, a ordem na qual os quadros temporais aparecem não importa (as saídas para os filtros de cada canal são somados), resultando na perda da dinâmica temporal intrínseca dos dados de entrada. Uma abordagem melhor (dependendo da aplicação) é processar as imagens RGB com convoluções 2D em uma rede neural recorrente. O mesmo acontece com o sinal de voz,

É importante observar que um sinal com uma dimensão de entrada D pode ser considerado como um sinal da dimensão D + 1 com um canal, mas o espaço de recurso resultante pode ser menos representativo / útil :

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

Código Keras suportando os exemplos

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))
Inácio
fonte
8

Conv1D é usado para sinais de entrada semelhantes à voz. Ao empregá-los, você pode encontrar padrões através do sinal. Por exemplo, você tem um sinal de voz e uma camada convolucional. Cada convolução percorre a voz para encontrar padrões significativos empregando uma função de custo.

Conv2D é usado para imagens. Este caso de uso é muito popular. O método de convolução usado para essa camada é chamado de convolução sobre volume . Isso significa que você tem uma imagem bidimensional que contém vários canais, RGB como exemplo. Nesse caso, cada filtro convolucional deve ser um filtro tridimensional a ser convolvido, na verdade correlacionado com a imagem para encontrar padrões apropriados na imagem.

3D

meios de comunicação
fonte