爲什麼卷積核通常都是奇數(1x1、3x3...)

使用小的卷積核代替大卷積核的目的有兩個,第一,降低參數數量,第二,順帶的效果是增加了網絡深度。

1,爲了方便same padding時的處理。如步長爲1時,要補充k-1的zero padding才能使輸出輸出的尺寸一致,這時候如果核大小k是偶數,則需要補充奇數的zero padding,不能平均分到feature map的兩側。

padding時對稱:保證了 padding 時,圖像的兩邊依然相 對稱 。 在卷積時,我們有時候需要卷積前後的尺寸不變。這時候我們就需要用到padding。假設圖像的大小,也就是被卷積對象的大小爲nn,卷積核大小爲kk,padding的幅度設爲(k-1)/2時,卷積後的輸出就爲(n-k+2((k-1)/2))/1+1=n,即卷積輸出爲nn,保證了卷積前後尺寸不變。但是如果k是偶數的話,(k-1)/2就不是整數了。

輸出圖像大小 = (輸入圖片大小 - 卷積核大小 + 2*padding)/ stride步長 + 1

見下圖,輸入圖像大小4x4,如果通過3x3卷積,輸出圖像大小不變,那麼(4 - 3 + x) / 1 + 1 = 4.需要padding大小爲x = 2,那麼上下左右各填0即可,

如下圖,如果採用偶數2x2卷積,那麼需要(4 - 2 + x) / 1 + 1.= 4填充爲x = 1,那麼只能在一邊添加。

2,爲了統一標準。卷積核的滑動是默認使用中心點作爲基準而進行的,而奇數核擁有這樣天然的基準。這樣每次計算完後的數放在中心位置。(其實自己定義偶數核的基準也是可以的,如使用核的左上角作爲基準。)

3,爲了更好地獲取中心信息。由於奇數核擁有天然的絕對中心點,因此在做卷積的時候能更好地獲取到中心這樣的概念信息。

保護位置信息:保證了錨點剛好在中間,方便以模塊中心爲標準進行滑動卷積,避免了位置信息發生偏移 。 在CNN中,進行卷積操作時一般會以卷積核模塊的一個位置爲基準進行滑動,這個基準通常就是卷積核模塊的中心。若卷積核爲奇數,卷積錨點很好找,自然就是卷積模塊中心,但如果卷積核是偶數,這時候就沒有辦法確定了,讓誰是錨點似乎都不怎麼好。

道生一,一生二,二生三,三生萬物

綜上,卷積核一般都把size設爲奇數,主要有以下兩個原因:

1.保證錨點(卷積核的中心)剛好在中間,方便以模塊中心爲標準進行滑動卷積。

2.保證了padding時,圖像的兩邊依然相對稱

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