卷積神經網絡從lenet到DPN發展歷程

先發一張圖(不全),以後再補


一,LeNet5

1998 Yann LeCun LeNet5


最早的卷積網絡,已經有了卷積層,池化層和全連接層。

二,AlexNet

2012,ImageNet Classification with DeepConvolutional Neural Networks

ImageNet Top5錯誤率:16.4%,而兩年前非深度學習的方法的最好錯誤率是28.2%

AlexNet總體結構和LeNet相似,但是有極大改進:

·        由五層卷積和三層全連接組成,輸入圖像爲三通道224x224大小,網絡規模遠大於LeNet

·        使用了ReLU激活函數

·        使用了Dropout,可以作爲正則項防止過擬合,提升模型魯棒性

·        一些很好的訓練技巧,包括數據增廣、學習率策略、weight decay

  • AlexNet使用3GB顯存的GTX 580顯卡,所以如上圖所示將模型分爲兩部分放到了兩塊顯卡上並行運算。雖然在當時這僅僅是單塊顯卡資源有限時的做法,但是這種做法會減小參數數量,加快計算速度。(group convolution)對以後網絡的加速方向提供了一種方法。如shufflenet,resnext都採用了這種group convolution的方式。

三,VGG

2014,Very deep convolutionalnetworks for large-scale image recognition

在AlexNet之後,另一個提升很大的網絡是VGG系列,ImageNet上Top5錯誤率減小到7.3%。

具體結構:

主要改進:採取更深的網絡結構,以尺寸爲3x3的小卷積核來代替大的卷積核。拋棄了

Alexnet中5x5與11x11的卷積核。這樣做的好處是讓參數數量更少,速度更快,更能防止過擬合。舉個例子來說:如果輸入爲256x256x3的圖像,第一層要輸出256x256x64特徵圖,如果以3x3的卷積尺寸進行卷積則參數數量爲(3x3x3+1)x64=1792,而如果以11x11的卷積尺寸進行卷積的話,參數數量爲)(3x11x11+1)x64=23296,增加了13倍。

 

 

四,GoogLeNet

Inception v1(GoogLeNet):2015,Going deeper with convolutions

ImageNet Top5錯誤率6.7%

Vgg讓網絡更深,GoogLeNet不僅深而且寬。GoogLeNet 加入了inception的模塊如下(其實就是多個並行的卷積操作)。


1.     inception v1(第一個版本)。如果單獨5x5的卷積核,參數數量會很大,但是引入1x1的卷積核來對特徵圖降維(特徵圖的厚度)會大大減小參數的數量(後續的很多卷積神經網絡都採用了1x1的卷積尺寸),例如輸入256x256x64,輸出256x256x128,如果單獨採用5x5的卷積核則參數數量爲(64x5x5+1)x128=204928,如果加上1x1的卷積操作則可以有中間過渡過程,輸入256x256x64,過渡256x256x16,輸出256x256x128,參數數量爲(64x1x1+1)x16+(16x5x5+1)x128=52368,差不多隻有25.6%的參數數量。

 

2.     inception v2

一方面了加入了BN層(規範化層),使每一層的輸出都規範化到一個N(0, 1)的高斯分佈; 另外一方面學習VGG用2個3x3的conv替代inception模塊中的5x5,既降低了參數數量,也加速計算;


 

3.     inception v3

v3一個最重要的改進是分解(Factorization),將7x7分解成兩個一維的卷積(1x7,7x1),3x3也是一樣(1x3,3x1),這樣的好處,既可以加速計算(多餘的計算能力可以用來加深網絡),又可以將1個conv拆成2個conv,使得網絡深度進一步增加,增加了網絡的非線性,還有值得注意的地方是網絡輸入從224x224變爲了299x299,更加精細設計了35x35/17x17/8x8的模塊。

4.     inception v4

v4研究了Inception模塊結合Residual Connection能不能有改進?發現ResNet的結構可以極大地加速訓練,同時性能也有提升,得到一個Inception-ResNet v2網絡,同時還設計了一個更深更優化的Inceptionv4模型,能達到與Inception-ResNet v2相媲美的性能。

5.     Xception

2016,Xception: Deep Learning withDepthwise Separable Convolutions

標準的卷積方式如下圖:

Xception則把group convolution的思想發揮到了極致,每一個通道單獨分爲一組。叫做deepwise separable convolution,如下圖所示:

 

其實就是把標準卷積分成兩步,第一步叫deepwise convolution,就是單獨對每個特徵圖進行卷積,第二步叫pointwise convolution,其實就是標準卷積,只是卷積核尺寸爲1x1。這樣分成兩步會大大減少參數數量。列如輸入256x256x64,輸出256x256x128

標準卷積(如果·3x3的尺寸)的參數數量爲(64x3x3+1)128=73856,另一種爲(64x3

X3)+(64x1x1+1)x128=8896,相當於只有12%的參數數量。

 

 

五,ResNet

2016,Deep residual learning for imagerecognition

Vgg和inception都增加了網絡的深度,但是隨着網絡的不斷加深,可能會出現梯度消失(梯度接近於0)的問題(爲什麼,之後我會寫個詳細的文章來分析這個問題和梯度下降法,不然寫太多了),由於卷積神經網絡是依靠梯度下降法來尋優的,一旦梯度消失則無法更新參數,ResNet通過引入shortcut直連來解決這個問題:

     

對於shortcut的方式,作者提出了三個選項:

A. 使用恆等映射,如果residualblock的輸入輸出維度不一致,對增加的維度用0來填充;

B. 在block輸入輸出維度一致時使用恆等映射,不一致時使用線性投影以保證維度一致;

C. 對於所有的block均使用線性投影。

對這三個選項都進行了實驗,發現雖然C的效果好於B的效果好於A的效果,但是差距很小,因此線性投影並不是必需的,而使用0填充時,可以保證模型的複雜度最低,這對於更深的網絡是更加有利的。

在進一步的優化過程中引入1x1的卷積。減少了參數數量。

 

ResNet一個主流分支,基於殘差結構發展出許多優秀的網絡包括DenseNet、DPN、ResNeXt等。

1.     DenseNet

既然殘差結構這麼好用,爲什麼不多用,於是·DenseNet將residualconnection發揮到極致,每一層輸出都直連到後面的所有層,可以更好地複用特徵,每一層都比較淺,融合了來自前面所有層的所有特徵,並且很容易訓練。但是不是resnet那樣基於對應的特徵圖相加add,而是特徵圖的拼接concate。拼接的缺點是網絡到後面特徵圖會很多(相當於之前特徵圖數量的累加(注意是數量上的累加)),所以使用一個叫做“增長率”(k)的超參數防止網絡變得過寬,還用了一個1*1的卷積瓶頸層(又是它)在3*3卷積前減少特徵映射的數量。缺點是顯存佔用更大並且反向傳播計算更復雜一點。網絡結構如下所示:

2.     ResNeXt:

2017,Aggregated ResidualTransformations for Deep Neural Networks

結構圖如下:

左邊爲普通的resnet結構,而右邊爲ResNeXt提出的結構,有點像inception+resnet

但是inception最後是拼接,而這裏是加,各個通道也是一模一樣的(很方便之後特徵圖相加)。這種方式利用1卷積和groupconvolution,看起來結構複雜了很多,其實參數數量並沒有增加。

3.     DPN

duall path networks

DPN可以說是融合了ResNeXt和DenseNet的核心思想,這裏爲什麼不說是融合了ResNet和DenseNet,因爲作者也用了group操作,而ResNeXt和ResNet的主要區別就在於group操作。

分成左右兩個部分,第一部分類似DenseNet(因爲加入了分組卷積,所以說是類似),第二部分是ResNeXt,對與中間的shortcut部分,由左右兩部分的特徵圖經過1x1卷積相加,然後經過3x3卷積,和1x1的卷積(這就是resnet的shortcut部分),然後對獲取的特徵圖分成兩部分,一部分和左邊類DenseNet對應特徵圖拼接,另一部分與右邊ResNeXt的特徵圖進行相加(注意左右是不一樣的操作

六,移動端的網絡

1.     MobileNet

MobileNet v1:2017,MobileNets:Efficient Convolutional Neural Networks for Mobile Vision Applications

和Xception類似,通過depthwiseseparable convolution來減少計算量,設計了一個適用於移動端的,取得性能和效率間很好平衡的一個網絡。

MobileNet v2:2018,Inverted Residuals and Linear Bottlenecks: Mobile Networks forClassification, Detection and Segmentation

使用了ReLU6(即對ReLU輸出的結果進行Clip,使得輸出的最大值爲6)適配移動設備更好量化,然後提出了一種新的Inverted Residuals and Linear Bottleneck,即ResNet基本結構中間使用了depthwise卷積,一個通道一個卷積核,減少計算量,中間的通道數比兩頭還多(ResNet像漏斗,MobileNet v2像柳葉),並且全去掉了最後輸出的ReLU。

2.     ShuffleNet

2017,ShuffleNet: An ExtremelyEfficient Convolutional Neural Network for Mobile Devices

Xception已經做得很好了,但是1x1那裏太耗時間了成了計算的瓶頸,那就分組group convolution減少參數數量,但是分組了,組和組之間信息隔離了,那就重排shuffle一下,強行讓信息流動。具體的網絡結構如上圖左側所示。channelshuffle就是對通道進行重排,將每組卷積的輸出分配到下一次卷積的不同的組去:

上圖的a是沒有shuffle,效果很差,b則像Alexnet一樣把特徵進行融合然後與後面的層進行全連接,但是這樣會導致參數量劇增,要知道卷積神經·網絡大部分參數都集中與全連接層。ShuffleNe如c中一樣採取重排的方式來解決這個問題。沒有引入額外的參數。同時ShuffleNet也採用了Xception中的deepwise convolution 減少了參數數量。ShuffleNet可以達到和AlexNet相同的精度,並且實際速度快13倍(理論上快18倍)。

 

 

 

 

未完待續

如果有什麼錯誤,疑問,請加QQ:643421232探討


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