以[3,64,64]的input為例,假設我們要得到[4,64,64]的output.以3x3卷積核為例.
常規的卷及操作如下圖所示:
參數量共計3 x 3 x 3 x 4 = 108.
深度可分離卷積可分為2個部分
- depthwise convolution
- pointwise convolution
depthwise convolution
常規卷積,卷積核是作用於所有的depth方向的. depthwise conv對不同channel用不同的卷積核做卷積
得到[3,64,64]的輸出. 此時參數共計3 x 3 x 3 = 27.
pointwise convolution
depthwise卷積沒有考慮到同一位置不同channel上的數據之間的關聯.所以我們用一個1 x 1的卷積核對depthwise得到的[3,64,64]輸出再做卷積.這里做的就是常規卷積. 得到[1,64,64]. 用4個這樣的1x1卷積核去做常規卷積. 得到輸出[4,64,64].
如下圖所示:
這一步參數量為3 x 1 x 1 x 4 = 12.
深度可分離卷積一共耗費參數量為27 + 12 = 39個.
所以可以看出同樣是得到[4,64,64]的feature map. 相比普通卷積的108個參數量,深度可分離卷積的方式大大減少了參數量.
總結一下就是:
- 現在深度方向對不同channel用不同卷積核做卷積.
- 對第一步得到的輸出用1x1的卷積核去做常規卷積.達到使用不同channel的數據的目的. 用1x1的卷積核的數量控制深度.