16

當輸入層存在多個通道時,卷積運算如何進行? (例如RGB)卷積神經網絡 - 多通道

在對CNN的體系結構/實現進行了一些閱讀之後,我明白特徵映射中的每個神經元都引用由內核大小定義的圖像的N×M個像素。然後,每個像素都通過學習NxM權重集(內核/濾波器)的特徵映射進行分解,相加,並輸入到激活函數中。對於一個簡單的灰度圖像,我想象中的操作會是這樣堅持以下僞代碼:

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 

但是我不知道如何來擴展這個模型來處理多個通道。每個特徵圖需要三個獨立的權重集,每個顏色之間共享?

引用本教程的「共享權重」部分:http://deeplearning.net/tutorial/lenet.html 特徵映射中的每個神經元都引用層m-1,其中顏色是從單獨的神經元引用的。我不明白他們在這裏表達的關係。神經元是內核還是像素,爲什麼它們引用圖像的不同部分?

基於我的例子,似乎單個神經元內核對圖像中的特定區域是排他性的。爲什麼他們將RGB分量分成幾個區域?

+0

由於它屬於stats.stackexchange – jopasserat

回答

27

當輸入層存在多個通道時,卷積操作如何進行? (例如RGB)

在這種情況下,必須每輸入通道一個2D內核(a.k.a平面)。

因此,您分別執行每個卷積(2D輸入,2D核心)和,您將貢獻加在一起,從而給出最終輸出特徵映射。

請參閱滑動的這個CVPR 2014 tutorial 64由Marc'Aurelio Ranzato

enter image description here

均爲每個特徵圖需要三個單獨的權重集合,每個顏色之間共享?

如果您考慮給定的輸出特徵映射,那麼您有3個2D內核(即每個輸入通道一個內核)。每個2D內核沿着整個輸入通道(這裏是R,G或B)共享相同的權重。因此,整個卷積層是一個4維張量(nb。輸入平面×nb。輸出平面×內核寬度×內核高度)。

爲什麼他們將RGB分量分成幾個區域?

如上想到每個R,G和B通道中詳述爲具有其專用的二維內核單獨輸入平面。

+0

我正在投票關閉題目作爲題外話題,2D內核不在所有三個通道之間共享?思考conv層是1 * conv_kernel_num * kernel_width * kernel_height張量。如果conv內核不在通道間共享,我可以將conv內核解釋爲kernel_width * kernel_height * channel_num(本例中爲3)張量嗎? – user2696499