轉自:http://blog.csdn.net/liumaolincycle/article/details/50471289#t0
綜述:
http://blog.csdn.net/sunbaigui/article/details/50807362
googlenet和vgg是2014年imagenet競賽的雙雄,這兩類模型結構有一個共同特點是go deeper。跟vgg不同的是,googlenet做了更大膽的網絡上的嘗試而不是像vgg繼承了lenet以及alexnet的一些框架,該模型雖然 有22層,但大小卻比alexnet和vgg都小很多,性能優越。
具體網絡配置如鏈接:https://github.com/BVLC/caffe/blob/master/models/bvlc_googlenet/train_val.prototxt
文章提出獲得高質量模型最保險的做法就是增加模型的深度(層數)或者是其寬度(層核或者神經元數),但是這里一般設計思路的情況下會出現兩個缺陷(1.參 數太多,容易過擬合,若訓練數據集有限;2.網絡越大計算復雜度越大,難以應用;3.網絡越深,梯度越往后穿越容易消失,難以優化模型)。 googlenet的主要思想就是圍繞這兩個思路去做的:
1.深度,層數更深,文章采用了22層,為了避免上述提到的梯度消失問題,googlenet巧妙的在不同深度處增加了兩個loss來保證梯度回傳消失的現象。
2.寬度,增加了多種核 1x1,3x3,5x5,還有直接max pooling的,但是如果簡單的將這些應用到feature map上的話,concat起來的feature map厚度將會很大,所以在googlenet中為了避免這一現象提出的inception具有如下結構,在3x3前,5x5前,max pooling后分別加上了1x1的卷積核起到了降低feature map厚度的作用。
綜上googlent有兩個最重要的創新點分別是為了解決深度和寬度受限來設計的,由於googlenet的兩個輔助loss的限制,很多文章拿base model的時候比較偏向與vgg。
優點:
把整個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會對整個起到調整梯度的作用,這樣防止當層次過深時的梯度消失的問題。
Overview
本文提出了一種深度卷積神經網絡架構, 代號為Inception(是不是讓人想到《盜夢空間》中一層層的夢境呢),獲得了ILSVRC14比賽的冠軍,刷新了圖像分類與檢測的性能記錄。該網絡 的特點是提升了計算資源的利用率,可以在保持網絡計算資源不變的前提下,通過工藝上的設計來增加網絡的寬度和深度,基於Hebbian法則和多尺度處理來 優化性能。在ILSVRC2014中提交的版本叫GoogLeNet,共有22層。
GoogLeNet用的參數比ILSVRC2012的冠軍AlexNet少12倍,但准確率更高。現在的目標檢測例如R-CNN,結合了深度架構和傳統計算機視覺方法進行目標檢測。
由於移動設備和嵌入式計算的發展,算法的效率很重要,一個好的算法,不僅要具有學術性,也要能用於實際中。
Motivation and High Level Considerations
直接提升深度卷積網絡性能的方法是從深度與寬度兩方面增加尺寸,但大尺寸的網絡需要更多參數,容易導致過擬合,尤其是數據集不夠大的時候,直接增加 尺寸的另一個弊端是需要大量計算資源。根本的解決辦法是將全連接層變為稀疏鏈接層,而非均勻稀疏網絡的弊端是計算效率不高,可以采用將多個稀疏矩陣合並成 相關的稠密子矩陣的方法來解決。
Architectural Details
Inception架構的主要思想是找出如何讓已有的稠密組件接近與覆蓋卷積視覺網絡中的最佳局部稀疏結構。現在需要找出最優的局部構造,並且重復 幾次。之前的一篇文獻提出一個層與層的結構,在最后一層進行相關性統計,將高相關性的聚集到一起。這些聚類構成下一層的單元,且與上一層單元連接。假設前 面層的每個單元對應於輸入圖像的某些區域,這些單元被分為濾波器組。在接近輸入層的低層中,相關單元集中在某些局部區域,最終得到在單個區域中的大量聚 類,在下一層通過1x1的卷積覆蓋。
也可以通過在更大的patch上卷積,覆蓋少量的在空間上更大的聚類,區域越來越大,patch數越來越少。
為了避免patch校准問題,現在的濾波器大小限制在1x1,3x3和5x5,主要是為了方便,不是必要的。這樣的Inception模塊如下:
另外,在pooling層添加一個額外的並行pooling路徑用於提高效率。
Inception模塊之間互相堆放,它們的輸出相關性統計一定會改變:高層次提取高抽象性的特征,空間集中性會降低,因此3x3和5x5的卷積核在更高層會比較多。
采用上面的模塊有一個大問題是在卷積層頂端由於濾波器太多,即使是5x5的卷積都會讓計算開銷過分昂貴。當pooling單元加入之后這個問題更加明顯: 輸出濾波器的數量等於前一步中濾波器的數量。pooling層的輸出和卷積層的輸出融合會導致輸出數量逐步增長。即使這個架構可能包含了最優的稀疏結構, 還是會非常沒有效率,導致計算沒經過幾步就崩潰。
因此有了架構的第二個主要思想:在計算要求增加很多的地方應用維度縮減和預測。即,在3x3和5x5的卷積前用一個1x1的卷積用於減少計算,還用於修正線性激活。如下圖所示,左邊是加入維度縮減之前的,右邊是加入維度縮減之后的。
技術上的做法是,保持低層為傳統卷積方式不變,只在較高的層開始用Inception模塊。
這種架構的兩個主要優點:一是允許顯著增加每一步的單元數目,計算復雜性不會不受控制。降維的普遍使用能保護最后一步到下一層的大量輸入濾波器,在對它們 用大的patch size卷積前首先降維。二是視覺信息在不同的尺度上進行處理然后聚合,這樣下一步可以同時從不同尺度提取特征。
采用了Inception模塊的網絡要比沒有采用Inception模塊的同樣架構的網絡快2~3倍。
GoogLeNet
采用Inception架構的GoogLeNet如下所示:
總體結構:
1.包括Inception模塊的所有卷積,都用了修正線性單元(ReLU);
2.網絡的感受野大小是224x224,采用RGB彩色通道,且減去均值;
3.#3x3 reduce和#5x5 reduce分別表示3x3和5x5的卷積前縮減層中1x1濾波器的個數;pool proj表示嵌入的max-pooling之后的投影層中1x1濾波器的個數;縮減層和投影層都要用ReLU;
4.網絡包含22個帶參數的層(如果考慮pooling層就是27層),獨立成塊的層總共有約有100個;
5.網絡中間的層次生成的特征會非常有區分性,給這些層增加一些輔助分類器。這些分類器以小卷積網絡的形式放在Inception(4a)和Inception(4b)的輸出上。在訓練過程中,損失會根據折扣后的權重(折扣權重為0.3)疊加到總損失中。
GoogLeNet 網絡結構圖:
輔助分類器的具體細節:
1.均值pooling層濾波器大小為5x5,步長為3,(4a)的輸出為4x4x512,(4d)的輸出為4x4x528;
2.1x1的卷積有用於降維的128個濾波器和修正線性激活;
3.全連接層有1024個單元和修正線性激活;
4.dropout層的dropped的輸出比率為70%;
5.線性層將softmax損失作為分類器(和主分類器一樣預測1000個類,但在inference時移除)。
Training Methodology
利用分布式機器學習系統和數據並行來訓練網絡,雖然實現時只用了CPU,但是是可以用個別高端的GPU一周達到收斂的。采用異步隨機梯度下降,動量為0.9,學習率每8個epoch下降4%。用Polyak平均來創建最后的模型。
圖像采樣的patch大小從圖像的8%到100%,選取的長寬比在3/4到4/3之間,光度扭曲也有利於減少過擬合,還使用隨機插值方法結合其他超參數的改變來調整圖像大小。
ILSVRC 2014 Classification Challenge Setup and Results
ILSVRC 2014的分類任務有1000個子類,120萬訓練圖像,5萬驗證圖像,10萬測試圖像,每個圖像中有一個ground truth,性能測量是基於得分最高的分類器預測,常用指標為top-1准確率和top-5錯誤率。
測試時的一些小技巧:
1.訓練了7個網絡,初始化和權重都相同,只是采樣方法和隨機輸入圖像不同;
2.將圖像的短邊分別縮放成256、288、320、352這樣4種尺度。取圖像的左中右塊(或上中下塊)。每塊取四個角和中間的224x224的裁剪, 和將這個塊縮放到224x224,以及它們的鏡像。這樣每個圖像有4x3x6x2=144個,但可能實際中不需要這么多;
3.softmax概率在多個裁剪和在所有分類器上取平均來獲得最后的預測,簡單的平均結果最好。
最終的top-5錯誤率在驗證集和測試集上都是6.67%,獲得了第一。與其他方法相比的提高如下所示:
以及分析了多種測試選項:
ILSVRC 2014 Detection Challenge Setup and Results
檢測任務的標准是檢測出來的bounding box與groundtruth的交疊比大於50%且是正確的,圖像中可能包含多個目標或者不包含目標,尺度可能很大可能很小,采用的結果報告方式是mAP。
采用的目標檢測方法與R-CNN很像,但增加了Inception模塊作為區域分類器。結合了用multi-box的方法和Selective Search來提高bounding box的召回率,沒有用bounding box回歸。
下圖是一些比賽結果:
下圖是單個模型的性能比較:
附:幾個著名的CNN網絡模型鏈接
https://github.com/BVLC/caffe/tree/master/models
http://blog.csdn.net/shuzfan/article/details/50738394 博主的文章寫得很不錯,可以多請教!