全連線層與卷積層替換的原因

2021-10-09 06:28:09 字數 2390 閱讀 2345

參考:

out = (in+2p-k)/s+1 「same」

考慮下圖:

現有一feature map:7x7x512,當其與相同尺寸的核進行卷積時就相當於矩陣的點積,結果是乙個值。所以 當filter1設定為7x7x512時,結果實際就是512個點積的和,而4096個7x7x512進行卷積,就可得到1x4096。

為啥要用卷積代替全卷積(全連線層)呢?

以下摘自:

為什麼要將全連線層變為卷積層?

對於傳統的 cnn(即包含全連線層),乙個確定的網路其輸入影象的大小是固定的,比如 caffenet 的輸入須是 227227。但對於更大的影象,在檢測時就需要裁剪出很多 227227 的小影象分別送入 cnn 網路中,使得檢測任務十分耗時且資料容易出錯。所以針對較大的影象想要改變這種被固定輸入的cnn。

為何cnn網路需要輸入固定大小影象呢?

主要原因是因為全連線層的存在,當全連線層與前一層連線時,全連線層的權重是不變的,所以輸入的大小不能變。而卷積層可以讓卷積網路在一張更大的輸入上滑動,得到每個區域的輸出,這樣就突破了輸入尺寸的限制,就獲得了目標的位置資訊。可以高效地對測試影象做滑動窗式的**,可以高效的檢測多個目標和給出位置資訊。

當把全連線層替換成了卷積層後,就可以不限制輸入影象的大小,一次性輸入網路即可獲得一張所有位置的檢測目標概率,形成一幅 heat map。

為何卷積層和全連線層可以相互轉化?

讓我們來回顧一下全連線網路和卷積網路

基礎知識:

全連線神經網路之所以不太適合影象識別任務,主要有以下幾個方面的問題:

引數數量太多,擴充套件性差。考慮乙個輸入10001000畫素的(一百萬畫素,現在已經不能算大圖了),輸入層有10001000=100萬節點。假設第乙個隱藏層有100個節點(這個數量並不多),那麼僅這一層就有(1000*1000+1)*100=1億引數。我們看到影象只擴大一點,引數數量就會多很多,因此它的擴充套件性很差。

**-沒有利用畫素之間的位置資訊。**對於影象識別任務來說,每個畫素和其周圍畫素的聯絡是比較緊密的,和離得很遠的畫素的聯絡可能就很小了。如果乙個神經元和上一層所有神經元相連,那麼就相當於對於乙個畫素來說,把影象的所有畫素都等同看待,這不符合前面的假設。當我們完成每個連線權重的學習之後,最終可能會發現,有大量的權重,它們的值都是很小的(也就是這些連線其實無關緊要)。努力學習大量並不重要的權重,這樣的學習必將是非常低效的。

**網路層數限制。**我們知道網路層數越多其表達能力越強,但是通過梯度下降方法訓練深度全連線神經網路很困難,因為全連線神經網路的梯度很難傳遞超過3層。因此,我們不可能得到乙個很深的全連線神經網路,也就限制了它的能力。

那麼,卷積神經網路又是怎樣解決這個問題的呢?主要有三個思路:

區域性連線這個是最容易想到的,每個神經元不再和上一層的所有神經元相連,而只和一小部分神經元相連。這樣就減少了很多引數。

權值共享一組連線可以共享同乙個權重,而不是每個連線有乙個不同的權重,這樣又減少了很多引數。

下取樣可以使用pooling來減少每層的樣本數,進一步減少引數數量,同時還可以提公升模型的魯棒性。

乙個卷積神經網路由若干卷積層、pooling層、全連線層組成。

所以我們得以得到結論,全連線層和卷積層實際上是可以相互轉換的。

舉個例子:

最後乙個卷積層的輸出為 77512,即每個 feature map 的大小為 77,共有 512 個 feature map,然後通過乙個全連線層得到了 11*4096 的輸出,如下圖所示:

全連線層如何變成卷積層

將全連線層轉換為卷積層的關鍵就在卷積核引數的設定上,仍然用上面的例子:

1.設定卷積核大小為 77,通道數(厚度)為 512;

說白了其實就是和上一層的 feature map 尺寸一模一樣

2.設定 4096 組卷積核;

卷積核組數與全連線輸出個數相同

當這組卷積核作用於輸入的 feature map 上時,就能得到乙個 11*4096 的輸出。

由於卷積核大小和輸入的 feaure map 一模一樣,就保證了轉換後的卷積層的運算結果和之前的全連線層是一樣的。

全連線層與卷積層(總結)

全連線鞥 卷積層全連線層是使用影象的全域性資訊,全連線層的權重是固定的,要求輸入的feature map的大小也有要求,所以網路開始輸入影象的大小要固定。全連線層的每乙個節點都有上一層的所有節點相連。卷積層取區域性特徵,不需要固定輸入的大小,因為它是對區域性區域進行視窗滑動。例如 feature m...

全連線層如何轉化為全卷積層

全連線網路其實和卷積網路是等價的,全連線層就可以轉化維卷積層,只不過這個卷積層比較特殊,稱之為全卷積層,下面舉乙個簡單的例子來說明全連線層如何轉化為全卷積層。由圖一所示,我們假定要將乙個2 2 1的feature map通過全連線層輸出乙個4維向量,圖中的矩陣x便是這2 2 1的feature ma...

將全連線轉為卷積層的原因,這篇聽懂了!

所以我們得以得到結論,全連線層和卷積層實際上是可以相互轉換的。舉個例子 最後乙個卷積層的輸出為 7 7 512,即每個 feature map 的大小為 7 7,共有 512 個 feature map,然後通過乙個全連線層得到了 1 1 4096 的輸出,如下圖所示 將全連線層轉換為卷積層的關鍵就...