點擊上方「深度學習工坊」,「星標」或"置頂"
關鍵時刻,第一時間送達
作者: 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
歡迎點讚、收藏和轉發
▲長按關注我們
歡迎點讚!