Inception-v1

聲明:文章僅作知識整理、分享,如有侵權請聯繫作者刪除博文,謝謝!

經典分類網絡,分類網絡總目錄(傳送門)

1、LeNet結構解析

2、AlexNet論文翻譯AlexNet論文總結與實現

3、VGG論文翻譯VGGNet總結及啓發

4、ResNet論文翻譯ResNet總結及啓發

5、Inception-v1Inception-v2

1、簡介

與VGG同年,google也獨立在深度網絡的深度方向及多尺度方面進行了研究。該結構充分利用了網絡結構中子網絡的計算,在設計過程中,受到了多尺度處理的啓發。GoogLeNet的參數量相比AlexNet要少很多,是AlexNet參數的1/12。

2、研究動機

針對之前的網絡結構(ALeNet)設計,主要存在幾個方面的缺點:

1、參數太多,模型的熵容量太大,容易導致過擬合,尤其對於比較小的數據集;

2、網絡越大,計算複雜度也就越大,在實際應用困難

3、網絡越深,模型訓練越困難,梯度消失問題不可避免。

一般來說,提升網絡性能最直接的辦法就是增加網絡深度和寬度,這也就意味着巨量的參數。但是,巨量參數容易產生過擬合也會大大增加計算量。

文章認爲解決上述兩個缺點的根本方法是將全連接甚至一般的卷積都轉化爲稀疏連接。一方面現實生物神經系統的連接也是稀疏的,另一方面有文獻1表明:對於大規模稀疏的神經網絡,可以通過分析激活值的統計特性和對高度相關的輸出進行聚類來逐層構建出一個最優網絡。這點表明臃腫的稀疏網絡可能被不失性能地簡化。 雖然數學證明有着嚴格的條件限制,但Hebbian準則有力地支持了這一點:fire together,wire together。

3、GoogLeNet的研究動機

Inception 結構的主要思路是怎樣用密集成分來近似最優的局部稀疏結構。 

深度: 網絡採用了一個22層的結構,9個Inception(2-5-2結構),但是爲了避免梯度消失問題,GoogLeNet在不同層增加了Loss的輸出;

寬度: 網絡在每一個小的結構中,利用了1x1, 3x3, 5x5的卷積核和直接Max Pooling操作(爲了保證輸出的特徵層的大小與卷積核輸出大小相同,步長設置爲1),爲了避免由於寬度的增加帶來每一個卷機核或者Max Pooling輸出的特徵層cancatenate之後,特徵層的深度過深,也爲了減少網絡參數,在每一個3x3,5x5的卷積核前面和3x3Max Pooling後面都利用了一個1x1的卷積核進行降維,如下圖:

對上圖做以下說明:

1、採用不同大小的卷積核意味着不同大小的感受野,最後拼接意味着不同尺度特徵的融合;

2、之所以卷積核大小採用1、3和5,主要是爲了方便對齊。設定卷積步長stride=1之後,只要分別設定pad=0、1、2,那麼卷積之後便可以得到相同維度的特徵,然後這些特徵就可以直接拼接在一起了

3、文章說很多地方都表明pooling挺有效,所以Inception裏面也嵌入了

4、網絡越到後面,特徵越抽象,而且每個特徵所涉及的感受野也更大了,因此隨着層數的增加,3x3和5x5卷積的比例也要增加。

使用5x5的卷積核仍然會帶來巨大的計算量。 爲此,文章借鑑NIN2,採用1x1卷積核來進行降維。

例如:上一層的輸出爲100x100x128,經過具有256個輸出的5x5卷積層之後(stride=1,pad=2),輸出數據爲100x100x256。其中,卷積層的參數爲128x5x5x256。假如上一層輸出先經過具有32個輸出的1x1卷積層,再經過具有256個輸出的5x5卷積層,那麼最終的輸出數據仍爲爲100x100x256,但卷積參數量已經減少爲128x1x1x32 + 32x5x5x256,大約減少了4倍。

4、GoogLeNet模型結構

GoogLeNet的整體結構如下圖:

對上圖做如下說明:

1、顯然GoogLeNet採用了模塊化的結構,方便增添和修改;

2、網絡最後採用了average pooling來代替全連接層,想法來自NIN,事實證明可以將TOP1 accuracy提高0.6%。但是,實際在最後還是加了一個全連接層,主要是爲了方便以後大家finetune;

3、雖然移除了全連接,但是網絡中依然使用了Dropout ;

4、爲了避免梯度消失,網絡額外增加了2個輔助的softmax用於向前傳導梯度。文章中說這兩個輔助的分類器的loss應該加一個衰減係數,但看caffe中的model也沒有加任何衰減。此外,實際測試的時候,這兩個額外的softmax會被去掉。

5、輔助分類器

這種做法在GoogLeNet上就已經使用,認爲這種輔助分類器,在網絡訓練過程中扮演着非常重要的角色,能有效的將梯度傳播到底層。但是作者發現輔助分類器並沒有提升收斂速度,但是卻起到了正則化的作用

如果輔助分類器使用了batch-normalized或者dropout層,最終的分類器效果更好。

一些模型是在較小的物體上訓練的,有一種經過驗證的方法非常有效,那就是對圖像的個個大小塊進行降採樣,這些快的大小均勻分佈在圖像面積的8%到100%之間,並且在3/4到4/3之間隨機選擇寬高比,一定程度上能夠克服過擬合。

6、優點

把整個Inception的網絡架構畫出來,更直觀感受網絡結構

1.寬度。總共是9個Inception的模塊,每個模塊除了num_output的個數不一樣之外,其他的都是相同的。每一個卷積後都要做relu操作。

2.深度。除了在最後的全連接計算了loss和top_1,top_5的準確率之外,還在inception_4a/output和inception_4d/output之後進行池化卷積全連接,最後計算loss和top_1,top_5。

個人感覺這種方式,一方面可以比較不同深度下的loss和準確率,同時,這些中間層的backward computation會對整個起到調整梯度的作用,這樣防止當層次過深時的梯度消失的問題。

7、結論

GoogLeNet是谷歌團隊爲了參加ILSVRC 2014比賽而精心準備的,爲了達到最佳的性能,除了使用上述的網絡結構外,還做了大量的輔助工作:包括訓練多個model求平均、裁剪不同尺度的圖像做多次驗證等等。詳細的這些可以參看文章的實驗部分。

本文的主要想法其實是想通過構建密集的塊結構來近似最優的稀疏結構,從而達到提高性能而又不大量增加計算量的目的。GoogleNet的caffemodel大小約50M,但性能卻很優異。

測試時,將圖像調整到4個尺度,其中較短的維度(高度或寬度)分別爲256、288、320、352,取這些調整後的圖像的座標中間右邊的方塊,按照224x224剪裁,生成數據。

 

參考文章:

1、深度學習之基礎模型—InceptionV1(GoogLeNet)

https://blog.csdn.net/whz1861/article/details/78160190

2、GoogLeNet學習心得

https://www.cnblogs.com/Allen-rg/p/5833919.html

 

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