一文概覽Inception家族的「奮鬥史」: 從Inception v1到Inception-ResNet

2021-02-13 深度學習工坊

點擊上方「深度學習工坊」,「星標」或"置頂"

關鍵時刻,第一時間送達

作者: Bharath Raj

參與:路、劉曉坤

轉載於:機器之心(almosthuman2014)

本文簡要介紹了 Inception 家族的主要成員,包括 Inception v1、Inception v2 和 Inception v3、Inception v4 和 Inception-ResNet。它們的計算效率與參數效率在所有卷積架構中都是頂尖的,且根據 CS231n 中所介紹的,Inception V4 基本上是當前在 ImageNet 圖像分類任務 Top-1 正確率最高的模型。

Inception 網絡是 CNN 分類器發展史上一個重要的裡程碑。在 Inception 出現之前,大部分流行 CNN 僅僅是把卷積層堆疊得越來越多,使網絡越來越深,以此希望能夠得到更好的性能。

例如第一個得到廣泛關注的 AlexNet,它本質上就是擴展 LeNet 的深度,並應用一些 ReLU、Dropout 等技巧。AlexNet 有 5 個卷積層和 3 個最大池化層,它可分為上下兩個完全相同的分支,這兩個分支在第三個卷積層和全連接層上可以相互交換信息。與 Inception 同年提出的優秀網絡還有 VGG-Net,它相比於 AlexNet 有更小的卷積核和更深的層級。

VGG-Net 的泛化性能非常好,常用於圖像特徵的抽取目標檢測候選框生成等。VGG 最大的問題就在於參數數量,VGG-19 基本上是參數量最多的卷積網絡架構。這一問題也是第一次提出 Inception 結構的 GoogLeNet 所重點關注的,它沒有如同 VGG-Net 那樣大量使用全連接網絡,因此參數量非常小。

GoogLeNet 最大的特點就是使用了 Inception 模塊,它的目的是設計一種具有優良局部拓撲結構的網絡,即對輸入圖像並行地執行多個卷積運算或池化操作,並將所有輸出結果拼接為一個非常深的特徵圖。因為 1*1、3*3 或 5*5 等不同的卷積運算與池化操作可以獲得輸入圖像的不同信息,並行處理這些運算並結合所有結果將獲得更好的圖像表徵。

另一方面,Inception 網絡是複雜的(需要大量工程工作)。它使用大量 trick 來提升性能,包括速度和準確率兩方面。它的不斷進化帶來了多種 Inception 網絡版本的出現。常見的版本有:

每個版本都是前一個版本的迭代進化。了解 Inception 網絡的升級可以幫助我們構建自定義分類器,優化速度和準確率。此外,根據你的已有數據,或許較低版本工作效果更好。

Inception v1

這是 Inception 網絡的第一個版本。我們來分析一下它可以解決什麼問題,以及如何解決。

在《Going deeper with convolutions》論文中,作者提出一種深度卷積神經網絡 Inception,它在 ILSVRC14 中達到了當時最好的分類和檢測性能。該架構的主要特點是更好地利用網絡內部的計算資源,這通過一個精心製作的設計來實現,該設計允許增加網絡的深度和寬度,同時保持計算預算不變。為了優化質量,架構決策基於赫布原則和多尺度處理。作者向 ILSVRC14 提交使用該架構的模型即 GoogLeNet,這是一個 22 層的深度網絡,它的質量是在分類和檢測領域進行了評估。

問題:

從左到右:狗佔據圖像的區域依次減小(圖源:https://unsplash.com/)。

解決方案:

為什麼不在同一層級上運行具備多個尺寸的濾波器呢?網絡本質上會變得稍微「寬一些」,而不是「更深」。作者因此設計了 Inception 模塊。

下圖是「原始」Inception 模塊。它使用 3 個不同大小的濾波器(1x1、3x3、5x5)對輸入執行卷積操作,此外它還會執行最大池化。所有子層的輸出最後會被級聯起來,並傳送至下一個 Inception 模塊。

原始 Inception 模塊。(圖源:https://arxiv.org/pdf/1409.4842v1.pdf)

如前所述,深度神經網絡需要耗費大量計算資源。為了降低算力成本,作者在 3x3 和 5x5 卷積層之前添加額外的 1x1 卷積層,來限制輸入信道的數量。儘管添加額外的卷積操作似乎是反直覺的,但是 1x1 卷積比 5x5 卷積要廉價很多,而且輸入信道數量減少也有利於降低算力成本。不過一定要注意,1x1 卷積是在最大池化層之後,而不是之前。

實現降維的 Inception 模塊。(圖源:https://arxiv.org/pdf/1409.4842v1.pdf)

利用實現降維的 Inception 模塊可以構建 GoogLeNet(Inception v1),其架構如下圖所示:

GoogLeNet。橙色框是 stem,包含一些初始卷積。紫色框是輔助分類器。較寬的部分是 inception 模塊。(圖源:https://arxiv.org/pdf/1409.4842v1.pdf)

GoogLeNet 有 9 個線性堆疊的 Inception 模塊。它有 22 層(包括池化層的話是 27 層)。該模型在最後一個 inception 模塊處使用全局平均池化。

不用多說,這是一個深層分類器。和所有深層網絡一樣,它也會遇到梯度消失問題。

為了阻止該網絡中間部分梯度的「消失」過程,作者引入了兩個輔助分類器(上圖紫色框)。它們對其中兩個 Inception 模塊的輸出執行 softmax 操作,然後在同樣的標籤上計算輔助損失。總損失即輔助損失和真實損失的加權和。該論文中對每個輔助損失使用的權重值是 0.3。

# The total loss used by the inception net during training.
total_loss = real_loss + 0.3 * aux_loss_1 + 0.3 * aux_loss_2

輔助損失只是用於訓練,在推斷過程中並不使用。

Inception v2

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

在這一篇論文中,作者表示非常深的卷積網絡自 2014 年以來就成為了計算機視覺領域的主流,它在各種基準測試中都獲得了非常多的提升。只要有足夠的標註數據,增加模型大小與計算成本可以在大多數任務中快速提升模型質量。在這篇論文中,作者積極探索擴展網絡的方法,旨在通過適當的分解卷積與積極的正則化儘可能高效地利用添加的計算。他們在 ILSVRC 2012 分類任務挑戰賽的驗證集上證明了模型的優秀性能,使用每個推斷過程有 50 億次乘加運算的模型,作者實現了單幀評估 21.2% top-1 和 5.6% top-5 誤差率,且模型的總參數還不到 250 萬。

以下首先介紹 Inception V2。

問題:

解決方案:

最左側前一版 Inception 模塊中的 5×5 卷積變成了兩個 3×3 卷積的堆疊。(圖源:https://arxiv.org/pdf/1512.00567v3.pdf)

此處如果 n=3,則與上一張圖像一致。最左側的 5x5 卷積可被表示為兩個 3x3 卷積,它們又可以被表示為 1x3 和 3x1 卷積。(圖源:https://arxiv.org/pdf/1512.00567v3.pdf)

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

使 Inception 模塊變得更寬。這種類型等同於前面展示的模塊(圖源:https://arxiv.org/pdf/1512.00567v3.pdf)

前面三個原則用來構建三種不同類型的 Inception 模塊(這裡我們按引入順序稱之為模塊 A、B、C,這裡使用「A、B、C」作為名稱只是為了清晰期間,並不是它們的正式名稱)。架構如下所示:

這裡,「figure 5」是模塊 A,「figure 6」是模塊 B,「figure 7」是模塊 C。(圖源:https://arxiv.org/pdf/1512.00567v3.pdf)

Inception v3

問題:

解決方案:

Inception Net v3 整合了前面 Inception v2 中提到的所有升級,還使用了:

Inception v4

Inception v4 和 Inception -ResNet 在同一篇論文《Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning》中介紹。為清晰起見,我們分成兩個部分來介紹。

在該論文中,研究者介紹道,Inception 架構可以用很低的計算成本達到很高的性能。而在傳統的網絡架構中引入殘差連接曾在 2015ILSVRC 挑戰賽中獲得當前最佳結果,其結果和 Inception-v3 網絡當時的最新版本相近。這使得人們好奇,如果將 Inception 架構和殘差連接結合起來會是什麼效果。在這篇論文中,研究者通過實驗明確地證實了,結合殘差連接可以顯著加速 Inception 的訓練。也有一些證據表明殘差 Inception 網絡在相近的成本下略微超過沒有殘差連接的 Inception 網絡。研究者還展示了多種新型殘差和非殘差 Inception 網絡的簡化架構。這些變體顯著提高了在 ILSVRC2012 分類任務挑戰賽上的單幀識別性能。作者進一步展示了適當的激活值縮放如何穩定非常寬的殘差 Inception 網絡的訓練過程。通過三個殘差和一個 Inception v4 的模型集成,作者在 ImageNet 分類挑戰賽的測試集上取得了 3.08% 的 top-5 誤差率。

論文:Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning

論文地址:https://arxiv.org/pdf/1602.07261.pdf

問題:

解決方案:

Inception v4 的 stem 被修改了。這裡的 stem 參考了在引入 Inception 塊之前執行的初始運算集。

圖上部是 Inception-ResNet v1 的 stem。圖下部是 Inception v4 和 Inception-ResNet v2 的 stem。(圖源:https://arxiv.org/pdf/1602.07261.pdf)

(左起)在 Inception v4 中使用的 Inception 模塊 A、B、C。注意它們和 Inception v2(或 v3)模塊的相似性。(圖源:https://arxiv.org/pdf/1602.07261.pdf)

縮減塊 A(從 35x35 到 17x17 的尺寸縮減)和縮減塊 B(從 17x17 到 8x8 的尺寸縮減)。這裡參考了論文中的相同超參數設置(V,I,k)。(圖源:https://arxiv.org/pdf/1602.07261.pdf)

Inception-ResNet v1 和 v2

受 ResNet 的優越性能啟發,研究者提出了一種混合 inception 模塊。Inception ResNet 有兩個子版本:v1 和 v2。在我們分析其顯著特徵之前,先看看這兩個子版本之間的微小差異。

Inception-ResNet v1 的計算成本和 Inception v3 的接近。

Inception-ResNetv2 的計算成本和 Inception v4 的接近。

它們有不同的 stem,正如 Inception v4 部分所展示的。

兩個子版本都有相同的模塊 A、B、C 和縮減塊結構。唯一的不同在於超參數設置。在這一部分,我們將聚焦於結構,並參考論文中的相同超參數設置(圖像是關於 Inception-ResNet v1 的)。

問題:

解決方案:

(左起)Inception ResNet 中的 Inception 模塊 A、B、C。注意池化層被殘差連接所替代,並在殘差加運算之前有額外的 1x1 卷積。(圖源:https://arxiv.org/pdf/1602.07261.pdf)

(左起)縮減塊 A(從 35x35 到 17x17 的尺寸縮減)和縮減塊 B(從 17x17 到 8x8 的尺寸縮減)。這裡參考了論文中的相同超參數設置(V,I,K)。(圖源:https://arxiv.org/pdf/1602.07261.pdf)

激活值通過一個常數進行比例縮放,以防止網絡崩潰。(圖源:https://arxiv.org/pdf/1602.07261.pdf)

原始論文並沒有在求和之後使用批歸一化,以在單個 GPU 上訓練模型(在單個 GPU 上擬合整個模型)。

研究發現 Inception-ResNet 模型可以在更少的 epoch 內達到更高的準確率。

Inception v4 和 Inception-ResNet 的網絡完整架構如下圖所示:

圖上部是 Inception v4 的架構。圖下部是 Inception-ResNet 的架構。(圖源:https://arxiv.org/pdf/1602.07261.pdf)

原文地址:https://towardsdatascience.com/a-simple-guide-to-the-versions-of-the-inception-network-7fc52b863202

歡迎點讚、收藏和轉發

▲長按關注我們

歡迎點讚!

相關焦點

  • 一文讀懂:GoogleNet的Inception從v1到v4的演變
    而假如上一層輸出先經過具有32個通道的1x1卷積層,再經過具有256個輸出的5x5卷積層,那麼輸出數據仍為為100x100x256,但卷積參數量已經減少為128x1x1x32 + 32x5x5x256= 204800,大約減少了4倍。【為什麼會有池化層在其中呢?】
  • 經典神經網絡 | 從Inception v1到Inception v4全解析
    Inception v1的主要特點:一是挖掘了1 1卷積核的作用*,減少了參數,提升了效果;二是讓模型自己來決定用多大的的卷積核。1* 1卷積1* 1卷積1* 1卷積不僅可以減少神經網絡的參數量,還可以壓縮通道數,大大提高了計算效率。把不同大小的卷積核組合在一起
  • Inception模型進化史:從GoogLeNet到Inception-ResNet
    Inception網絡開始於2014年的GoogLeNet,並經歷了幾次版本的迭代,一直到目前最新的Inception-v4,每個版本在性能上都有一定的提升。這裡簡單介紹Inception網絡的迭代史,重點講述各個版本網絡設計所採用的trick,需要說明的是Inception網絡相對複雜一些,因為它採用了各式各樣的較tricky的模塊。
  • 常用CNN網絡(AlexNet,GoogleNet,VGG,ResNet,DenseNet,inceptionV4)適合初學者
    https://github.com/pinae/GoogLeNet-Keras-Test    VGG    https://github.com/geifmany/cifar-vgg    ResNet    https://github.com/raghakot/keras-resnet
  • DBA的福音,SQL審核利器-goinception
    在之前的公司審核引擎用的是去哪兒網開源的inception,由於某些原因,inception長久不更新並且已經不再開源,所以就把目光轉向了goinception。一、goinception簡介使用過inception的人對SQL審核這塊獲取都比較熟悉,作為DBA,審核SQL是日常工作中的很重要的一塊內容,審核好SQL對於後期項目以及資料庫維護上起著至關重要的作用,好比一座大廈沒有堅實的地基支撐,也就無法長期屹立不倒。
  • VGGNet、ResNet、Inception和Xception圖像分類及對比
    VGG16和VGG19VGG16 和 VGG19 網絡已經被引用到「Very Deep Convolutional Networks for Large Scale Image Recognition」(由 Karen Simonyan 和 Andrew Zisserman 於2014年編寫)。
  • 遷移學習人民幣面值識別(附源碼)-InceptionResNetV2
    將訓練好的模型得出的面額識別結果,上傳到TinyMind對應測評系統,得到評分與排名。該文件採用分卷壓縮方式,下載至一個文件夾下解壓縮即可。/output/model-inception_resnet_v0-27.h5Epoch 1/1396/396 [==============================] - 1027s 3s/step -loss: 0.0288 - acc: 0.9957 - val_loss: 0.0118- val_acc: 0.999120000
  • Inception自動審核工具介紹
    該參數控制有警告時是繼續執行還是中止Inception要做的是一個語句塊的審核,需要引入一個規則,將要執行的語句包圍起來,Inception規定,在語句的最開始位置,要加上inception_magic_start;語句,在執行語句塊的最後加上inception_magic_commit;語句,這2個語句在Inception 中都是合法的、具有標記性質的可被正確解析的SQL語句。
  • Inception系列經典卷積神經網絡設計思想回顧
    因此,溫故而知新,了解和借鑑Inception系列經典神經網絡模型的設計思想對我們非常有意義,本文,將帶大家一起回顧從Inception V1到Inception V4的設計思想。BN主要是在訓練時對每一批次的每一通道都進行歸一化操作,學習mean和variance兩個參數,確保數據分布為N(0,1)正態分布,使得模型不需要頻繁的學習適應每一層的數據變化,從而可以在大學習率的情況下,加快訓練速度和收斂速度。
  • Inception SQL 審核的設計思路
    在設計Inception的時候,主要考慮了以下幾個方向:符合程式設計師的習慣屏蔽人工易犯問題兼顧MySQL的語法最完美的編程實現審核執行備份回滾符合程式設計師的習慣    Inception的設計是為了幫助開發人員編寫符合資料庫開發規範的SQL語句,程式設計師是這個工具的主要使用者
  • 明晚九點|MySQL 自動化運維工具 Inception
    鹹魚某上市公司運維開發崗,參與了多個重大項目的開發,見證了近幾年這一行業的發展並致力於其中,熱衷 Python 自動化運維並樂於跟大家分享。項目地址:https://github.com/mysql-inception/inception文檔地址:http://mysql-inception.github.io/inception-document/inception
  • 利用Inception-v3實現汽車分類
    @小白遇見AI 的第 17 篇推文介紹
  • 【深度學習系列】用PaddlePaddle和Tensorflow實現GoogLeNet InceptionV2/V3/V4
    博客專欄:https://www.cnblogs.com/charlotte77/前文傳送門:【好書推薦&學習階段】三個月教你從零入門深度學習【深度學習系列】PaddlePaddle之手寫數字識別【深度學習系列】卷積神經網絡CNN原理詳解(一)——基本原理【深度學習系列】PaddlePaddle之數據預處理
  • 無需數學背景,讀懂ResNet、Inception和Xception三大變革性架構
    這就帶來了你可能已經見過的著名 ResNet(殘差網絡)模塊:ResNet 模塊ResNet 的每一個「模塊(block)」都由一系列層和一個「捷徑(shortcut)」連接組成,這個「捷徑」將該模塊的輸入和輸出連接到了一起。
  • 通過簡單代碼理解卷積模塊:含Inception/ResNet/DenseNet/NASNet
    現在你可能已經很熟悉這一方法了,但在 ResNet 誕生前情況則很不一樣。首先,我們將輸入激活添加到一個列表中,之後進入一個在模塊的深度上迭代的循環。每個卷積輸出也都連接到該列表,這樣後續的迭代會得到越來越多的輸入特徵圖。這個方案會繼續,直到達到所需的深度。
  • AlphaJump - 如何用機器學習去玩跳一跳(二)
    前言上一篇文章,簡單介紹了一下Python框架下如何去玩跳一跳 AlphaJump - 如何用機器學習去玩跳一跳(一)。https://xianzhi.aliyun.com/forum/topic/1881主要通過判斷下一跳的位置和棋子的距離來計算屏幕按壓時間,使得棋子可以精準的抵達下一跳的位置。
  • ResNet, AlexNet, VGG, Inception: 理解各種各樣的CNN架構
    圖像分類的傳統流程涉及兩個模塊:特徵提取和分類特徵提取 指的是從原始像素點中提取更高級的特徵,這些特徵能捕捉到各個類別間的區別。這種特徵提取是使用無監督方式,從像素點中提取信息時沒有用到圖像的類別標籤。常用的傳統特徵包括GIST, HOG, SIFT, LBP等。