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

卷積運算(Convolution operate)

這一節先以最簡單的例子介紹卷積運算,下方的例子是假設作為輸入值的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)下方的計算過程所示。

卷積類神經網路(CNN)卷積操作教學1圖(1):卷積運算1

 

接著Silding window由左向右移動1個像素,這個動作的被稱為Stride,設定值為$1$,如圖(2)黃色虛線方框即為上一步驟Silding window的位置,黃色箭頭為移動方向。Silding window移動後如紅色方框所在位置,計算方式與上一步驟相同,接下來圖(3~7)即為重複這樣的步驟,直到完成計算。

卷積類神經網路(CNN)卷積操作教學2圖(2):卷積運算2

卷積類神經網路(CNN)卷積操作教學3圖(3):卷積運算3

卷積類神經網路(CNN)卷積操作教學4圖(4):卷積運算4

卷積類神經網路(CNN)卷積操作教學5
圖(5):卷積運算5

卷積類神經網路(CNN)卷積操作教學6
圖(6):卷積運算6

 

完成卷積運算後的結果,如圖(7)右側的$4\times4$矩陣所示,亦可將這個矩陣稱為Feature map。

卷積類神經網路(CNN)卷積操作教學7
圖(7):卷積運算7

 

移動步伐(Stride)

上一節有簡單介紹過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模型的計算量下降,更重要的是可以調整各個層類神經網路的大小。

卷積類神經網路(CNN) Stride圖(8):移動步伐(Stride)

補充像素(Padding)

補充像素是我暫時給這個功能的中文翻譯,下文會以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的。

卷積類神經網路(CNN) 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)$

References
  1. Andrew Ng – Convolution Neural Networks in Coursera
  2. (paper) A guide to convolution arithmetic for deep learning

 


Andy Wang

站在巨人的肩膀上仍須戰戰兢兢!

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *