為什麼深度學習中的模型基本用3x3和5x5的卷積(奇數),而不是2x2和4x4的卷積(偶數)?

時間 2021-05-12 06:27:04

1樓:汪不二

CNN卷積核的概念來自於影象處理的卷積濾波器,不過傳統的濾波器是人工設計的,CNN卷機核是learn得到的。

傳統卷積濾波器裡,卷機核中心對應影象畫素中心位置。考慮到左右對稱性,卷機核長度一般為:1+2*int,故為奇數。CNN採用奇數卷機核,多數也和這個習慣有關。

2樓:發發

簡單來講, 就是

to keep the padding on each size the same.

補充:有人說是為了方便確定中心畫素?扯淡.請把這個問題放在NN領域裡考慮, 不要硬套傳統影象處理的邏輯.

你想一下, 影象物體輪廓有幾個是規則的? 另外我們影象怎強為啥還要做隨機旋轉,裁剪呢?

影象分類和物體畫素定位無關, 錨個中心點幹麼呢?

3樓:Mario

我的理解範圍內並沒有什麼好的解釋,可能是因為奇數對稱吧,而且大家都這麼用了,就也這樣使用。

不過之前在做乙個pix2pix專案的時候,卷積核用的是4*4,我改成3*3,效果不好 。

看到說same卷積的時候,比如輸入是n*n,stride是1,kernel是k,padding是p,輸出也為n,那麼n-k+2p+1=n的話,k應該是奇數。

4樓:Magina507

答案在傳統方法裡。

cnn的本質是乙個影象特徵提取器,優勢在於提取什麼特徵是網路自己學的。最簡單的影象特徵是邊緣,判斷是不是邊緣的方法也很簡單,看這個畫素左右/上下的畫素值是否很大就可以了,比如這樣乙個3×3的kernel,[[1,0,-1],[1,0,-1],[1,0,-1]],就可以檢測到豎著的邊緣。

你想要檢測橫著的就轉置,想要斜著的就加權,覺得只考慮周圍乙個畫素點不魯棒,那可以考慮周圍兩個畫素點的,5x5的kernel就好了。

除了邊緣,其他特徵,比如角點也是這樣來做的,只是裡面的數字會不一樣,代表不同的特徵。不變的是kernel要是奇數的,因為kernel的輸出其實是他對應的中心點是否為該kernel想要檢測的特徵的score。

因此cnn設計成了奇數的,它也是在提特徵,區別在於它提什麼特徵是自己學的,而傳統的是人工設計的。

5樓:

中心點顯然是沒有道理的。反正要生成乙個新的向量,錨點在哪又有什麼關係呢。

能提出這個問題是極好的,以我的水平我也實在想不出特殊的理由。

神經網路使用時,基本是不會大改網路結構的,因為提出者一定經過了大量的實驗才得到了這樣的結果。

但你如果真的感興趣,不要人云亦云,不如自己動手做實驗。有乙個回答貼出了相關的研究,我覺得這才是最有力的。

6樓:

因為奇數大小卷積核的剛好能對齊。

比如3x3卷積核的(1,1)與畫素對齊。

如果你用偶數大小的,那麼你是把你的卷積核向左上偏、向右上偏、向左下偏還是向右下偏移乙個畫素?這種情況想想就很蛋疼。正常人不做讓他蛋疼的事,除非給錢。

另外,由於偏移不一致,導致padding影象邊緣的時候,也是偏的;實現起來更蛋疼了,要給更多的錢才行。

7樓:學而時習

卷積輸入輸出大小以一維為例:y=(x-k+2p)/s+1,如果希望大小不變,在常見的s=1時,需要p=(k-1)/2,則k為偶數不能整除

還有就是卷積核在滑動時需要有個輸出與核對齊的位置,奇數有軸心,偶數……還是個不能整除的問題

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

8樓:周定之

其實吧現在用的更多的是1x1和3x3,5x5和7x7偶爾會用,但用的比較少。用size較小的卷積核而不是大的卷積核原因很簡單,為了減少引數。

我曾今在思考padding層的時候也思考過你的這個問題,為什麼用奇數層而非偶數層。剛開始學習時,我以為輸出的特徵圖與卷積核的size和stride都有關係,其實到了後來你會發現特徵圖的size只與conv的stride有關,使用padding就可以做到這一點。這個時候你可以把卷積核在輸入層上的移動簡單的看作是卷積核中心的1x1卷積核在輸入層上移動。

卷積核所cover的輸入層的面積看作這個1x1卷積為中心點的四邊1/2size長的邊長所cover的面積。而你使用偶數層的卷積核便不存在這個中心點。

總之,核心思想還是卷積核在input上的移動實際上是其中心點在input上的移動,而不是看成其四邊在input上的移動。

作為一名還沒入門的cv學習者,語言表述上還不是很清楚,但我自己大概就是這麼理解的。

9樓:康康

kernel size也有偶數的,效果也不差。

請看hekaiming老師14年的一篇工作(CVPR 2015)https://

arxiv.org/abs/1412.1710比如說,文章裡乙個結論是,把網路的某兩層3x3換成4個2x2層,參數量不增加,精度還會提公升。

10樓:呂衝

在 stride 為 1 的情況下,連續兩層3x3的卷積與一層 5x5的卷積具有相同的感受野,連續兩層2x2 的卷積與一層 3x3 的卷積具有相同感受野,一層 2x2 的卷積加上一層3x3 的卷積與一層4x4 的卷積具有相同的感受野。

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

兩層 3x3 的卷積的引數數量為3x3x2=18,一層 5x5 的卷積的引數數量為5x5=25。使用兩層3x3的卷積代替一層5x5的卷積引數數量減少了 7。

兩層2x2 的卷積的引數數量為2x2x2=8,一層3x3 的卷積的引數數量為3x3=9。使用兩層2x2 的卷積替代一層3x3 的卷積引數數量只減少了 1。

一層2x2 的卷積加上一層3x3 的卷積的引數數量為2x2+3x3=13,一層4x4的卷積的引數數量為4x4=16。使用一層2x2 的卷積加上一層3x3替代一層 4x4 的卷積引數數量減少了 3.

從減少引數數量的角度來講,第一種方案優於後面兩種方案。

另外,使用2x2 的卷積想要獲得較大的感受野,需要更多的網路層次,比如想要獲得 5x5 的感受野,可以使用兩層3x3的卷積,如果使用2x2 的卷積則需要四層。越深的網路越容易梯度消失,越難訓練,使用 2x2 的卷積會在一定程度上增加網路訓練的難度。

11樓:劉冬煜

第一,same卷積的padding的時候,左右、上下分別能pad相同列數或行數的0。

第二,奇數邊長卷積核在實驗中的表現比偶數好。網上大多數解釋都跟「中心點」有關,但我覺得沒什麼道理,因為解空間是包含奇數的,比如下述兩個邊緣濾波:

1 1 1

1 -8 1

1 1 1

和1 1 1 0

1 -8 1 0

1 1 1 0

0 0 0 0

作用是一樣的。但解空間被放大,可能也會產生問題。

12樓:

卷積基本上是可以看作是對每個畫素點做 k x k x c --> 1 的對映,然後得到新的影象的操作。奇數的卷積核有「中心」,用這個中心對準每個畫素做卷積你可以得到乙個對稱的操作。偶數卷積核沒有,因此你得到的對映會有畫素偏移。

考慮一下這個場景,如果你使用偶數維度的卷積核,那你要怎麼做 same padding?

深度學習中模型訓練的通用流程是怎樣的?

妞妞 簡單的說一下通用的流程,當然訓練不同的模型,可能會多加一些處理。第一步,資料預處理,獲取資料後,需要對資料進行篩選,分訓練集 測試集以及驗證集等 第二步,將資料輸入到神經網路 這裡可以根據資料多少構建合適的神經網路,防止出現過擬合和欠擬合 即每個神經元的輸入值加權求和再輸入到啟用函式,得到輸出...

深度學習裡面訓練模型的時候,為什麼新增正則項它的超引數都是自己調的?

走在邊沿上 一般,乙個引數之所以成為超引數,要麼是因為關於它的任何資訊都不能被訓練資料集表示,要麼是因為一旦讓它成為trainable的,我們總會得到乙個trivial的值。從第乙個角度看,正則化的本質是限制目標函式空間的大小,保證目標函式的smoothness。資料集本身顯然並不會包含關於它的任何...

在深度學習模型的訓練中,其效能不斷變化,應當將何時效能,看作為「最終的」模型效能?

hui dust 機器學習模型中都有訓練集 驗證集 測試集 訓練集資料餵給模型訓練,每輪epoch在驗證集上驗證指標,多輪訓練時取驗證集指標最好的情況作為最終的模型效能。 Fain 一般來說,當多次降低學習率,驗證集的loss依然不下降,則取最近一次下降的模型引數。損失不下降說明模型已經到達了不錯的...