GoogLeNet,做爲 ILSVRC-2014的分類和檢測任務的冠軍,相比於當年分類任務第二名VGG Net的對於小卷積層(3x3)的簡單堆疊,GoogLeNet提出更具創意的Inception模塊,雖然網絡結構比較複雜,可是模型參數量卻下降了,僅爲AlexNet的1/12,而VGGNet的參數量倒是AlexNet的3倍,但模型精度卻比VGG要跟高。算法
正是由於GoogLeNet的高性能,後續繼續在Inception v1版本上繼續優化,出現了Inception v2,Inception v3,Inception v4,Inception-ResNet v1,Inception-ResNet v2等優化模型,下面咱們來具體看下。網絡
首先,咱們須要明確,提升深度神經網絡性能最直接的方式是增長深度和寬度,可是這樣會帶來兩個問題:架構
1.更大的尺寸一般意味着更多的參數,這會使增大的網絡更容易過擬合,尤爲是在訓練集的標註樣本有限的狀況下。機器學習
2.會耗費大量計算資源。性能
GoogLeNet的設計理念爲:
學習
1.圖像中的突出部分可能具備極大的尺寸變化。優化
2.信息位置的這種巨大變化,卷積操做選擇正確的核大小比較困難。 .net
3.對於較全局分佈的信息,首選較大的核,對於較局部分佈的信息,首選較小的核。 設計
4.很是深的網絡容易過擬合。它也很難經過整個網絡傳遞梯度更新。3d
5.簡單地堆疊大卷積運算致使計算複雜度較高
出於上面的考慮,提出了以下圖所示的初始Inception 模塊
對前一層的輸入進行並行並行卷積操做,使用多個感覺野大小的卷積(1x1, 3x3, 5x5).
可是上述初始Inception ,參數量過大,從而致使計算量過大。
受Network in Network的啓發,做者使用1x1卷積對特徵圖通道數進行降維,這就是Inception v1的最終網絡結構,以下:
inception結構的主要貢獻:
一是使用1x1的卷積來進行降維;二是在多個尺寸上同時進行卷積再聚合
最終,基於Inception v1的GoogLeNet網絡結構以下圖:
每一層的具體狀況以下圖:
GoogLeNet v1一共包含22層,網絡參數量只有Alexnet的1/12。隨着網絡層數的加深,依然會存在梯度消失問題,因此做者在中間層加入兩個輔助的softmax,以此增長反向傳播的梯度大小,同時也起到了正則化的做用。在計算網絡損失的時候,中間的輔助softmax loss會乘以一個權重(0.3)加入到最後層的loss值中。在預測時,則忽略中間softmax層的輸出。
Inception v2 的改進主要在如下幾點:
1. 加入Batch Normalization(批歸一化)層,標準結構爲:卷積-BN-relu
2. 借鑑VGG的使用,使用兩個3*3的卷積串聯來代替Inception 模塊中的5*5卷積模塊。由於兩個3*3的卷積與一個5*5的卷積具體相同的感覺野,可是參數量卻少於5*5的卷積。而且由於增長了一層卷積操做,則對應多了一次Relu,即增長一層非線性映射,使特徵信息更加具備判別性
3. 使用非對稱卷積對3*3的卷積進一步分解爲3*1和1*3的卷積。以下圖:
關於非對稱卷積,論文中提到:
1)先進行 n×1 卷積再進行 1×n 卷積,與直接進行 n×n 卷積的結果是等價的。
2)非對稱卷積可以下降運算量,原來是 n×n 次乘法,分解以後,變成了 2×n 次乘法了,n越大,運算量減小的越多。
3)雖然能夠下降運算量,但這種方法不是哪兒都適用的,這樣的非對稱卷積不要用在靠近輸入的層,會影響精度,要用在較高的層,非對稱卷積在圖片大小介於12×12到20×20大小之間的時候,效果比較好。
Inception v2中有如下三種不一樣的Inception 模塊,以下圖
第一種模塊(figure 5)用在35x35的feature map上,主要是將一個5x5的卷積替換成兩個3x3的卷積
第二種模塊(figure 6),進一步將3*3的卷積核分解爲nx1 和 1xn 的卷積,用在17x17的feature map上,具體模塊結構,以下圖:
第三種模塊(figure 7)主要用在高維特徵上,在網絡中用於8x8的feature map上,具體結構以下圖:
GoogLeNet Inception v2的完整網絡架構以下圖:
Inception v3總體上採用了Inception v2的網絡結構,並在優化算法、正則化等方面作了改進,具體以下:
1. 優化算法使用RMSProp替代SGD
2. 輔助分類器中也加入BN操做
3. 使用Label Smoothing Regularization(LSR)方法 ,來避免過擬合,防止網絡對某一個類別的預測過於自信,對小几率類別增長更多的關注。(關於LSR優化方法,能夠參考下這篇博客https://blog.csdn.net/lqfarmer/article/details/74276680)
4. 將剛開始的第一個7x7的卷積核替換爲兩個3x3的卷積核
Inception v4中的三個Inception模塊以下:
1. Inception-A block:
使用兩個3x3卷積代替5x5卷積,而且使用average pooling,該模塊主要處理尺寸爲35x35的feature map;結構以下圖:
2. Inception-B block:
使用1xn和nx1卷積代替nxn卷積,一樣使用average pooling,該模塊主要處理尺寸爲17x17的feature map。結構以下圖:
3. Inception-C block:
該模塊主要處理尺寸爲8x8的feature map。結構以下圖:
在將feature map從35x35降到17x17,再到8x8時,不是使用的簡單的pooling層,而是使用了兩個Reduction結構,具體結構以下圖:
最終,Inception v4完整結構以下圖:
Inception-ResNet顧名思義,在Inception的基礎上引入了ResNet殘差網絡的思想,將淺層特徵經過另一條分支加到高層特徵中,達到特徵複用的目的,同時也避免深層網絡的梯度消失問題。
Inception-ResNet v1:
三個基本模塊以下圖:
Inception-ResNet v1的 Reduction-A 模塊和 Inception v4的保持一致,
Reduction-B模塊以下:
完整架構以下:
Inception-ResNet v2:
三個基本模塊以下圖:
Inception-ResNet v2的 Reduction-A 模塊一樣與 Inception v4的保持一致,Reduction-B模塊以下:
Inception-Resnet v2的總體架構和v1保持一致,Stem具體結構有所不一樣,Inception-Resnet v2的Stem結構和Inception v4的保持一致,具體以下圖:
歡迎關注個人公衆號,本公衆號不按期推送機器學習,深度學習,計算機視覺等相關文章,歡迎你們和我一塊兒學習,交流。