Convolutional1D、Convolutional2D、およびConvolutional3Dの違いは何ですか?


10

私はたたみ込みニューラルネットワークについて学んでいます。Keras例を見ると、3つの異なる畳み込み方法に出くわしました。つまり、1D、2D、3Dです。これらの3つのレイヤーの違いは何ですか?それらのユースケースは何ですか?使用例を示すリンクまたは参照はありますか?

回答:


5

唯一の違いは、入力空間の次元です。たたみ込み層の入力は次のような形をしています。

input_shape =(batch_size、input_dims、channels)

  • conv1Dの入力形状:(batch_size、W、channels)

    例:44100 Hzでサンプリングされた1秒のステレオ音声信号、形状:(b​​atch_size、44100,2)

  • conv2Dの入力形状:(batch_size、(H、W)、channels)

    例:32x32 RGB画像、形状:(b​​atch_size、32,32,3)

  • conv3Dの入力形状:(batch_size、(H、w、D)、channels)

    例(よりトリッキー):24 fpsでの32x32 RGBイメージの1秒のビデオ、形状:(b​​atch_size、32,32,3,24)

チャンネルとは?

重要なことは、チャネルが入力データにとって何を意味するかを考えることです。たたみ込み層はチャネルごとに異なるフィルターを適用するため、conv層の重みは次のような形になります。

(kernel_size,num_channels,num_filter_per_channels)

例:

12個のフィルターとサイズ3の正方核行列を含むたたみ込み層。この層は、各チャネルに12個の異なるフィルターを適用します。前に示した例では:

  • 44100 Hzでサンプリングされた1秒のステレオ音声信号、kernel_size = 3

    12 x 2 = 24の一次元フィルター、各チャネルに12フィルター

     Weigths shape: (3, 2, 12)
  • 32x32 RGBイメージ、kernel_size =(3,3)

    12 x 3 = 36の2次元フィルター、各チャネルに12フィルター

    Weights shape: (3, 3, 3, 12)
  • 24 fpsでの32x32 RGBイメージの1秒のビデオ、kernel_size =(3,3,3)

    24 x 12 = 288の3次元フィルター、各チャネルに12フィルター

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

したがって、各チャネルには独自のフィルタセットがあるため、チャネルの意味を決定することは非常に重要です。最初の例では、ステレオ信号とRGB画像が異なるチャネルであることを決定するのは簡単なようです...実際、それらは一般にそのように命名されています(ステレオチャネル、RGBチャネル)。ビデオの例では、あいまいです...時間軸をチャネルとして3D入力としてビデオを設定することは、時間フレームが来る順序が重要ではないため(このため、出力は各チャネルのフィルタが合計されます)、入力データの固有の時間ダイナミクスが失われます。1つのより良いアプローチ(アプリケーションによって異なります)は、リカレントニューラルネットワークで2D畳み込みを使用してRGB画像を処理することです。同じことが音声信号でも起こります

入力次元がDの信号は、チャネルが1つある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は通常、各タイムスパンのフレームがあるビデオに使用されます。これらのレイヤーには通常、以前のレイヤーよりも多くのパラメーターが学習されます。私たちがそれらを呼ぶ理由D各フレームの画像の他に、離散値を含む時間と呼ばれる別の軸があり、それらのそれぞれが特定のフレームに対応しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.