1. 程式人生 > >【深度學習】GoogLeNet系列解讀 —— Inception v2

【深度學習】GoogLeNet系列解讀 —— Inception v2


目錄

GoogLeNet系列解讀

Inception v1

Inception v2

Inception v3

Inception v4


簡介

GoogLeNet憑藉其優秀的表現,得到了很多研究人員的學習和使用,因此Google又對其進行了改進,產生了GoogLeNet的升級版本,也就是Inception v2。

論文地址:Rethinking the Inception Architecture for Computer Vision


網路通用設計準則

GoogLeNet設計的初衷是既要保證識別精度,又要速度快。雖然像VGGNet這樣通過堆疊卷積層可以提高識別精度,但是會增加對計算資源的要求。我們知道,GoogLeNet的引數量只有Alexnet的1/12,而VGGNet的引數量卻是Alexnet的3倍。因此,我們需要考慮這樣一個問題——如何在不提高網路引數量的前提下提升網路的表達能力?作者給出了一些通用的網路設計準則:

1. 避免表達瓶頸,尤其是網路早期。前饋網路在向後傳遞資訊時,通過瓶頸層(高度壓縮的層)時,會損失大量的有用資訊,也就是遇到了表達瓶頸。當資訊向後傳播時,特徵尺寸一般是要逐漸減小的,但是不要急劇減少,比如feature map直接從128x128減小到3x3,這樣的網路是很難訓練的。另外,特徵維度(通道數)一般會逐漸增加,但是維度只是作為一種估計的手段,並不代表資訊的多少,因為會丟棄相關結構等重要資訊。

2. 高維特徵更易處理。高維特徵(多次非線性對映)帶有更多的判別資訊,網路也會更容易訓練。

3. 可以在低維特徵時進行空間聚合,而不必擔心會損失太多資訊。這句話的意思是在網路前幾層的時候可以考慮降低特徵維度,不會損失太多資訊,反而還能加速訓練。例如,在低維特徵時,我們在進行3x3卷積前,可以先使用pooling操作,加速訓練。

4. 平衡網路的寬度與深度。過深或過寬的網路都會使網路效能達不到最優。

上面幾點只是對網路設計提供一個大方向的指導,讓設計者避免走一些不必要的彎路,但是想讓你的網路效能得到直接提升還需自己在演算法上和實驗中進行嘗試。


卷積分解

大尺度的卷積可以獲得更大的感受野,但是也會帶來引數量的增加。比如通道數相同的5x5卷積核引數量是3x3卷積核的25/9 = 2.78倍,因此作者提出使用兩個3x3卷積代替5x5卷積,在保證感受野相同的前提下減少引數量。實際上,這和VGG堆疊卷積的想法是相通的。

 除了減少引數量,這種做法的另一個好處是增加了一層非線性對映,是特徵資訊更加具有判別性。而且實驗結果表明,這種替代方法不會造成表達缺失,降低網路效能。

我們知道,3x3卷積是能夠完全獲取上下文資訊的最小卷積核(上、下、左、右)。那麼是不是能把小卷積核分解的更小呢?作者提出使用1x3和3x1卷積替代3x3卷積,

 推廣,可以得到任意nxn卷積均可由1xn和nx1卷積替代。但是作者發現這種替代方案在網路前幾層的表現並不好,而在特徵圖尺寸在12-20之間有很好的效果。

將inception v2設計過程總結如下:

 

 

對上圖進行說明:

1. Figure 4 表示Inception v1的結構。

2. Figure 5 表示將5x5卷積替代為兩個3x3卷積的結構。

3. Figure 6 表示將nxn卷積替代為1xn卷積和nx1卷積。

4. Figure 7 的結構主要應用在高維特徵上,文中為8x8的feature map。


Inception v2

GoogLeNet v2最終的網路結構如下:


程式碼實現

Keras 實現Inception v2請參考Inception v1的寫法。