1. 程式人生 > >Inception 系列學習小記

Inception 系列學習小記

參考很多,僅為個人學習記錄使用

Inception 系列網路是 Google 提出的網路結構

  • InceptionV1(GoogLeNet)發表於 2014 年並獲得了 ILSVRC 2014 的冠軍;test error: 6.67%
  • InceptionV2,提出了 BN 初始化方法,也使用了多個小卷積層來代替大卷積層;test error: 4.8%
  • InceptionV3,加入了分解卷積,即將一個 7*7 卷積分解成 1*7 和 7*1 兩步,增加了網路的非線性,並且更精細的設計了 35*35,17*17,8*8 的卷積模組;test error: 3.5%
  • InceptionV4
    ,嘗試了更深的 Inception 網路結構,也在 Inception 中加入了殘差模組,構成 Inception-Resnet-v1 和 Inception-Resnet-v2;test error: 3.08%

一、InceptionV1(GoogLeNet)

簡介

  • GoogLeNet的引數量相比AlexNet要少很多,是AlexNet引數的1/12;
  • 由於手機終端和嵌入式裝置的發展,深度學習演算法的執行效率和記憶體控制顯得尤其重要,深度神經網路不僅具有學術性,更應該能夠應用於現實生活中;
  • 論文起源於NIN(Network in network),並且在網路深度上進行了研究;

研究動機

  • 深度。網路採用了一個22層的結構,9個 Inception 模組(2-5-2結構)。為了避免梯度消失問題,GoogLeNet在不同層增加了Loss 的輸出;
  • 寬度。網路在每一個小的結構中,利用了 1x1, 3x3, 5x5 的卷積核和直接 MaxPooling 操作(為了保證輸出的特徵層的大小與卷積核輸出大小相同,步長設定為1)。為了避免由於寬度的增加帶來每一個卷積核或者 MaxPooling 輸出的特徵層 cancatenate 之後,特徵層的深度過深,也為了減少網路引數,在每一個 3x3,5x5 的卷積核前面和 3x3 MaxPooling 後面都利用了一個 1x1 的卷積核進行降維,如下圖:

網路結構

  • 輸入尺寸為 224*224;
  • 前四層是普通的卷積和池化計算,第一層用 7*7/stride=2 的卷積層,目的是降低影象的特徵層大小,減少後面的計算量;
  • 網路中的池化層都是 3*3/stride=2 的結構;
  • 網路結構為:Inception module * 2 -> MaxPooling -> Inception module * 5 -> MaxPooling -> Inception module * 2,表格中的數字表示對應 Inception 模組中不同卷積層的維度設定,#3*3 reduce 表示 3*3 卷積前面用於降維的 1*1 卷積層的輸出維度,pool proj 表示模組中池化層的輸出維度;
  • 網路中的所有卷積層,後面都接一個 ReLU 啟用函式;
  • 網路最後,對輸出的 7*7*1024 特徵圖進行 average pooling 操作,得到一個 1*1*1024 輸出;
  • 在 average pooling 的後面接了一個 Dropout 層;
  • 在 Inception(4a) 和 Inception(4d) 分別接了一個 5*5/stride=3 的 average pooling 層,從而得到了 4*4*512 和 4*4*528 的特徵層,然後跟一個輸出維度為 128 的 1*1 卷積層用來降維,第一個 FC 輸出為 1024 並使用 Dropout,第二個 FC 輸出為 1000,然後接 Softmax 函式得到分類結果。得到的 loss 用於反向傳播,減少梯度消失帶來的影響;

二、InceptionV2

加入 BN 層,減少了 Internal Covariate Shift(內部資料分佈發生變化),使每一層的輸出都規範化到一個 N(0, 1) 的高斯。

三、InceptionV3

InceptionV3 對網路結構重新進行了規劃,引入了“多個小卷積層代替一個大卷積層”、“分解卷積”、"NIN in NIN" 等思想。同時,將輸入影象尺寸改為了 299*299。

  • 多個小卷積層代替一個大卷積層:用兩個 3*3 的卷積層替換一個 5*5 的卷積層,在減少引數的同時不會改變網路的表達能力;
  • 使用分解卷積:用 1×n 和 n×1 兩步卷積來代替 n×n 的卷積核,即可以減少引數,還可以增加非線性。這種結構在前幾層效果不太好,但對特徵圖大小為12~20的中間層效果明顯;
  • NIN in NIN:利用分解的卷積再聚合,來提高高緯度的表達能力;

上述三種方法分別用在 35*35,17*17,8*8 三種尺寸下,可以說是為這三種尺寸精心設計了網路結構,如下圖所示:

四、InceptionV4 & Inception-ResNet

InceptionV4 受到 ResNet 網路的啟發,將 Inception 模組和殘差模組進行結合,得到 Inception-resnet-v1 和 Inception-resnet-v1。同時,也探索了 Inception 模組本身是不是也能做到更深,更寬。

InceptionV4

  • 只有 Inception 模組
  • 如果模組中含有”V”,表示採用”VALID”的Padding,否則為”SAME”
  • 深度達到了75層(卷積)
  • Reduction-A: k=192,l=224,m=256,n=384
  • Inception V4 與 V3 相比,高層的結構相同,但底層的特徵提取不同
  • Inception V4 相比 Inception-ResNet 模型,更強調寬度,尤其是在高層上

Inception-ResNet

  • 使用帶有殘差的 Inception 模組,即 Inception-ResNet-A、Inception-ResNet-B、Inception-ResNet-C
  • Stem 部分的輸出深度與 Inception-v4 不同
  • Reduction A 部分的深度設定與 Inception-v4 不同,同時也是 Inception-ResNet-v1 和 Inception-ResNet-v2 的不同之處