GoogLeNet Inception v1,v2,v3,v4及Inception Resnet介紹

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等優化模型,下面我們來具體看下。

一、Inception v1

首先,我們需要明確,提高深度神經網絡性能最直接的方式是增加深度和寬度,但是這樣會帶來兩個問題:

1.更大的尺寸通常意味着更多的參數,這會使增大的網絡更容易過擬合,尤其是在訓練集的標註樣本有限的情況下。

2.會耗費大量計算資源。

 

GoogLeNet的設計理念爲:

1.圖像中的突出部分可能具有極大的尺寸變化。

2.信息位置的這種巨大變化,卷積操作選擇正確的核大小比較困難。

3.對於較全局分佈的信息,首選較大的核,對於較局部分佈的信息,首選較小的核。

4.非常深的網絡容易過擬合。它也很難通過整個網絡傳遞梯度更新。

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

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 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 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 v1, v2

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的保持一致,具體如下圖:

歡迎關注我的公衆號,本公衆號不定期推送機器學習,深度學習,計算機視覺等相關文章,歡迎大家和我一起學習,交流。


                              

 

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