[CNN] 各式各樣的卷積核

1.Dilated Convolution/ Atrous Convolution

擴張卷積也有人說是空洞卷積,原文叫做Atrous Convolution(來源於Deeplab)。思想非常簡單,隨着網絡的層數越來越多,parameters越來越多,並且maxpooling本身的限制(比如四次maxpooling,那麼理論上16x16的圖就到了1x1,空間信息全部丟失),google就提出了使用atrous convolution去控制feature map的密度

1.1 擴張卷積的過程如何理解

它可以擴大網絡的感受野,如圖下圖,stride = 1,kernel size = 3, padding =rate :
(a) 普通卷積,1-dilated convolution,卷積核的感受野爲3×3=9
(b) 擴張卷積,2-dilated convolution,卷積核的感受野爲7×7=49
(c) 擴張卷積,4-dilated convolution,卷積核的感受野爲15x15=225
f1

1.2 擴張卷積上採樣

在這裏插入圖片描述

如上圖,這是採用atrous convolution進行上採樣的思路。不過大家還是更傾向於bilinear。

1.3 擴張卷積特性

參考Rethinking Atrous Convolution for Semantic Image Segmentation的論文,擴張卷積的rate不是越大越好,文中做了實驗,當使用3x3的卷積去卷積65x65的feature map的時候,觀察擴張卷積中的weight參數,發現它隨着rate增長,周圍的weight越來越小(藍線),最中間的weight扮演着越來越重要的角色(紅線),這也就是ASPP module爲什麼有一個1x1的feature map的原因了。
在這裏插入圖片描述
上面的圖可以與第一個圖一起理解。下面是ASPP module,裏面的conv是空洞卷積組成的。
在這裏插入圖片描述

1.4 rate如何選取

我們一般直接調用ASPP module。原文中意思是,如果你的輸出分辨率是輸入的16倍的話,假設Multi Grid = (r1,r2,r3r_1, r_2, r_3) , ASPP module應該包含一個1x1的conv和rates=61218(6,12,18)的3x3 的卷積。如果你的輸出分辨率是輸入的8倍的話,rate改變爲原來2倍。

1.5 性能

性能隨着輸入輸出尺寸的不同而變化,output_stride就是輸入分辨率:輸出分辨率。在這裏插入圖片描述

1.6 缺點

看到知乎上有人說我們僅僅多次疊加 dilation rate 2 的 3 x 3 kernel 的話,則會出現這個問題,dense prediction 就不是很友好。這塊我不確定,因爲使用ASPP module的時候,輸入分辨率只有32x32(原始分辨率下采樣16倍),這個時候checkerboard的效應是否會有,我也沒試驗過。
在這裏插入圖片描述

2.Group Convolution 分組卷積

其實思想也比較簡單,類似算法裏的分治法。

爲了直觀考慮,H=64, W=64, C_IN=128, kernel size=3 ,C_OUT=256
那麼相當於(圖中紅字8應該改爲c2/8c_2/8,,不小心畫錯了,意味着把卷積核的channel分成八組)
在這裏插入圖片描述
最後把他們concatenate,這樣子就可以並行了。一個應用就是ResNext,具體細節大家可以參考 傳送門。下面講一下核心。
在這裏插入圖片描述
圖中兩個黃框等效,一定注意圖c中的channel 變換。分組卷積有ensemble的思想,同時可以減少參數量。

3. 深度可分離卷積

下圖是深度可分離卷積最常見的一張圖。在這裏插入圖片描述
圖a是標準卷積,kernel size = DK×DKD_K \times D_K,深度可分離卷積有兩個部分組成:圖b的深度卷積和圖c的1x1的卷積(pointwise convolution)。其實這個深度卷積是分組卷積的一種特例,就是卷積核的channel都是1。比如在pytorch中, 深度卷積其實就是將groups設爲in_channels,同時out_channels也設爲與in_channels相同,後面接一個1x1的conv就完了。

結合BN後一般這麼使用
在這裏插入圖片描述

4. 分組卷積和深度可分離卷積參數量計算

分組卷積和深度可分離卷積參數量計算 傳送門

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章