1. 程式人生 > 實用技巧 >論文閱讀:Rethinking the Inception Architecture for Computer Vision

論文閱讀:Rethinking the Inception Architecture for Computer Vision

論文閱讀:Rethinking the Inception Architecture for Computer Vision

這篇論文是Inception 結構的一次改進,作者Christian Szegedy基於Inception提出了進一步提升卷積網路效能的幾點原則,並結合實驗對所提出的幾點原則進行論證,進而提出了Inception-v2以及Inception-v3

摘要

作者提到雖然擴大模型,增加計算能力可以在資料集充分的情況下提升卷積網路模型的效能,但是對於移動端的視覺任務以及大資料的任務場景來說,降低引數數量、提高計算效率依然是值得探討的因素。

作這在這篇文章中探討了通過因子卷積(Factorized Convlution)以及進一步的正則化(aggressive regularization)來保證增加的算力的計算效率,從而進一步括大模型的方法。

作者基於上訴方法進行對比實驗,選擇ILSVRC2012 classification作為benchmark,獲得了更好的效能

1、引言

作者提到,自從AlexNet出現以來,卷積神經網路迅速成為視覺任務的主流方法,在相當多的領域有廣泛的應用。提升網路效能的方法常常是構造更深、更寬的架構。此外,作者還發現,在分類任務上的效能提升常常可以促進其他任務領域的提升。

相比起VGG及其改進版本,Inception結構要求的計算量低,更適合於大資料場景。然而Inception結構本身的複雜性使得它很難在網路中做出改變。單純地增加Inception結構的規模會使得計算效率下降。例如,若僅僅將Inception結構中的卷積核的數量變為原來的兩倍,那麼計算的代價和引數數量都將變為原來的4倍,這在實際的大資料場景下是沒有意義的,尤其是在模型效能提升很小的情況下。

故此,作者提出了一些被證明有用的、用於擴充套件網路結構的一般性準則和優化方法。作者也提到,雖然提出的一般性準則以及優化方法並不僅限於在Inception結構中使用,但是由於Inception本身的降維、並行架構特點,Inception結構對於架構中相鄰的元件之間的變化敏感度不高,故此這些準則或優化方法的效果能夠在Inception結構中更容易觀察到。

2、通用的設計原則

作者基於大量的實驗提出了設計卷積網路架構的幾點通用準則。

  1. 避免特徵表達瓶頸,特別是在網路的前幾層。通俗來說,從輸入層到輸出層應該避免特徵的極度壓縮,各層的特徵表示應該緩慢減小。
  2. 高維的特徵表示更容易在網路中區域性處理。增加每個卷積塊的啟用有利於更多解耦特徵,這樣能夠加快網路的訓練;
  3. 在低維特徵中進行空間聚合嵌入不會對模型的特徵表達構成大的影響,例如在進行3x3卷積之前可以使用1x1卷積進行降維(空間聚合),這樣做可以降低計算量卻不會對特徵表達造成影響。關於這一點,作者的推斷是相鄰神經元之間的強相關性可以使得執行降維操作時資訊丟失較少。
  4. 平衡網路的深度和寬度。同時增大網路的深度和寬度可以提高模型的效能,但是會帶來計算的複雜性。

上述的一般性準則從理論上是可行的,但對於具體的模型架構來說需要進行進一步的實驗論證。

3、大濾波器的分解卷積

從卷積的特徵輸出來看,相鄰的啟用之間代表了較高的相關性,因此在聚合之前進行空間降維也近似於壓縮區域性特徵。在這篇文章中,作者探究了不同設定下的分解卷積。通過分解卷積在減少引數數量的同時可以得到更多的解耦特徵,加快網路的訓練。同時,節省下來的空間、計算資源可以用於進一步增加捲積核的尺寸,以達到代價基本不變下的更高效能。

3.1 分解成更小的卷積

在原始的Inception結構中,作者將5x5卷積使用兩層串聯的3x3卷積進行替代,在相同的感受野下節省了計算複雜性,並進一步增加了非線性。作者對分解卷積進行了進一步地論證,提出了兩個關鍵的問題:

  1. 分解卷積是否會造成特徵表達的損失?
  2. 如果主要目標是對計算的線性部分進行分解,是否建議在第一層保持線性啟用?

作者針對這兩個問題進行了控制實驗,在進行對比的兩個Inception架構中,一個使用分解卷積的兩層啟用函式分別是linear + Relu, 另一個兩層都使用Relu,對比結果如下:

pic01
實驗結果表明,使用兩層Relu啟用的分解卷積效能更好,作者將這種提升歸因於網路可學習的空間增強了。

3.2 非對稱分解卷積

以上所進行的卷積分解都是對稱的,作者進一步探討了非對稱的分解卷積方法。做法就是將nxn的卷積變成nx1和1xn串聯來代替。例如,3x3的卷積可以被3x1、1x3的卷積替代:

pic02

一個3x3的patch經過3x1的卷積以後得到1x3的特徵輸出,再經過1x3的卷積得到1x1的特徵輸出,這樣相當於直接進行3x3的卷積。通過這樣的方式,節省了33%的引數。通用的Inception非對稱分解卷積示意如下:

pic03

4、使用輔助分類器

在GoogleNet中,作者為了減緩梯度消失,加快模型收斂,在兩層Inception輸出後使用了兩個輔助分類器,詳細可參考(論文閱讀: Going deeper with convolutions)。作者發現,使用輔助分類器時對訓練的初期並沒有促進收斂的作用,直到訓練後期,使用輔助分類器的效果才凸顯出來。

另一方面,作者在實驗中移除了較低層次的輔助分類器後,在模型效能上並沒有負面影響。這兩點表明,使用輔助分類器並不能對低階特徵的演化有促進作用。作者在實驗中還發現,把輔助分類器的分支改成批量歸一化(Batch Normalization)或者加上dropout,可以提升主分類器的效能,因此作者更傾向於將輔助分類器看成是正則化。

5、高效下降特徵圖尺寸

作者提到,一般來說在CNN中常常會使用一些pooling操作來降低特徵圖的尺寸,但是為了避免特徵表達瓶頸,一般會在pooling前增加捲積核的個數進行stride為1的卷積(其實就是拓展通道數),然而這樣做會導致計算量增加。另外一種可能的做法是帶卷積的pooling,就是先卷積,再經過卷積拓展通道數。

pic04

作者給出了兩種降低特徵圖尺寸的方法,左邊的方法計算量低,但是違背了原則(1)不能引入特徵表達瓶頸,右邊的方法計算上更加複雜。(其實我並不是很理解這個特徵瓶頸,在我看來表達能力與計算量實在是魚和熊掌。。。)

隨後作者提出了兩個模組並行的思路,一個卷積模組C,一個降維模組P,stride都為2,將兩個模組同時應用於特徵圖,再將輸出再通道上進行連線。這樣相當於將原始的Inception結構內的Pooling(stride 2)改成了右邊的並行方案。

pic05

6、Inception-v2

作者基於以上的分析與所提出的通用性準則提出了改進後的Inception-v2架構:

pic06

相比起Inception-v1結構,這裡將開始的7x7卷積使用3個3x3卷積替代,在後面的Inception模組中分別使用了三種不同的模式:

  • 第一部分輸入的特徵圖尺寸為35x35x288,採用了圖5中的架構,將5x5以兩個3x3代替。
    pic07

  • 第二部分輸入特徵圖尺寸為17x17x768,採用了圖6中nx1 + 1xn的結構

  • 第三部分輸入特徵圖尺寸為8x8x1280, 採用了圖7中所示的並行模組的結構

pic08

Inception-v2架構上為42層,計算量只是Inception的2.5倍。

7、通過標籤平滑進行模型正則化

作者提出了一種通過向真實資料標籤分佈加入噪聲的方式來進行正則化,抑制過擬合問題。一般地,資料標籤都是以One-hot形式編碼,正確類別標記為1,錯誤標籤標記為0,使用交叉熵損失函式時,其損失函式為:
l o s s = − ∑ k = 0 K log ⁡ ( p ( k ) ) q ( k ) loss = -\sum^{K}_{k = 0}{\log(p(k))q(k)} loss=k=0Klog(p(k))q(k)
其標籤分佈是一個狄拉克函式: q ( k ) = { 0 k = y 1 k ≠ y q(k) = \begin{cases} 0 & k = y \\ 1 & k \neq y \end{cases} q(k)={01k=yk=y , 最小化 l o s s loss loss 相當於最大化正確標籤的對數似然。而預測分佈 p ( k ) p(k) p(k) 是通過模型得分輸出 z k z_k zk 通過softmax函式得到的, p ( k ) → 1 p(k) \rightarrow 1 p(k)1 l o s s loss loss最小,但對於有界的 z k z_k zk 來說無法實現,所以我們只能讓正確標籤的得分遠大於其他標籤,即: z y > > z k z_y >> z_k zy>>zk ,則規範後的概率輸出會讓正確標籤的概率遠遠大於錯誤標籤,這樣做會帶來兩個問題:

  • 過擬合:因為模型使得正確標籤的概率足夠大
  • 降低模型的泛化能力

所以作者提出不使用原始的標籤概率分佈 q ( k ) q(k) q(k) ,進而考慮標籤的真實分佈 u ( k ) u(k) u(k) 與平滑指數 $\epsilon $ 來修正 q ( k ) q(k) q(k), 得到新的標籤概率分佈: q ′ ( k ) = ( 1 − ϵ ) q ( k ) + ϵ u ( k ) q^{'}(k) = (1 - \epsilon)q(k) + \epsilon u(k) q(k)=(1ϵ)q(k)+ϵu(k) , 一般來說 u ( k ) u(k) u(k) 為均勻分佈, 即
q ′ ( k ) = ( 1 − ϵ ) q ( k ) + ϵ K q^{'}(k) = (1 - \epsilon)q(k) + \frac{\epsilon}{K} q(k)=(1ϵ)q(k)+Kϵ
一般來說 K K K 是類別數, 而 ϵ \epsilon ϵ 取值較小,這樣就保證了非正確標籤的真實概率不為0,這樣做的好處是可以防止正確標籤的預測概率遠遠大於錯誤標籤,因為在這種情況下,錯誤標籤的對數 log ⁡ ( p ( k ) ) \log(p(k)) log(p(k)) 不能被忽略, 當正確標籤的預測概率趨於1,而其他標籤的概率趨於0時, 損失函式會是一個很大的值。

作者的實驗證明,使用標籤平滑歸一化(LSR)可以讓模型效果有略微提升。

8、訓練方法

最優模型的優化方法:RMSProp + learning rate decay(0.9) , 同時使用了閾值為2的梯度截斷使得訓練更加穩定。

9、在低解析度輸入中的效能

對於一些視覺任務,例如目標檢測而言,其中的一個難點就在於在影象中低解析度的目標難以檢測。常規的方法是對這些使用更大感受野來進行卷積,以提高在低解析度輸入上的識別準確率。但是這很難說明效能的提升是來自於感受野的擴大還是模型能力及計算量的增加。所以引出的個問題是在保持計算量不變的情況下,更大的感受野對於模型的效能有多大的影響? 作者對此進行了實驗驗證,由此設計了三組實驗,三組實驗感受野逐步下降而計算量保持不變:

  • 299x299的感受野, stride = 2, 加上maxpooling
  • 151x151的感受野, strde = 1, 加上maxpooling
  • 79x79的感受野, stride = 1, 不進行maxpooling

實驗對比了三種不同方式下的準確率:

pic09

實驗表明雖然感受野增大,但是在保持計算量不變的情況下模型效能相差不大(我覺得還是挺大的。。。)

10、實驗及對比

在Inception-v2的基礎上,作者逐步加上了RMSprop優化、LSR 與 BN-auxilary, 形成了Inception-v3,在單尺度crop的輸入下,最終模型的結果如下:

pic10
同時也將Inception-v3進行了多尺度的訓練,在單模型下的對比結果如下:

pic11

進一步地,Inception-v3進行模型融合(ensemble)後與其他模型做對比:

pic12

可以看到Inception-v3在分類任務上都獲得了更好的效能!

11、結論

這篇文章主要在一下幾個方面做出貢獻:

  1. 改進原有的Inception結構,使得CNN模型在分類任務上獲得更高的效能
  2. 演示了即使是低解析度的輸入也可以達到較好的識別效果
  3. 研究瞭如何進行有效的分解卷積以及更進一步的降維,在保證效能的前提下節省計算量
  4. 低引數、額外正則化、BN輔助分類器和LSN的結合可以在相對較小的資料集上訓練高效能的網路模型

參考

  1. 論文地址
  2. 程式碼參考