Inception 系列 — InceptionV4, Inception-ResNet-v1, Inception-ResNet-v2

李謦伊
謦伊的閱讀筆記
8 min readNov 14, 2020

上篇文介紹了 InceptionV2 及 InceptionV3,本篇將接續介紹 Inception 系列 — InceptionV4, Inception-ResNet-v1, Inception-ResNet-v2 模型

InceptionV4, Inception-ResNet-v1, Inception-ResNet-v2 來自於同一篇論文,作者討論了兩種方式改善網路架構: 純粹使用 Inception 架構、將 Inception 與 ResNet 結合,並比較其效能

論文連接: https://arxiv.org/pdf/1602.07261.pdf

InceptionV4 (2016)

首先討論 InceptionV4 的架構,由好幾個 Inception module 組成,並且在最後 softmax 輸出之前加入了 Dropout (keep 設定值為 0.8),防止過擬合

接下來看 InceptionV4 的子模塊

  • Stem module

Stem 就是替代 InceptionV3 前面層的 3x3 卷積層 (Inception module 前的網路層),並且將結構變得更複雜,輸出的維度也更多 (InceptionV3: 35x35x288,InceptionV4: 35x35x384)

結構中使用了 InceptionV3 提出的池化層與卷積層的併行結構、不對稱卷積核,在減少計算量的同時,不丟失大量特徵訊息。另外也使用 1x1 卷積層來降低維度。其中 module 中的 V 指的是 valid padding,而其餘網路層則是使用 same padding

  • Inception module

InceptionV4 使用與 InceptionV3 一樣的 Inception module 架構,只是個數不同:InceptionV3 分別為 3、5、2個,而 InceptionV4 則是 4 個 Inception-A、7 個 Inception-B、3 個 Inception-C

Inception-A
Inception-B
Inception-C

由於 Inception module 架構更深,因此加入了 Reduction-A 和 Reduction-B 以降低 feature map 尺寸,結構中也是使用併行、不對稱卷積層、1x1 卷積層來降低計算量

Inception-ResNet-v1 (2016)

接著來看 Inception 與 ResNet 結合後的網路架構,作者討論了兩種架構 Inception-ResNet-v1、Inception-ResNet-v2,兩者的整體結構一樣,差別在於 module 結構不太一樣

以下是 Inception 與 ResNet 結合的整體架構

接下來一一討論 Inception-ResNet-v1 內部 module 的結構

  • Stem

結構與 InceptionV3 前面層的卷積層類似,只是將其中一層 3x3 卷積層改為 1x1,並且維度有些不同

  • Inception-ResNet module

這裡的 module 就是將Inception 與 ResNet 結合,而且比 InceptionV4 更多數量,分別有 5 個 Inception-ResNet-A、10 個 Inception-ResNet-B、5 個 Inception-ResNet-C,並且在每一個 Inception-ResNet module 前都加入 Batch Normalization 層

從圖中可以發現 Inception 部分的結構一樣使用不對稱卷積層、1x1 卷積層,但比之前精簡,然後在最後一層使用 1x1 卷積層用來處理維度不一致的問題

Inception-ResNet-A
Inception-ResNet-B
Inception-ResNet-C

Inception-ResNet-v1 一樣也有使用 Reduction-A 和 Reduction-B 來降低 feature map 的尺寸,Reduction-A 使用的跟 InceptionV4 一樣,而 Reduction-B 則是使用以下結構

Reduction-B

介紹完 Inception-ResNet-v1 的架構後,來比較看看 Inception-ResNet-v2 的結構~

Inception-ResNet-v2 (2016)

前面有說到 Inception-ResNet-v1、Inception-ResNet-v2 的整體結構一樣,差別在於內部 module 有所不同。Inception-ResNet-v2 中 Stem、Reduction-A 使用跟 InceptionV4 一樣的架構,其中 Reduction-A 的參數數目不同,下表為 InceptionV4、Inception-ResNet-v1、Inception-ResNet-v2 中的Reduction-A 個別參數所使用的數量

  • Inception-ResNet module

大致架構與 Inception-ResNet-v1 差不多,差別在於維度不同

Inception-ResNet-A
Inception-ResNet-B
Inception-ResNet-C

而用來降低 feature map 尺寸的 Reduction-B 也只差在維度的不同

Reduction-B

另外,作者在使用 ResNet 時發現當 filter 的個數太多 (超過 1000) 時,網路除了會處於不穩定,也會在訓練早期就產生了網路輸出為0的狀態,就算降低學習率或是增加 Batch Normalization 層都沒辦法解決

因此作者在 ResNet 最後的相加之前使用 activation scaling,將輸出做縮放後再做相加,可以使網路在訓練過程中更穩定,其中 activation scaling 的值設定為 0.1~0.3

最後來看 InceptionV3, InceptionV4, Inception-ResNet-v1, Inception-ResNet-v2 的比較結果

  • 模型的訓練方式

1. 使用 TensorFlow 分佈式的機器學習系統在 20 片 NVidia Kepler GPU 上進行訓練

2. 最好的模型使用 RMSProp,設定 decay=0.9, ε=1

3. Learning rate 設定0.045,並且於每兩個 epoch 使用 0.94 的指數率衰減

4. 將訓練中不同時刻的模型取其預測值,並進行平均作為評估模型的方法

由以下結果可以得知 InceptionV3 與 Inception-ResNet-v1 的準確率相當,同時兩者的計算量也差不多;而 InceptionV4 與 Inception-ResNet-v2 的準確率也很接近,兩者的計算量也是差不多的,但是 Inception-ResNet-v1 跟 Inception-ResNet-v2 的收斂速度比 InceptionV3, InceptionV4 還要來的快

由此篇論文的結論來看結構更複雜的 InceptionV4 可以達到更好的準確率,同時也使用了很多技巧來降低計算量,主要以 InceptionV3 提出的併行、不對稱卷積、1x1 卷積層來實現。此外,將 Inception 與 ResNet 結合能夠加快收斂速度,更令人驚豔的是使用更深、層數更多的模型架構,但是計算量跟純粹只有 Inception 的模型差不多

Inception 文章

Inception 系列 — InceptionV2, InceptionV3

Inception 系列 — Xception

--

--