16

入力層に複数のチャネルが存在する場合、畳み込み演算はどのように実行されますか? (RGBなど)畳み込みニューラルネットワーク - 複数のチャネル

CNNのアーキテクチャ/実装について読んだ後、フィーチャマップの各ニューロンは、カーネルサイズで定義された画像のNxMピクセルを参照することを理解しています。各ピクセルは、次に、特徴マップ学習されたN×M重み付け集合(カーネル/フィルタ)によって因数分解され、合計され、活動化関数に入力される。

for i in range(0, image_width-kernel_width+1): 
    for j in range(0, image_height-kernel_height+1): 
     for x in range(0, kernel_width): 
      for y in range(0, kernel_height): 
       sum += kernel[x,y] * image[i+x,j+y] 

     feature_map[i,j] = act_func(sum) 
     sum = 0.0 

私は複数のチャネルを処理するためにこのモデルを拡張する方法を理解していないしかし:シンプルなグレースケール画像の場合、私は操作が何かは以下の擬似コードに従うだろうと想像します。各カラー間で共有される、機能マップごとに3つの別々のウェイトセットが必要ですか?別のニューロンから参照される色の特徴マップの参照層M-1でhttp://deeplearning.net/tutorial/lenet.html 各ニューロンをこのチュートリアルの「共有ウェイト」セクションを参照

。私は彼らがここで表現している関係を理解し​​ていません。ニューロンのカーネルやピクセルは何ですか?また、画像の別の部分を参照する理由は何ですか?

私の例によると、単一のニューロンカーネルは画像内の特定の領域に限定されているように見えます。なぜRGBコンポーネントを複数の領域に分割したのですか?

+0

stats.stackexchangeに属しているため、この質問を議論の対象外としています。 – jopasserat

答えて

27

入力層に複数のチャネルが存在する場合、畳み込み演算はどのように実行されますか?このような場合(例えばRGB)

あなたが(平面a.k.a)入力チャネルあたり1つの2Dカーネルを有します。

したがって、各コンボルーション(2D入力、2Dカーネル)を個別に実行し、を実行すると、最終的な出力フィーチャーマップを与える投稿が合計されます。

Marc'Aurelio Ranzatoすることにより、このCVPR 2014 tutorialのスライド64を参照してください:

enter image description here

は、各色間で共有特徴マップ、あたりに必要な3つの別々の重みセットはありますか?

出力フィーチャマップを考えてみると、3つの2Dカーネル(入力チャネルごとに1つのカーネル)があります。各2Dカーネルは、入力チャンネル全体(R、G、またはB)に沿って同じ重みを共有します。

したがって、畳み込み層全体は4Dテンソル(nb入力面x nb出力面xカーネル幅xカーネル高さ)です。

なぜRGBコンポーネントを複数の領域に分割したのですか?その専用の2Dカーネルと入力面として、それぞれR、G及びBチャネルについて考える上で詳述したように

+0

2D convカーネルは、3つのチャネルすべてで共有されていませんか?思考コンバ層は1 * conv_kernel_num * kernel_width * kernel_heightテンソルです。 convカーネルがチャネル間で共有されていない場合、kernel_width * kernel_height * channel_num(この場合は3)のテンソルとしてconvカーネルを解釈できますか? – user2696499

関連する問題