經典神經網絡 | 從Inception v1到Inception v4全解析

點擊上方「計算機視覺cv」便可「進入公衆號」
web

重磅乾貨第一時間送達微信

本文介紹了 Inception 家族的主要成員,包括 Inception v一、Inception v2 、Inception v三、Inception v4 和 Inception-ResNet。它們的計算效率與參數效率在全部卷積架構中都是頂尖的。網絡

Inception 網絡是CNN分類器發展史上一個重要的里程碑。在 Inception 出現以前,大部分流行 CNN 僅僅是把卷積層堆疊得愈來愈多,使網絡愈來愈深,以此但願可以獲得更好的性能。架構

例如AlexNet,GoogleNet、 VGG-Net、ResNet等都是經過加深網絡的層次和深度來提升準確率。app

GoogLeNet 最大的特色就是使用了 Inception 模塊,它的目的是設計一種具備優良局部拓撲結構的網絡,即對輸入圖像並行地執行多個卷積運算或池化操做,並將全部輸出結果拼接爲一個很是深的特徵圖。由於 1*一、3*3 或 5*5 等不一樣的卷積運算與池化操做能夠得到輸入圖像的不一樣信息,並行處理這些運算並結合全部結果將得到更好的圖像表徵。編輯器

Inception常見的版本有:性能

  • Inception v1
  • Inception v2 和 Inception v3
  • Inception v4 和 Inception-ResNet

每一個版本都是前一個版本的迭代進化。瞭解 Inception 網絡的升級能夠幫助咱們構建自定義分類器,優化速度和準確率。學習

Inception v1

Inception v1首先是出如今《Going deeper with convolutions》這篇論文中,做者提出一種深度卷積神經網絡 Inception,它在 ILSVRC14 中達到了當時最好的分類和檢測性能。測試

Inception v1的主要特色:一是挖掘了1 1卷積核的做用*,減小了參數,提高了效果;二是讓模型本身來決定用多大的的卷積核flex

1* 1卷積

1* 1卷積

1* 1卷積不只能夠減小神經網絡的參數量,還能夠壓縮通道數,大大提升了計算效率。

把不一樣大小的卷積核組合在一塊兒

把不一樣的卷積核組合在一塊兒,不只能夠增大感覺野,並且還能夠提升神經網絡的魯棒性。在一層裏把不一樣大小的卷積核疊在一塊兒後,意味着一層裏能夠產生不一樣大小的卷積核處理以後的效果,也意味着不用人爲的來選擇這一層要怎麼卷,這個網絡本身便會學習用什麼樣的卷積(或池化)操做最好。

下面是卷積神經網絡Inception模塊的基本組成部分:

Inception v2

Inception v2 和 Inception v3 來自同一篇論文《Rethinking the Inception Architecture for Computer Vision》,做者提出了一系列能增長準確度和減小計算複雜度的修正方法。

將5* 5卷積分解爲兩個3* 3卷積

將 5×5 的卷積分解爲兩個 3×3 的卷積運算以提高計算速度。如此能夠有效地只使用約(3x3 + 3x3)/(5x5)=72%的計算開銷。下圖可看出此替換的有效性。

因此升級後的Inception模塊以下圖所示:

最左側前一版 Inception 模塊中的 5×5 卷積變成了兩個 3×3 卷積的堆疊。

將 n*n 的卷積核尺寸分解爲 1×n 和 n×1 兩個卷積。

例如,一個 3×3 的卷積等價於首先執行一個 1×3 的卷積再執行一個 3×1 的卷積。這樣一樣能夠只使用約(1x3 + 3x1) / (3x3) = 67%的計算開銷。下圖是此替換的有效性。做者更進一步發揮想象,認爲任一個nxn conv均可經過替換爲兩個分別爲1xnnx1的convs層來節省計算與內存。

更新後的Inception模塊以下圖所示:

此處若是 n=3,則與上一張圖像一致。最左側的 5x5 卷積可被表示爲兩個 3x3 卷積,它們又能夠被表示爲 1x3 和 3x1 卷積。

模塊中的濾波器組被擴展(即變得更寬而不是更深),以解決表徵性瓶頸。若是該模塊沒有被拓展寬度,而是變得更深,那麼維度會過多減小,形成信息損失。以下圖所示:

Inception v3

Inception v3 整合了前面 Inception v2 中提到的全部升級,還使用了:

  • RMSProp 優化器;
  • Factorized 7x7 卷積;
  • 輔助分類器使用了 BatchNorm;
  • 標籤平滑(添加到損失公式的一種正則化項,旨在阻止網絡對某一類別過度自信,即阻止過擬合)。

Inception v2和Inception v3最終模型

Inception v4

Inception v4 和 Inception -ResNet 在同一篇論文《Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning》中提出來。

Inception v4網絡結構

Inception v4

首先stem分支,能夠直接看論文的結構圖:

而後接下來它們有三個主要的Inception 模塊和Reduction模塊,稱爲 A、B 和 C(和 Inception v2 不一樣,這些模塊確實被命名爲 A、B 和 C)。它們看起來和 Inception v2(或 v3)變體很是類似。

Inception v4 引入了專用的「縮減塊」(reduction block),它被用於改變網格的寬度和高度。早期的版本並無明確使用縮減塊,但也實現了其功能。

縮減塊 A(從 35x35 到 17x17 的尺寸縮減)和縮減塊 B(從 17x17 到 8x8 的尺寸縮減)。這裏參考了論文中的相同超參數設置(V,I,k)。

直接看其網絡結構:

Inception-ResNet

在該論文中,做者將Inception 架構殘差鏈接(Residual)結合起來。並經過實驗明確地證明了,結合殘差鏈接能夠顯著加速 Inception 的訓練。也有一些證據代表殘差 Inception 網絡在相近的成本下略微超過沒有殘差鏈接的 Inception 網絡。做者還經過三個殘差和一個 Inception v4 的模型集成,在 ImageNet 分類挑戰賽的測試集上取得了 3.08% 的 top-5 偏差率。

(左起)Inception ResNet 中的 Inception 模塊 A、B、C。注意池化層被殘差鏈接所替代,並在殘差加運算以前有額外的 1x1 卷積。

  • 主要 inception 模塊的池化運算由殘差鏈接替代。然而,你仍然能夠在縮減塊中找到這些運算。縮減塊 A 和 Inception v4 中的縮減塊相同。

具體Inception-resnet A、B、C各個模塊網絡結構詳見原論文

針對深網絡結構設計的衰減因子

若是卷積核的數量超過 1000,則網絡架構更深層的殘差單元將致使網絡崩潰。所以,爲了增長穩定性,做者經過 0.1 到 0.3 的比例縮放殘差激活值。

激活值經過一個常數進行比例縮放,以防止網絡崩潰。

Inception-ResNet v1結構

結果精度對比

本文分享自微信公衆號 - 計算機視覺CV(jsjsjcv)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索