1. 程式人生 > >【圖解AI:動圖】各種型別的卷積,你認全了嗎?

【圖解AI:動圖】各種型別的卷積,你認全了嗎?

卷積(convolution)是深度學習中非常有用的計算操作,主要用於提取影象的特徵。在近幾年來深度學習快速發展的過程中,卷積從標準卷積演變出了反捲積、可分離卷積、分組卷積等各種型別,以適應於不同的場景,接下來一起來認識它們吧。

一、卷積的基本屬性
卷積核(Kernel):卷積操作的感受野,直觀理解就是一個濾波矩陣,普遍使用的卷積核大小為3×3、5×5等;
步長(Stride):卷積核遍歷特徵圖時每步移動的畫素,如步長為1則每次移動1個畫素,步長為2則每次移動2個畫素(即跳過1個畫素),以此類推;
填充(Padding):處理特徵圖邊界的方式,一般有兩種,一種是對邊界外完全不填充,只對輸入畫素執行卷積操作,這樣會使輸出特徵圖的尺寸小於輸入特徵圖尺寸;另一種是對邊界外進行填充(一般填充為0),再執行卷積操作,這樣可使輸出特徵圖的尺寸與輸入特徵圖的尺寸一致;
通道(Channel):

卷積層的通道數(層數)。
如下圖是一個卷積核(kernel)為3×3、步長(stride)為1、填充(padding)為1的二維卷積:

二、卷積的計算過程
卷積的計算過程非常簡單,當卷積核在輸入影象上掃描時,將卷積核與輸入影象中對應位置的數值逐個相乘,最後彙總求和,就得到該位置的卷積結果。不斷移動卷積核,就可算出各個位置的卷積結果。如下圖:
 
三、卷積的各種型別
卷積現在已衍生出了各種型別,包括標準卷積、反捲積、可分離卷積、分組卷積等等,下面逐一進行介紹。
1、標準卷積
(1)二維卷積(單通道卷積版本)(2D Convolution: the single channel version)


只有一個通道的卷積。
如下圖是一個卷積核(kernel)為3×3、步長(stride)為1、填充(padding)為0的卷積:
 
(2)二維卷積(多通道版本)(2D Convolution: the multi-channel version)
擁有多個通道的卷積,例如處理彩色影象時,分別對R, G, B這3個層處理的3通道卷積,如下圖:
 
再將三個通道的卷積結果進行合併(一般採用元素相加),得到卷積後的結果,如下圖:
 
(3)三維卷積(3D Convolution)
卷積有三個維度(高度、寬度、通道),沿著輸入影象的3個方向進行滑動,最後輸出三維的結果,如下圖:
 
(4)1x1卷積(1 x 1 Convolution)
當卷積核尺寸為1x1時的卷積,也即卷積核變成只有一個數字。如下圖:
 
從上圖可以看出,1x1卷積的作用在於能有效地減少維度,降低計算的複雜度。1x1卷積在GoogLeNet網路結構中廣泛使用。

2、反捲積(轉置卷積)(Deconvolution / Transposed Convolution)
卷積是對輸入影象提取出特徵(可能尺寸會變小),而所謂的“反捲積”便是進行相反的操作。但這裡說是“反捲積”並不嚴謹,因為並不會完全還原到跟輸入影象一樣,一般是還原後的尺寸與輸入影象一致,主要用於向上取樣。從數學計算上看,“反捲積”相當於是將卷積核轉換為稀疏矩陣後進行轉置計算,因此,也被稱為“轉置卷積”
如下圖,在2x2的輸入影象上應用步長為1、邊界全0填充的3x3卷積核,進行轉置卷積(反捲積)計算,向上取樣後輸出的影象大小為4x4
 
3、空洞卷積(膨脹卷積)(Dilated Convolution / Atrous Convolution)
為擴大感受野,在卷積核裡面的元素之間插入空格來“膨脹”核心,形成“空洞卷積”(或稱膨脹卷積),並用膨脹率引數L表示要擴大核心的範圍,即在核心元素之間插入L-1個空格。當L=1時,則核心元素之間沒有插入空格,變為標準卷積。
如下圖為膨脹率L=2的空洞卷積:
 
4、可分離卷積(Separable Convolutions)
(1)空間可分離卷積(Spatially Separable Convolutions)
空間可分離卷積是將卷積核分解為兩項獨立的核分別進行操作。一個3x3的卷積核分解如下圖:
 
分解後的卷積計算過程如下圖,先用3x1的卷積核作橫向掃描計算,再用1x3的卷積核作縱向掃描計算,最後得到結果。採用可分離卷積的計算量比標準卷積要少。
 
(2)深度可分離卷積(Depthwise Separable Convolutions)
深度可分離卷積由兩步組成:深度卷積和1x1卷積。
首先,在輸入層上應用深度卷積。如下圖,使用3個卷積核分別對輸入層的3個通道作卷積計算,再堆疊在一起。
 
再使用1x1的卷積(3個通道)進行計算,得到只有1個通道的結果
 
重複多次1x1的卷積操作(如下圖為128次),則最後便會得到一個深度的卷積結果。
 
完整的過程如下:
 
5、扁平卷積(Flattened convolutions)
扁平卷積是將標準卷積核拆分為3個1x1的卷積核,然後再分別對輸入層進行卷積計算。這種方式,跟前面的“空間可分離卷積”類似,如下圖:
 
6、分組卷積(Grouped Convolution)
2012年,AlexNet論文中最先提出來的概念,當時主要為了解決GPU視訊記憶體不足問題,將卷積分組後放到兩個GPU並行執行。
在分組卷積中,卷積核被分成不同的組,每組負責對相應的輸入層進行卷積計算,最後再進行合併。如下圖,卷積核被分成前後兩個組,前半部分的卷積組負責處理前半部分的輸入層,後半部分的卷積組負責處理後半部分的輸入層,最後將結果合併組合。
 
7、混洗分組卷積(Shuffled Grouped Convolution)
在分組卷積中,卷積核被分成多個組後,輸入層卷積計算的結果仍按照原先的順序進行合併組合,這就阻礙了模型在訓練期間特徵資訊在通道組之間流動,同時還削弱了特徵表示。而混洗分組卷積,便是將分組卷積後的計算結果混合交叉在一起輸出。
如下圖,在第一層分組卷積(GConv1)計算後,得到的特徵圖先進行拆組,再混合交叉,形成新的結果輸入到第二層分組卷積(GConv2)中:

歡迎關注本人的微信公眾號“大資料與人工智慧Lab”(BigdataAILab),獲取更多資訊

 

推薦相關閱讀

1、AI 實戰系列

2、大話深度學習系列

3、圖解 AI 系列

4、AI 雜談

5、大資料超詳細系列