Inception系列


從GoogLeNet的Inceptionv1開始,發展了眾多inception,如inception v2、v3、v4與Inception-ResNet-V2。

故事還是要從inception v1開始說起。

Inception v1

相比於GoogLeNet之前的眾多卷積神經網絡而言,inception v1采用在同一層中提取不同的特征(使用不同尺寸的卷積核),並提出了卷積核的並行合並(也稱為Bottleneck layer),如下圖

image

這樣的結構主要有以下改進:

  1. 一層block就包含1x1卷積,3x3卷積,5x5卷積,3x3池化(使用這樣的尺寸不是必需的,可以根據需要進行調整)。這樣,網絡中每一層都能學習到“稀疏”(3x3、5x5)或“不稀疏”(1x1)的特征,既增加了網絡的寬度,也增加了網絡對尺度的適應性;
  2. 通過deep concat在每個block后合成特征,獲得非線性屬性。

雖然這樣提高了性能,但是網絡的計算量實在是太大了,因此GoogLeNet借鑒了Network-in-Network的思想,使用1x1的卷積核實現降維操作,以此來減小網絡的參數量(這里就不對兩種結構的參數量進行定量比較了),如圖所示。

image

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

image

如表所示,實現的網絡仍有一層全連接層,該層的設置是為了遷移學習的實現(下同)。

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

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

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

Inception v2

在V1的基礎之上主要做了以下改進:

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

(在Batch-normalized論文中只增加了BN層,而之后的Inception V3的論文提及到的inception v2還做了下面的優化)

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

imagefigure5


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

imagefigure6image用2個3×1代替3×3

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


imagefigure7

⑸ 輸入從224x224變為229x229。

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

image

經過網絡的改進,inception v2得到更低的識別誤差率,與其他網絡識別誤差率對比如表所示。

image

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


Inception v3

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

image

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

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

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

image

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

imagefigure 5'   35/17之間的特征圖尺寸減小

imagefigure 6' 17/8之間的特征圖尺寸縮小

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

image

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

image

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

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

Inception V4

其實,做到現在,inception模塊感覺已經做的差不多了,再做下去准確率應該也不會有大的改變。但是谷歌這幫人還是不放棄,非要把一個東西做到極致,改變不了inception模塊,就改變其他的。

因此,作者Christian Szegedy設計了inception v4的網絡,將原來卷積、池化的順次連接(網絡的前幾層)替換為stem模塊,來獲得更深的網絡結構。stem模塊結構如下

imagestem模塊

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

image

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

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

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

image

Inception-ResNet-v2

ResNet(該網絡介紹見卷積神經網絡結構簡述(三)殘差系列網絡)的結構既可以加速訓練,還可以提升性能(防止梯度彌散);Inception模塊可以在同一層上獲得稀疏或非稀疏的特征。有沒有可能將兩者進行優勢互補呢?

Christian Szegedy等人將兩個模塊的優勢進行了結合,設計出了Inception-ResNet網絡。

(inception-resnet有v1和v2兩個版本,v2表現更好且更復雜,這里只介紹了v2)

inception-resnet的成功,主要是它的inception-resnet模塊。

inception-resnet v2中的Inception-resnet模塊如下圖

image

Inception-resnet模塊(分別為inception-resnet-A inception-resnet-B inception-resnet-C)

Inception-resnet模塊之間特征圖尺寸的減小如下圖。(類似於inception v4)

image

inception-resnet-v2中的reduction模塊(分別為reduction A reduction B)

最終得到的Inception-ResNet-v2網絡結構如圖(stem模塊同inception v4)。

image

經過這兩種網絡的改進,使得模型對圖像識別的錯誤率進一步得到了降低。Inception、resnet網絡結果對比如表所示。

image

如表,Inception V4與Inception-ResNet-v2網絡較之前的網絡,誤差率均有所下降。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM