CNN結構演變總結(一)經典模型
- 2021 年 2 月 27 日
- 筆記
導言:
自2012年AlexNet在ImageNet比賽上獲得冠軍,卷積神經網絡逐漸取代傳統算法成為了處理計算機視覺任務的核心。
在這幾年,研究人員從提升特徵提取能力,改進回傳梯度更新效果,縮短訓練時間,可視化內部結構,減少網絡參數量,模型輕量化, 自動設計網絡結構等這些方面,對卷積神經網絡的結構有了較大的改進,逐漸研究出了AlexNet、ZFNet、VGG、NIN、GoogLeNet和Inception系列、ResNet、WRN和DenseNet等一系列經典模型,MobileNet系列、ShuffleNet系列、SqueezeNet和Xception等輕量化模型。
在本文將對這些經典模型的結構設計演變做一個總結,旨在讓讀者了解一些結構的設計原理,產生效果的原因。在面對一個具體任務時能夠準確地選擇一個合理的特徵提取網絡,而不是隨便選擇一個。在自主設計網絡時,也能根據總結的原則和經驗設計出合理的結構,避免隨心設計。
CNN結構演變總結
在這個系列將按照以下三個部分對CNN結構演變進行總結。
一、經典模型,對AlexNet、VGG、NIN、GoogLeNet和Inception系列、ResNet、WRN和DenseNet這些模型的結構設計部分進行總結。
二、輕量化模型,對MobileNet系列、ShuffleNet系列、SqueezeNet和Xception等輕量化模型總結介紹輕量化的原理,設計原則。
三、對前面經典模型、輕量化模型中一些經典設計進行總結。如1×1卷積的作用、兩種池化的應用場合、降低過擬合的方法、歸一化方法、卷積層大小尺寸的設計原則和卷積核的作用等。
註:本系列沒有對自動化結構網絡設計的模型進行總結,主要原因是模型是由算法根據具體任務自主設計而來,並非人工設計,因此並不知道其設計原理,對其總結的意義不大。
這些模型的詳細解讀,包括實驗,實際效果,完整結構,大部分都可在公眾號CV技術指南的模型解讀部分看到,少數模型的解讀將在後續更新。相關模型的原論文以及所有模型解讀的總結pdf,可關注公眾號 CV技術指南 回復「CNN模型」獲取。
LeNet
第一個卷積神經網絡出現在1989年,這個網絡沒有名字,對讀者來說這個結構沒什麼新穎的,但其作為第一個卷積神經網絡,值得致敬。其結構由卷積層和全連接層組成,激活函數使用tanh函數,損失函數使用的是均方誤差MSE,使用了反向傳播算法和隨機梯度下降。值得一提的是,在這篇論文中還出現了權重共享和特徵圖像的概念。
LeNet是同作者LeCun在另一篇論文中提出的,用於手寫數字識別。其結構圖如下:
AlexNet(2012)
AlexNet是第一個深度神經網絡,結構圖如下:
其創新之處有五處:
1. 使用ReLU作為激活函數。
2. 提出在全連接層使用Dropout避免過擬合。註:當BN提出後,Dropout就被BN替代了。
3. 由於GPU顯存太小,使用了兩個GPU,做法是在通道上分組。這算不上創新,之所以在這裡寫上這一點,是因為它是ShuffleNet_v1使用分組卷積想法的來源。關於ShuffleNet_v1在公眾號CV技術指南的模型解讀中有詳細解讀。
4. 使用局部響應歸一化(Local Response Normalization –LRN),在生物中存在側抑制現象,即被激活的神經元會抑制周圍的神經元。在這裡的目的是讓局部響應值大的變得相對更大,並抑制其它響應值相對比較小的卷積核。例如,某特徵在這一個卷積核中響應值比較大,則在其它相鄰卷積核中響應值會被抑制,這樣一來卷積核之間的相關性會變小。LRN結合ReLU,使得模型提高了一點多個百分點。
註:LRN後自Batch-Normalization出現後就再也沒用過了,我印象中只有FstCN 2015年(使用分解時空卷積的行為識別)中用了一次,因此讀者對這個可以不用去了解。
5. 使用重疊池化。作者認為使用重疊池化會提升特徵的豐富性,且相對來說會更難過擬合。註:使用重疊池化會出現棋盤格效應。
NiN(2014)
創新之處有二:
1. 使用MLPconv,後來在其它模型中就演變成了1×1卷積。
2. 提出全局平均池化代替全連接層。
這樣做的好處有以下幾點:
1. 相比於使用全連接層,參數量極大地減少,相對來說沒那麼容易過擬合。
2. 使得feature map直接映射到類別信息,這樣更符合卷積網絡的結構。
3. 全局平均池化綜合了空間所有的信息,使得對輸入的空間轉換更魯棒。
也有一個缺點:必須固定輸入大小。
VGG(2014)
創新之處有二:
1. 使用了多個小尺寸的卷積核堆疊來代替一個大的卷積核,這樣參數更少,而感受野卻是一樣的。全部使用了3X3的尺寸,池化都是2×2,步長都為2。
2. 去掉了LRN。作者發現它效果不明顯。
GoogLeNet(2014)
GoogLeNet也稱為Inception_V1, 其後續還有三個改進版,合稱Inception系列,對這個系列的解讀在模型解讀部分有詳細解讀,這裡只介紹新穎之處。
創新之處有二:
1. 提出Inception Module。大家發現網絡越深越寬的效果越好,然而這樣會帶來以下幾個問題:
1) 參數量,計算量越來越大,在有限內存和算力的設備上,其應用也就越難以落地。
2) 對於一些數據集較少的場景,太大的模型反而容易過擬合,但模型太小則泛化能力不夠。
3) 容易出現梯度消失的問題。
解決這些問題比較直觀的方法就是採用稀疏連接來代替全連接層,但很明顯,由於底層是通過矩陣計算的,稀疏連接在參數量上減少了,但並沒有減少計算量。因此設計了如下第一個圖的結構。
使用上面這個結構又會出現一個問題,由於使用了在通道上拼接的方式,導致通道數很大,因此使用NiN中1×1卷積的方式降低通道數。最終決定使用如第二個圖所示的結構
2. 使用了輔助分類函數,如下圖所示,有3個softmax輸出位置,有兩個是在中間位置,這樣方便在中間層輸出分類,同時通過加權(中間0.3)的方式加到最終的分類結果中。作者認為這樣能給模型增加反向傳播的梯度信號,緩解了梯度消失問題,在一定程度上也有正則化的效果。在推理階段,這兩個softmax將會去除。
註:後面的InceptionV2-V3論文中會發現這玩意沒用,但讀者可以在自己的方向上嘗試一下,也許會有用呢。
完整的結構圖如下:
Inception_v2和Inception_v3
這兩者是出現在同一篇論文中,作者提出了很多改進技術,使用了其中一部分的稱為V2, 全部都使用的是V3。
創新之處有四:
1. 提出分解卷積。如將5×5卷積核分解為1×5和5×1的非對稱卷積堆疊。
最終還衍生出了下面這種混合式的模塊。(個人感覺沒必要這麼干,意義不大)
2. 使用了批歸一化Batch-Normalization (BN), 關於BN,完整的介紹出現在另一篇論文中,公眾號CV技術指南中也有對其完整的解讀,感興趣的讀者可在模型解讀中的《Inception系列之Inception_v2》中看到。註:當BN提出後,Dropout就被BN替代了。
3. 提出一種高效降低特徵圖大小的方法。
在降低特徵圖尺寸時,若按下圖這兩種方式設計,第一種會出現瓶頸,違背模型設計原則。(關於這些設計原則將會總結在《CNN結構演變總結》的第三篇中),第二種方式則參數量巨大。
因此就出現了下面這種
4. 提出標籤平滑化。如果模型在訓練過程中學習使得全部概率值給ground truth標籤,或者使得最大的Logit輸出值與其他的值差別儘可能地大,直觀來說就是模型預測的時候更自信,這樣將會出現過擬合,不能保證泛化能力。因此標籤平滑化很有必要。
平滑化的方式是使得標籤值小於1,而其它值大於0,如5個類,使得標籤值為{0.05,0.05,0.8,0.05,0.05}。具體是由狄拉克函數函數實現的。感興趣的可看該論文的解讀。
完整的結構如下:
Inception_v4, Inception_ResNet_v1和v2
在Inception系列的第四篇論文里,提出了三種結構,這三種結構沒什麼創新點,作者在論文中也沒有介紹為什麼這麼設計。
如果一定要說有創新點的話,主要就是在上面Inception_v2-v3的基礎上,第一種Inception_v4在Inception模塊上改了一些參數,提出了幾個不同參數的Inception block,與v2和v3沒有本質上的改變。第二第三種結構在Inception模塊中加入了殘差連接,同樣是沒有本質上的改變,且比較少見有用這三種作為特徵提取網絡的,因此這裡不多介紹。感興趣的看該論文的解讀,裏面有完整的結構。
ResNet(2015)
一般而言,網絡越深越寬會有更好的特徵提取能力,但當網絡達到一定層數後,隨着層數的增加反而導致準確率下降,網絡收斂速度更慢。
針對這個問題,ResNet的創新之處有二:
1. 提出shortcut connection, 右邊直接連接的部分稱為identity mapping。該方法靈感來源於Highway Networks。
註:剛開始認為殘差連接可以緩解梯度消失問題,但在後續的論文中經過實驗證明它似乎並不能。
2. 提出瓶頸模塊( bottleneck block )。這個瓶頸模塊在MobileNet v2中有所應用並調整。
使用瓶頸模塊構建出了ResNet34, ResNet50, ResNet101, ResNet152等深層神經網絡。
WRN(2017)
使用identity mapping的殘差塊使我們可以訓練一個非常深的網絡,但與此同時,殘差塊也是殘差網絡的一個缺點。當梯度流通過整個網絡時,網絡不會強迫梯度流過權重層(這會導致訓練中學習不到什麼)。所以很有可能少量的塊能夠學習有用的表達,或者很多的塊分享非常少的信息,對最終結果影響很小。
創新之處有二:
1. 提出加寬殘差塊的方式,這種方式可以更加高效地提高殘差網絡性能,而不是增加網絡深度,使用這種方式構建了wider residual networks (WRN)。
2. 提出在殘差塊中使用Dropout。前人的研究中,dropout被插入到了殘差網絡中的identity連接上,這導致性能下降。而WRN提出dropout插入到卷積層之間的方式使性能有所提升。
DenseNet(2018)
傳統的卷積網絡在一個前向過程中每層只有一個連接,ResNet增加了殘差連接從而增加了信息從一層到下一層的流動。FractalNets重複組合幾個有不同卷積塊數量的並行層序列,增加名義上的深度,卻保持着網絡前向傳播短的路徑。相類似的操作還有Stochastic depth和Highway Networks等。
這些模型都顯示一個共有的特徵,縮短前面層與後面層的路徑,其主要的目的都是為了增加不同層之間的信息流動。
基於信息流動的方式,DenseNet創新之處有一:
1. 傳統L層的網絡僅有L個連接,在DenseNet中使用了L(L+1)/2個連接。這樣做有幾個明顯的優點:避免了梯度消失問題,加強了特徵傳播,實現特徵復用(feature reuse),以及實質上減少了參數量。
使用這個密集連接構建了Dense Block
總結:本文對比較經典的一些模型在結構上的創新之處進行了總結,讓讀者對目前特徵提取網絡有一個比較全面的了解,通過對創新之處的總結概括,相信讀者對於CNN這種特徵提取網絡的作用機制有了清晰的認識。
在公眾號CV技術指南 中回復「CNN模型」可獲得以上模型的詳細解讀pdf以及論文原文。
在下一篇將對目前的輕量化網絡進行總結,在下篇中讀者將了解到,目前降低神經網絡計算量的方式有哪些,設計這樣的方式的原理何在。
在第三篇中我們將對經典模型和輕量化模型中涉及到的一些方法進行總結,介紹原理作用,總結在這些模型論文中提到的網絡設計原則,讓讀者可以根據具體任務自主設計網絡或選擇合適的網絡,避免設計時胡亂選擇參數或隨意選擇網絡。
其他技術總結內容:
CNN可視化技術總結(一)-特徵圖可視化
CNN可視化技術總結(二)–卷積核可視化
CNN可視化技術總結(三)–類可視化
CNN可視化技術總結(四)–可視化工具與項目
池化技術總結
NMS總結
本文來源於公眾號《CV技術指南》的技術總結部分,更多相關技術總結請掃描文末二維碼關注公眾號。