Inception 系列學習小記
阿新 • • 發佈:2018-12-11
參考很多,僅為個人學習記錄使用
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
一、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 的不同之處