卷積神經網絡做爲深度學習的典型網絡,在圖像處理和計算機視覺等多個領域都取得了很好的效果。git
Paul-Louis Pröve在Medium上經過這篇文章快速地介紹了不一樣類型的卷積結構(Convolution)及優點。爲了簡單起見,本文僅探討二維卷積結構。github
首先,定義下卷積層的結構參數。網絡
△ 卷積核爲三、步幅爲1和帶有邊界擴充的二維卷積結構ide
卷積核大小(Kernel Size):定義了卷積操做的感覺野。在二維卷積中,一般設置爲3,即卷積核大小爲3×3。學習
步幅(Stride):定義了卷積核遍歷圖像時的步幅大小。其默認值一般設置爲1,也可將步幅設置爲2後對圖像進行下采樣,這種方式與最大池化相似。動畫
邊界擴充(Padding):定義了網絡層處理樣本邊界的方式。當卷積核大於1且不進行邊界擴充,輸出尺寸將相應縮小;當卷積核以標準方式進行邊界擴充,則輸出數據的空間尺寸將與輸入相等。ui
輸入與輸出通道(Channels):構建卷積層時需定義輸入通道I,並由此肯定輸出通道O。這樣,可算出每一個網絡層的參數量爲 I×O×K,其中K爲卷積核的參數個數。例,某個網絡層有64個大小爲3×3的卷積核,則對應K值爲 3×3 =9。編碼
空洞卷積(atrous convolutions)又名擴張卷積(dilated convolutions),向卷積層引入了一個稱爲 「擴張率(dilation rate)」的新參數,該參數定義了卷積核處理數據時各值的間距。spa
△ 卷積核爲三、擴張率爲2和無邊界擴充的二維空洞卷積blog
一個擴張率爲2的3×3卷積核,感覺野與5×5的卷積核相同,並且僅須要9個參數。你能夠把它想象成一個5×5的卷積核,每隔一行或一列刪除一行或一列。
在相同的計算條件下,空洞卷積提供了更大的感覺野。空洞卷積常常用在實時圖像分割中。當網絡層須要較大的感覺野,但計算資源有限而沒法提升卷積核數量或大小時,能夠考慮空洞卷積。
轉置卷積(transposed Convolutions)又名反捲積(deconvolution)或是分數步長卷積(fractially straced convolutions)。
反捲積(deconvolutions)這種叫法是不合適的,由於它不符合反捲積的概念。在深度學習中,反捲積確實存在,可是並不經常使用。實際上,反捲積是卷積操做的逆過程。你能夠這麼理解這個過程,將某個圖像輸入到單個卷積層,取卷積層的輸出傳遞到一個黑盒子中,這個黑盒子輸出了原始圖像。那麼能夠說,這個黑盒子完成了一個反捲積操做,也就是卷積操做的數學逆過程。
轉置卷積與真正的反捲積有點類似,由於二者產生了相同的空間分辨率。然而,這兩種卷積對輸入數據執行的實際數學運算是不一樣的。轉置卷積層只執行了常規的卷積操做,可是恢復了其空間分辨率。
△ 卷積核爲三、步幅爲2和無邊界擴充的二維卷積結構
舉個例子,假如將一張5×5大小的圖像輸入到卷積層,其中步幅爲2,卷積核爲3×3,無邊界擴充。則卷積層會輸出2×2的圖像。
若要實現其逆過程,須要相應的數學逆運算,能根據每一個輸入像素來生成對應的9個值。而後,將步幅設爲2,遍歷輸出圖像,這就是反捲積操做。
△ 卷積核爲3×三、步幅爲2和無邊界擴充的二維轉置卷積
轉置卷積和反捲積的惟一共同點在於二者輸出都爲5×5大小的圖像,不過轉置卷積執行的還是常規的卷積操做。爲了實現擴充目的,須要對輸入以某種方式進行填充。
你能夠理解成,至少在數值方面上,轉置卷積不能實現卷積操做的逆過程。
轉置卷積只是爲了重建先前的空間分辨率,執行了卷積操做。這不是卷積的數學逆過程,可是用於編碼器-解碼器結構中,效果仍然很好。這樣,轉置卷積能夠同時實現圖像的粗粒化和卷積操做,而不是經過兩個單獨過程來完成。
在可分離卷積(separable convolution)中,可將卷積核操做拆分紅多個步驟。卷積操做用y=conv(x, k)來表示,其中輸出圖像爲y,輸入圖像爲x,卷積核爲k。接着,假設k能夠由下式計算得出:k=k1.dot(k2)。這就實現了一個可分離卷積操做,由於不用k執行二維卷積操做,而是經過k1和k2分別實現兩次一維卷積來取得相同效果。
△ X、Y方向上的Sobel濾波器
Sobel算子一般被用於圖像處理中,這裏以它爲例。你能夠分別乘以矢量[1,0,-1]和[1,2,1]的轉置矢量後獲得相同的濾波器。完成這個操做,只須要6個參數,而不是二維卷積中的9個參數。
這個例子說明了什麼叫作空間可分離卷積,這種方法並不該用在深度學習中,只是用來幫你理解這種結構。
在神經網絡中,咱們一般會使用深度可分離卷積結構(depthwise separable convolution)。
這種方法在保持通道分離的前提下,接上一個深度卷積結構,便可實現空間卷積。接下來經過一個例子讓你們更好地理解。
假設有一個3×3大小的卷積層,其輸入通道爲1六、輸出通道爲32。具體爲,32個3×3大小的卷積核會遍歷16個通道中的每一個數據,從而產生16×32=512個特徵圖譜。進而經過疊加每一個輸入通道對應的特徵圖譜後融合獲得1個特徵圖譜。最後可獲得所需的32個輸出通道。
針對這個例子應用深度可分離卷積,用1個3×3大小的卷積核遍歷16通道的數據,獲得了16個特徵圖譜。在融合操做以前,接着用32個1×1大小的卷積核遍歷這16個特徵圖譜,進行相加融合。這個過程使用了16×3×3+16×32×1×1=656個參數,遠少於上面的16×32×3×3=4608個參數。
這個例子就是深度可分離卷積的具體操做,其中上面的深度乘數(depth multiplier)設爲1,這也是目前這類網絡層的通用參數。
這麼作是爲了對空間信息和深度信息進行去耦。從Xception模型的效果能夠看出,這種方法是比較有效的。因爲可以有效利用參數,所以深度可分離卷積也能夠用於移動設備中。
原文:
https://medium.com/towards-data-science/types-of-convolutions-in-deep-learning-717013397f4d
更多卷積動畫: