depthwise卷積與pointwise卷積,合起來被稱作 depthwise separable convolution, 該結構和常規的卷積操作類似,可以用來提取特徵,但相比於常規的卷積操作,其參數量和運算成本比較低,所以在一些輕量級網路中會碰到如此結構。
常規卷積操作
對於一張5x5畫素,三通道彩色輸入,經過3x3x4卷積核的卷積層,最終會輸出4個feature map。細節可能會先看下**後再bb這個。
depthwise separable convolution是將乙個完整的卷積運算分解為兩步執行,即depthwise 與 pointwise
depthwise不同於常規的操作,depthwise convolution的乙個卷積核只負責乙個通道,乙個通道只被乙個卷積核卷積。
同樣是對一張5x5畫素,3通道彩色輸入,dc首先先經過第一次卷積運算,dw完全是在二維平面上內進行,卷積核的數量與上一層的通道數相同。所以乙個三通道的影象經過運算後生成了3個feature map。這裡其實最終的維數應該是3x3,因為每乙個卷積都會作用一次,所以最終是3x3維度。
pointwise convolution運算則是非常常規的運算,它的卷積核的尺寸為1x1xm,m為需要得到的最終feature map數量,所以這裡的卷積運算會將上一步的map在深度方向上進行加權組合,生成新的feature map,總共為m維度。操作方法就是先concate,然後再用1x1的卷積形成1維的。也可以用1x1去先卷積,然後將不同feature map進行add。因為1x1傾向於降維,所以強項與第一種,看**再bb。
參數量變換:
普通:3x3x3x4=108
3x3是卷積核尺寸,3是輸入通道數目,4是輸出卷積核的個數。
可分離:
dw:3x3x3x1
這裡卷積核個數其實只設定為1。會形成3張feature map
pw:1x1x3x4
1x1為卷積核的尺寸,3為上一層feature map的數量,4為最終需要的維度。其實這裡我們也得到了4維的feature map。
total: 27+12=39
參考
為什麼有時Depthwise 卷積比正常卷積更耗時
首先,caffe 原先的gpu實現 group convolution 很糟糕,用for迴圈每次算乙個卷積,速度極慢。其次,cudnn7.0之後直接支援了group convolution,但本人實測,速度比github上幾個直接寫cuda kernel計算的depthwise convolutio...
迴圈卷積與線性卷積
迴圈卷積 針對的是兩個長度都為n的序列,對兩個序列做fft,然後再做ifft得到的結果就是迴圈卷積,結果的長度也是n。直接計算步驟 序列a與序列b,長度都是n,新的序列c 1 把b倒過來。翻轉 2 把b向右平移乙個元素。最右側的元素補到左邊。3 計算此時a和b對應元素的積的和。將其加到c的末尾。4 ...
膨脹卷積的缺點 卷積 反卷積與膨脹卷積
卷積 多 1 的對映 本質 在對輸入做9 1的對映關係時,保持了輸出相對於input中的位置性關係 對核矩陣做以下變形 卷積核的滑動步驟變成了卷積核矩陣的擴增 卷積的矩陣乘法變成以下形式 核矩陣重排,輸入featuremap變形為向量 反卷積 1 多 的對映 deconvlution transpo...