Inception系列

一.Inception V1

Inception v1的原始Inception module如下所示:

                        

首先解釋一下這種Inception module的好處,從Alexnet到VGG,網絡層次不斷增加,深度不斷增加,但是卻忽視了廣度上的增加,而Inception就是在廣度上增加,同時使用不同的卷積核大小,3*3,5*5,1*1,這些不同卷積核的提取不同的特徵,增加了特徵的多樣性,但是這樣帶來一個問題就是參數量增加太大,爲了解決這個問題,就引入了1*1的卷積降維,如下圖所示:

                                

最後實現的inception v1網絡是上圖結構的順序連接,其中不同inception模塊之間使用2x2的最大池化進行下采樣,如表所示。

                  

在之前的網絡中,最後都有全連接層,經實驗證明,全連接層並不是很必要的,因爲可能會帶來以下三點不便:

  • 網絡的輸入需要固定
  • 參數量多
  • 易發生過擬合

實驗證明,將其替換爲平均池化層(或者1x1卷積層)不僅不影響精度,還可以減少參數量。

此外,實驗室的小夥伴最近做了下實驗,如果是小目標檢測的話,網絡的最後還是需要幾層全連接層的,猜想可能是用池化的話會損失太多信息,畢竟是小目標。

Inception V2和Inception V3的改進,主要是基於V3論文中提到的四個原則:

  1. 避免表示瓶頸,尤其是在網絡的前面。一般來說,特徵圖從輸入到輸出應該緩慢減小。
  2. 高維度特徵在網絡局部處理更加容易。考慮到更多的耦合特徵,在卷積網絡中增加非線性。可以讓網絡訓練更快。
  3. 空間聚合可以以低維度嵌入進行,這樣不會影響特徵的表達能力。如,在進行大尺度卷積之前,先對輸入進行降維。
  4. 平衡網絡的寬度和深度。增加寬度和深度都會帶來性能上的提升,兩者同時增加帶來了並行提升,但是要考慮計算資源的合理分配。

我們看GoogleNet,他除了有Inception module外,還有一個特點是他有三個輸出,論文中解釋這樣做的好處是避免梯度的消失,使得方向傳播能夠進行,但是還有一個作用就是,這樣有三個輸出的好處是,相當於可以做一個Ensemble,模型的一個集成,我們知道Kaggle中這個技巧是必用的。而且我們知道,越靠前的層卷積提取的特徵越低層次的特徵,越靠後的卷積層的特徵越高層次,如果只有最有一層的輸出,也就是相當於只用了最後的高層次的特徵分類,但不一定這樣就好,所以GoogleNet使用三個輸出,也是使用了不同層次的特徵的輸出作爲分類,這樣考慮更加周全。

GoogleNet還有一個減少參數量的方法是,他去掉了FC層,用average Pooling來代替,相比VGG網絡和AlexNet網絡,幾乎所有的參數有耗費在FC層上。

二.Inception v2

1.學習VGGNet的特點,用兩個3*3卷積代替5*5卷積,可以降低參數量。

2.提出BN算法。BN算法是一個正則化方法,可以提高大網絡的收斂速度。簡單介紹一下BN算法。就是對輸入層信息分佈標準化處理,使得規範化爲N(0,1)的高斯分佈,收斂速度大大提高。

 ⑴ 使用BN層,將每一層的輸出都規範化到一個N(0,1)的正態分佈,這將有助於訓練,因爲下一層不必學習輸入數據中的偏移,並且可以專注與如何更好地組合特徵(也因爲在v2裏有較好的效果,BN層幾乎是成了深度網絡的必備);

⑵ 使用2個3x3的卷積代替梯度(特徵圖,下同)爲35x35中的5x5的卷積,這樣既可以獲得相同的視野(經過2個3x3卷積得到的特徵圖大小等於1個5x5卷積得到的特徵圖),還具有更少的參數,還間接增加了網絡的深度,如下圖。(基於原則3

                                                      

⑶ 3x3的卷積核表現的不錯,那更小的卷積核是不是會更好呢?比如2x2。對此,v2在17x17的梯度中使用1*n和n*1這種非對稱的卷積來代替n*n的對稱卷積,既降低網絡的參數,又增加了網絡的深度(實驗證明,該結構放於網絡中部,取n=7,準確率更高),如下。(基於原則3

                                                       

⑷ 在梯度爲8x8時使用可以增加濾波器輸出的模塊(如下圖),以此來產生高維的稀疏特徵。(基於原則2

(原則2指出,在高維特徵上,採用這種結構更好,因此該模塊用在了8x8的梯度上)

                                                                                                                                                                

⑸ 輸入從224x224變爲229x229。

最後實現的Inception v2的結構如下表。

                                                                                                                                                        

如表,inception v2相比inception v1在imagenet的數據集上,識別誤差率由29%降爲23.4%。 

三.Inception v3 

inception模塊之間特徵圖的縮小,主要有下面兩種方式:

                                                     

右圖是先進行inception操作,再進行池化來下采樣,但是這樣參數量明顯多於左圖(比較方式同前文的降維後inception模塊),因此v2採用的是左圖的方式,即在不同的inception之間(35/17/8的梯度)採用池化來進行下采樣。

但是,左圖這種操作會造成表達瓶頸問題,也就是說特徵圖的大小不應該出現急劇的衰減(只經過一層就驟降)。如果出現急劇縮減,將會丟失大量的信息,對模型的訓練造成困難。(上文提到的原則1

因此,在2015年12月提出的Inception V3結構借鑑inception的結構設計了採用一種並行的降維結構,如下圖:

                                                                

具體來說,就是在35/17/8之間分別採用下面這兩種方式來實現特徵圖尺寸的縮小,如下圖: 

                                                                               

                                                                     figure 5' 35/17之間的特徵圖尺寸減小 

                                                                             

                                                                          figure 6' 17/8之間的特徵圖尺寸縮小 

這樣就得到Inception v3的網絡結構,如表所示。 

                                                    

                                                                                                inception v3 

經過優化後的inception v3網絡與其他網絡識別誤差率對比如表所示。 

                                                                                                                                                              

如表所示,在144x144的輸入上,inception v3的識別錯誤率由v1的7.89%降爲了4.2%。

此外,文章還提到了中間輔助層,即在網絡中部再增加一個輸出層。實驗發現,中間輔助層在訓練前期影響不大,而在訓練後期卻可以提高精度,相當於正則項。

 四.Inception V4

將原來卷積、池化的順次連接(網絡的前幾層)替換爲stem模塊,來獲得更深的網絡結構。stem模塊結構如下

                                                       

  stem之後的,同v3,是inception模塊和reduction模塊,如下圖                                                        

                  

                                    inception v4 中的inception模塊(分別爲inception A inception B inception C)

                    

                                              inception v4中的reduction模塊(分別爲reduction A reduction B)

最終得到的inception v4結構如下圖。

                                                                    

 

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