Convolutional Neural Networks(CNN) #1 Kernel, Stride, Padding
卷積神經網路(Convolutional Neural Network, CNN)為目前用來進行影像辨識最有效的特徵萃取演算法,這個方法是由學者Yann LeCun於1998年發表的論文『Gradient-Based Learning Applied to Document Recognition』所使用的方法。直至今日,已有許多物體分類(Object classification)與物體偵測(Object detection)的方法就是透過CNN建構。
本篇主要介紹CNN演算法中的卷積層運算方式以及相關屬性,其中包括移動步伐(Stride)、補充像素(Padding)和最重要的卷積核(Kernel or Filter)。範例會以2D卷積(2D convolution)講解,因為比較淺顯易懂,之後會再介紹3D卷積(3D convolution)怎麼運算。
本篇內容中卷積神經網路的功能,同步存放於Github:https://github.com/PoLun-Wang/DL_practice_convolutional_neural_networks
這一節先以最簡單的例子介紹卷積運算,下方的例子是假設作為輸入值的Feature map為$6\times6$的矩陣,Kernel$=(3\times3)$,移動步伐Stride$=1$。較複雜的屬性會在此節之後說明,其他CNN的屬性暫時先不使用,因此Padding$=0$。
我們以7張圖(請參照圖(1至7))來解釋卷積運算的流程。圖(1)的左側$6\times6$矩陣就是輸入Feature map,也可以先把它當作是欲進行卷積運算的圖片,而中間的綠框就是卷積核亦可稱之為Kernel或Filter,右側則是卷積運算後的結果。輸入Feature map與卷積核之間的符號『$*$』為卷積運算的標準表示符號。
紅色的方框圈著的部分可以被稱為滑動視窗(Sliding window),大小必須跟卷積核一致,圈到的部分數值會與卷積核相對位置的數值相乘,再將乘積加總就是卷積的運算結果,如圖(1)下方的計算過程所示。
圖(1):卷積運算1
接著Silding window由左向右移動1個像素,這個動作的被稱為Stride,設定值為$1$,如圖(2)黃色虛線方框即為上一步驟Silding window的位置,黃色箭頭為移動方向。Silding window移動後如紅色方框所在位置,計算方式與上一步驟相同,接下來圖(3~7)即為重複這樣的步驟,直到完成計算。
圖(2):卷積運算2
圖(3):卷積運算3
圖(4):卷積運算4
圖(5):卷積運算5
圖(6):卷積運算6
完成卷積運算後的結果,如圖(7)右側的$4\times4$矩陣所示,亦可將這個矩陣稱為Feature map。
圖(7):卷積運算7
上一節有簡單介紹過Stride,這一節來正式介紹Stride的功用與差異。
圖(8)中的(a)、(b)分別展示了Stride$=1$以及Stride$=2$對卷積運算結果的運作方式與其對結果產生的影響,我們可以發現圖(8)(b)的移動步伐改變為$2$的時候直接導致卷積運算完成後的Feature map比(a)少了一半。
此外,值得一提的是(b)運算過程中紅色方框會在第3次移動時超出$(6\times6)$Feature map邊界,若遇到此情況即可完成該row的計算(row-1),並可直接向下移動2格至row-3繼續卷積運算。
Stride的用途就是可以大幅度地濃縮萃取出來的Feature map,這可以使得CNN模型的計算量下降,更重要的是可以調整各個層類神經網路的大小。
圖(8):移動步伐(Stride)
補充像素是我暫時給這個功能的中文翻譯,下文會以Padding稱呼。
Padding的作法就是會在輸入Feature map的四周補上一圈像素或數值,假設Padding$=1$就如同下圖(9)左側的Feature map那樣,補上一圈藍底的像素,補上之後再進行卷積運算。
Padding補上的數值到底該給多少?以圖(9)為例,就是補入的數值為$0$,因此又稱為Zero-padding。Padding還蠻常用來避免經過多層類神經網路後Feature map嚴重縮小,或者是用來提升Feature map大小等用途。
這裡有幾個專有名詞應該要知道:
Valid convolution:意思是不用Padding的卷積層。
Same convolution:意思是經過該卷積層計算後的Feature map大小將會與計算前的大小一致,所以該層是有設置Padding的。
圖(9):補充像素(Padding)
計算公式可以參考上圖(9),其中n, p, f 的定義如下:
假設輸入Feature map為正方形,n就是為的長或寬。
p:Padding的大小
f:卷積核Kernel的大小(假設Kernel為正方形)。
s:移動步伐Stride的距離。
floor:意思是將括號內的數值無條件捨去至整數位,此運算亦常以『$\lfloor{\cdot}\rfloor$』表示。
Output feature map size$=floor(\frac{(n+2p-f)}{s}+1)$
- Andrew Ng – Convolution Neural Networks in Coursera
- (paper) A guide to convolution arithmetic for deep learning