為什么CNN中的卷積核一般都是奇數
為什么CNN中的卷積核一般都是奇奇數*奇數,沒有偶數*偶數的?
咱們經常見到的多為 3 * 3、5*5;怎么從來沒有見過 4*4,6*6 之類的卷積核?無論奇數 or 偶數,都是能夠做卷積的呀
之前學習的時候真的沒有想過這些問題,再復習時,覺得全是 Why?說明之前還是沒有搞明白
從AlexNet模型的11*11、5*5、3*3,還有VGG開始統一卷積核為3*3,再到之后的模型,都沒有用過 偶數*偶數的卷積核,說明它是有問題的,或者是沒有 奇數*奇數的方便
這一串的問題,原因有兩個:
1.保證了 錨點 剛好在中間
錨點也就是卷積核滑動時的一個參考點(相對於圖像來說,自己理解的,不保證正確,沒找到相關資料)。奇數過濾器的錨點正好在中心位置,避免了位置信息發生偏移,如果卷積核是偶數*偶數時,這時候就沒有辦法確定了錨點了。讓誰是錨點,卷積核上下左右移動之后,位置信息都會發生偏移。
2. same convolution,偶數卷積核會出現問題
說點題外話
做卷積時會出現兩種問題
1)圖像越來越小;
2)圖像邊界信息丟失,即有些圖像角落和邊界的信息發揮作用較少
所以有時候我們會在圖像的周圍填補 0 ,一來減緩圖像變小的速度,二來,保證邊界信息不丟失。甚至有時候會讓輸入輸出的大小一樣,也就是 same convolution 比如下圖的VGG模型,卷積時輸入輸出的大小是保持不變的,只有在池化層是才會縮減一半。
卷積之后的尺寸大小計算公式為:
輸入圖片大小 W×W
Filter大小 F×F
步長strides S
padding的像素數 P
輸出大小為NxN
於是我們可以得出
這里寫一下我的理解:公式中Padding 為啥要乘以 2 ,我的理解為 在周圍填 0 的話,左右(上下)兩邊都填補 0 才有意義,保證是對稱的
做same convolution,步長S=1 Padding P = (F-1)/ 2,也即是:需要在原圖邊長基礎上padding F-1個 0 (這個應該很好理解),當卷積核為偶數時,P就不能保證平均分配到卷積兩邊 。