影像分類丨Inception家族進化史「GoogleNet、Inception、Xception」

vincent1997發表於2019-05-24

引言

  • Google提出的Inception系列是分類任務中的代表性工作,不同於VGG簡單地堆疊卷積層,Inception重視網路的拓撲結構。本文關注Inception系列方法的演變,並加入了Xception作為對比。

PS1:這裡有一篇blog,作者Bharath Raj簡潔明瞭地介紹這系列的工作:https://towardsdatascience.com/a-simple-guide-to-the-versions-of-the-inception-network-7fc52b863202,強烈建議閱讀

PS2:我看了比較多的blog,都沒有介紹清楚V2和V3的區別。主要是因為V2的提出涉及到兩篇paper,並且V2和V3是在一篇論文中提到的。實際上,它們兩者的區別並不大。

InceptionV1

Going Deeper with Convolutions

核心思想

由於影像的突出部分可能有極大的尺寸變化,這為卷積操作選擇正確的核心大小創造了困難,比如更全域性的資訊應該使用大的核心,而更區域性的資訊應該使用小核心。不妨在同一級執行多種尺寸的濾波核,讓網路本質變得更"寬"而不是”更深“。

img

  • 提出Inception模組(左),具有三種不同的濾波器(1x1,3x3,5x5)和max pooling。為降低計算量,GooLeNet借鑑Network-in-Network的思想,用1x1卷積降維減小引數量(右)。可在保持計算成本的同時增加網路的深度和寬度。

1558666788758

網路架構

  • GoogLeNet具有9個Inception模組,22層深(27層包括pooling),並在最後一個Inception模組使用全域性池化。
  • 由於網路深度,將存在梯度消失vanishing gradient的問題。
  • 為了防止網路中間部分消失,作者提出了兩個輔助分類器auxiliary classifiers(紫色),總損失是實際損失和輔助損失的加權求和。
# The total loss used by the inception net during training.
total_loss = real_loss + 0.3 * aux_loss_1 + 0.3 * aux_loss_2

img

1558666809958

實驗結果

1558666832773

InceptionV2

Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

Rethinking the Inception Architecture for Computer Vision

核心思想

  • 使用Batch Normalization

將輸出歸一化為N(0,1正態分佈,一方面可以採用較大的學習速率,加快收斂;另一方面BN具有正則效應。

1558680941376

1558680956115

  • 卷積分解Factorizing Convolutions

當卷積沒有徹底改變輸入維度時,神經網路表現更好。過度減小尺寸會導致資訊丟失,稱為"representational bottleneck",巧妙地使用分解(factorization)方法,可提高卷積的計算效率。

  1. 分解為更小的卷積\(5\times5\)卷積可分解為兩個\(3\times3\)卷積以提升計算效率,計算效率為原來的\(\frac{3\times3+3\times3}{5\times5}\)
  2. 分解為非對稱卷積\(n\times n\)卷積可分解為\(1\times n\)\(n \times 1\)的卷積。

1558684519671

Inception的演化

a為InceptionV1;用兩個3x3卷積替換5x5得到b;再將3x3卷積分解為3x1、1x3得c;在高層特徵中,卷積組被擴充為d已產生更多不一樣的特徵。

1558684267707

下采樣模組

InceptionV3不再使用max pooling下采樣,這樣導致資訊損失較大。於是作者想用conv升維,然後再pooling,但會帶來較大的計算量,所以作者設計了一個並行雙分支的結構Grid Size Reduction來取代max pooling。

1558698302811

1558698431338

網路結構

img

figure5、figure6、figure7分別表示上圖的b、c、d,每種block之間加入Grid Size Reduction。

1558698621846

實驗結果

Inceptionv2達到23.4%,而Inceptionv3是指在Inceptionv2上同時使用RMSProp、Label Smoothing和分解7x7卷積、輔助分類器使用BN。

1558686108083

InceptionV3

Rethinking the Inception Architecture for Computer Vision

核心思想

作者指出,輔助分類器在訓練即將結束時準確度接近飽和時才會有大的貢獻。因此可以作正則化regularizes。

  • V3在V2上作了如下改進,見V2實驗結果:
    1. RMSProp Optimizer
    2. 分解7x7的卷積
    3. 輔助分類器採用BatchNorm
    4. Label Smoothing,防止過擬合。

實驗結果

1558681467663

InceptionV4

Inception-ResNet and the Impact of Residual Connections on Learning

這篇文章結合ResNet和Inception提出了三種新的網路結構

  1. Inception-ResNet-v1:混合版Inception,和InceptionV3有相同計算成本。
  2. Inception-ResNet-v2:計算成本更高,顯著提高performance。
  3. InceptionV4:純Inception變體,無residual連線,媲美Inception-ResNetV2

核心思想

  • InceptionV4是對原來的版本進行了梳理,因為原始模型是採用分割槽方式訓練,而遷移到TensorFlow框架後可以對Inception模組進行一定的規範和簡化。

網路架構

  • Stem:Inception-ResNetV1採用了top,Inceptionv4和Inception-ResNetV2採用了bottom。

img

  • Inception modules A,B,C

img

  • Reduction Blocks A,B

img

  • Network

1558687320681

Inception-ResNet

核心思想

  • 受ResNet啟發,提出一種混合版的Inception。Inception-ResNet有v1、v2版本。
    1. Inception-ResNetV1計算量與InceptionV3相似,Inception-ResNetV2計算量與InceptionV4相似。
    2. 它們有不同的steam。
    3. 它們的A、B、C模組相同,區別在於超引數設定。

img

當卷積核數量超過1000時,更深的單元會導致網路死亡。因此為了增加穩定性,作者對殘差啟用值進行0.1-0.3的縮放。

網路架構

  • Steam:見InceptionV4
  • Inception-ResNet Module A,B,C

img

  • Residual Blocks A,B

img

  • Network

1558688704111

實驗結果

1558688933305

Xception

核心思想

Xception: Deep Learning with Depthwise Separable Convolutions

  • 借鑑depth wise separable conv改進InceptionV3。

Inception基於假設:卷積時將通道和空間卷積分離會更好。其1x1的卷積作用於通道,3x3的卷積同時作用於通道和空間,沒有做到完全分離。

Xception(Extream Inception)則讓3x3卷積只作用於一個通道的特徵圖,從而實現了完全分離。

InceptionV3到Xception的演化

1558690123450

1558690140937

1558690150713

1558690159562

Xception與depthwise separable conv的不同之處:

  1. depthwise separable conv先對通道進行卷積再1x1卷積,而Xception先1x1卷積,再對通道卷積。
  2. depthwise separable conv兩個卷積間不帶啟用函式,Xception會經過ReLU。

網路架構

1558690223181

實驗結果

1558690259737

1558690273755

總結

  • GoogLeNet即InceptionV1提出了Inception結構,包含1x1、3x3、5x5的conv和pooling,使網路變寬,增加網路對多尺度的適應性。

  • InceptionV2提出了Batch Normalization,使輸出歸一化為N(0,1)分佈,從而加快收斂。並且提出了卷積分解的思想,將大卷積分解為小卷積或非對稱卷積,從而降低計算量。
  • InceptionV3在InceptionV2的基礎上做了一些改進,繼續分解7x7卷積、Label Smoothing,並在輔助分類器中也採用BN。
  • InceptionV4重新考慮了InceptionV3的結構,降低了不必要的計算量,純Inception,未引入Residual連線,準確性媲美Inception-ResNetv2。
  • Inception-ResNet是Inception和Residual Connection的結合,效能有所提升。其有兩個版本v1、v2,v1的計算量跟InceptionV3相似,v2的計算量跟InceptionV4相似。

  • Xception借鑑了depth wise separable conv改進InceptionV3,將空間和通道完全分離,從而提升了效能,降低了引數量。

參考

  • paper

[1]Szegedy C, Liu W, Jia Y, et al. Going deeper with convolutions[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2015: 1-9.

[2]Ioffe S, Szegedy C. Batch normalization: Accelerating deep network training by reducing internal covariate shift[J]. arXiv preprint arXiv:1502.03167, 2015.

[3]Szegedy C, Vanhoucke V, Ioffe S, et al. Rethinking the inception architecture for computer vision[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 2818-2826.

[4]Szegedy C, Ioffe S, Vanhoucke V, et al. Inception-v4, inception-resnet and the impact of residual connections on learning[C]//Thirty-First AAAI Conference on Artificial Intelligence. 2017.

[5]Chollet F. Xception: Deep learning with depthwise separable convolutions[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2017: 1251-1258.

  • blog

A Simple Guide to the Versions of the Inception Network

Inception模型進化史:從GoogLeNet到Inception-ResNet

關於Xception,你需要知道這些

相關文章