Convolutional1D, Convolutional2D 및 Convolutional3D의 차이점은 무엇입니까?


10

Convolutional Neural Networks에 대해 배웠습니다. Keras예제를 볼 때 세 가지 다른 회선 방법을 발견했습니다. 즉, 1D, 2D 및 3D입니다. 이 세 계층의 차이점은 무엇입니까? 그들의 사용 사례는 무엇입니까? 유스 케이스를 보여주는 링크 또는 참조가 있습니까?

답변:


5

유일한 차이점은 입력 공간의 차원입니다. 컨볼 루션 레이어의 입력은 다음과 같은 모양을 갖습니다.

input_shape = (일괄 크기, 입력 _ 차원, 채널)

  • conv1D의 입력 형태 : (batch_size, W, channels)

    예 : 44100Hz로 샘플링 된 1 초 스테레오 음성 신호, 모양 : (batch_size, 44100,2)

  • conv2D의 입력 형태 : (batch_size, (H, W), channels)

    예 : 32x32 RGB 이미지, 모양 : (batch_size, 32,32,3)

  • conv3D의 입력 형태 : (batch_size, (H, w, D), channels)

    예 (더 까다로운) : 24fps에서 32x32 RGB 이미지의 1 초 비디오, 모양 : (batch_size, 32,32,3,24)

채널이 무엇인가요?

중요한 것은 채널이 입력 데이터에 어떤 의미를 갖는지 생각하는 것입니다. 컨볼 루션 레이어는 각 채널마다 다른 필터를 적용하므로 컨버젼 레이어의 가중치는 다음과 같은 모양을 갖습니다.

(kernel_size,num_channels,num_filter_per_channels)

예:

12 개의 필터와 3의 크기의 정사각형 커널 매트릭스가있는 컨볼 루션 레이어이 레이어는 각 채널에 12 개의 서로 다른 필터를 적용합니다. 이전에 제공된 예에서 :

  • 44100Hz에서 샘플링 된 1 초 스테레오 음성 신호, kernel_size = 3

    12 x 2 = 24 개의 1 차원 필터, 각 채널당 12 개의 필터

     Weigths shape: (3, 2, 12)
  • 32x32 RGB 이미지, kernel_size = (3,3)

    12 x 3 = 36 개의 2 차원 필터, 각 채널당 12 개의 필터

    Weights shape: (3, 3, 3, 12)
  • 24fps에서 32x32 RGB 이미지의 1 초 비디오, kernel_size = (3,3,3)

    24 x 12 = 288 개의 3 차원 필터, 각 채널당 12 개의 필터

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

따라서 각 채널마다 고유 한 필터 세트가 있으므로 채널의 의미를 결정하는 것이 매우 중요합니다. 첫 번째 예제의 경우 스테레오 신호와 RGB 이미지가 다른 채널인지 결정하는 것이 간단 해 보입니다. 비디오 예제에서는 더 모호합니다 ... 시간 차원을 채널로하여 3D 입력으로 비디오를 설정하는 것은 시간 프레임이 나오는 순서가 중요하지 않기 때문에 최선의 옵션이 아닐 수 있습니다. 각 채널의 필터를 합산하여 입력 데이터의 고유 시간적 역학을 잃습니다. (응용 프로그램에 따라) 한 가지 더 좋은 방법은 반복 신경망에서 2D 컨벌루션으로 RGB 이미지를 처리하는 것입니다. 음성 신호에서도 마찬가지입니다.

입력 차원 D를 갖는 신호는 하나의 채널을 가진 D + 1 차원의 신호로 간주 될 수 있지만, 결과적인 특징 공간은 덜 대표적이거나 유용 하지 않을 수 있습니다 .

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

예제를 지원하는 Keras 코드

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 는 음성과 유사한 입력 신호에 사용됩니다. 그것들을 사용하면 신호에서 패턴을 찾을 수 있습니다. 예를 들어 음성 신호가 있고 회선 레이어가 있습니다. 각 회선은 비용 함수를 사용하여 의미있는 패턴을 찾기 위해 음성을 탐색합니다.

Conv2D 는 이미지에 사용됩니다. 이 사용 사례는 매우 인기가 있습니다. 이 레이어에 사용되는 컨볼 루션 방법 을 볼륨에 대한 컨볼 루션 이라고 합니다. 이것은 다중 채널을 포함하는 2 차원 이미지 (RGB)를 의미합니다. 이 경우 각 컨볼 루션 필터는 이미지에서 적절한 패턴을 찾기 위해 이미지와 실제로 상호 연관되어있는 3 차원 필터 여야합니다.

Conv3D 는 일반적으로 각 기간에 대한 프레임이있는 비디오에 사용됩니다. 이러한 레이어는 일반적으로 이전 레이어보다 더 많은 매개 변수를 학습해야합니다. 우리가 이것을 라고 부르는 이유는 각 프레임에 대한 이미지 외에, 불연속 값을 포함하는 시간 이라는 또 다른 축이 있고 각각이 특정 프레임에 해당하기 때문입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.