Xception

論文:https://arxiv.org/abs/1610.02357
代碼:https://keras.io/applications/#xcepti

1 摘要

本文中作者介紹了Inception結構可以看作是介於普通卷積操作和深度可分卷積的中間。深度可分卷積由逐層卷積和逐點卷積組成。深度可分卷積可以理解成具有最多層的Inception結構。作者使用深度可分卷積代替Inception結構形成了本文的Xception結構,在ImageNet數據集上效果略優於Inception V3,但在包含17000類的350百萬圖像的數據集上效果遠遠好於Inception V3.Xception結構和Inception V3具有相同的參數數量,因此獲得的性能提升不是來自於網絡容量的增加,而是來自於對模型參數的更有效地利用。

本文谷歌出品。

2 簡介

近年來,CNN以經成爲了計算機視覺領域的主流算法,開發設計具有良好性能的CNN已經引起了廣泛的重視。

CNN的設計起源於LeNet,它只是堆砌卷積層用於特徵提取,使用最大池化層用於空間下采樣。這個思想在2012年的AlexNet模型中再次體現,將卷積操作和最大池化操作交叉使用,從而使得學得的CNN模型在各空間尺度學習到了豐富的特徵。在後續各年的ILSVRC比賽中,以ZFNet和VGGNet爲例,設計的CNN結構越來越深。

在2014年,谷歌在GoogleNet論文中設計了稱之爲Inception的結構,後續進一步提出了Inception V2,Inception V3,最近又結合ResNet提出了Inception-ResNet。Inception結構的提出受NIN網絡的啓發。自從Inception結構提出以來,其已經成爲了在ImageNet數據競賽上性能最好的一族模型,同樣在谷歌內部的數據集JFT-300M上也取得了良好的性能。

Inception模塊的經典結構如下圖所示,該結構也在Inception V3論文中進行了使用。
在這裏插入圖片描述
Inception結構從概念上看類似於卷積操作,都是作爲特徵提取器進行使用。但是其可以在使用更少參數的情況下提取更加豐富的特徵。它是如何做到的?它和普通卷積有什麼區別?使用Inception結構時應該遵守什麼設計策略?

2.1 Inception結構

CNN中的卷積層使用3維的卷積核,分別是寬、高和通道三個維度。所以,單個卷積核同時進行跨通道的相關操作和空間上的相關操作。

Inception模塊的核心思想是通過將跨通道的相關操作和空間上的相關操作分解爲一系列的獨立操作,從而使得特徵提取過程更加高效。具體來說,如Fig. 1所示,Inception結構中通過一系列的1×11 \times 1卷積實現跨通道的相關操作。將原始的輸入數據映射到比原數據空間更小的3個或4個獨立空間。然後通過常規的3×33 \times 35×55 \times 5卷積將所有的相關操作映射到更小的3維空間。實際上,Inception結構的核心思想是跨通道的和空間相關操作完全可以解耦(獨立進行)

在這裏插入圖片描述
考慮如圖2所示的簡化版本的Inception結構,只使用單個尺寸的卷積核,沒有使用平均池化操作。如圖3所示,該Inception結構可以理解成先進行一個大的1×11 \times 1卷積操作,然後在將輸出通道劃分爲多個非重疊部分,分別進行空間卷積。

在這裏插入圖片描述基於上述的觀察,可以提出幾個問題:一是各部分的通道數量有什麼影響?二是是否應該提出一個比Inception結構更加強的假設,假設跨通道相關操作和空間相關操作完全可以獨立進行?

2.2 Inception結構介於普通卷積和深度可分卷積之間

基於上一節最後提出的強假設,可以得到如圖4所示的示例,是否應該先使用1×11 \times 1卷積進行跨通道相關操作,然後再在各輸出通道獨立進行空間相關操作?
在這裏插入圖片描述圖4所示的Inception過程幾乎等同於深度可分卷積。深度可分卷積最早2014年被應用與神經網絡設計,並在2016年被Tensorflow實現之後,應用越來越廣泛。

深度可分卷積,如出現在MobeilNet論文中的下圖所示,在Tensorflow和Keras中常被成爲分離卷積,就是先進行逐層卷積 — 在輸入數據的每一個通道獨立進行空間卷積,然後再進行逐點卷積 — 使用1×11 \times 1卷積將逐層卷積的輸出映射到新的通道空間。圖像處理過程中一般將深度可分卷積稱之爲分離卷積。
在這裏插入圖片描述分離卷積和圖4所示的極端版本的Inception結構的區別主要有兩點:

  • 操作順序不同:分離卷積一般是先進行逐層操作再進行逐點操作,但這裏的Inception結構則是先進行1×11 \times 1的逐點卷積;
  • 在第一個卷積後是否進行非線性處理:在Inception中,每一個卷積層後都使用了ReLU進行非線性映射,但是在分類卷積中一般沒有使用非線性映射。

作者認爲第一個區別是不重要的,因爲是在重複堆砌Inception結構,至於第二個區別的影響會在實驗部分進行驗證(Fig. 10)。

作者認爲在其他方面Inception結構也可以認爲是介於普通卷積和分離卷積之間,區別是應用空間卷積的獨立通道的數目。常規卷積所有的輸入通道一起處理,分離卷積單個通道單獨處理,Inception結構介於兩者之間,將數百個輸入通道劃分爲3或4部分進行處理

根據上面的介紹,作者認爲可以用分離卷積代替Inception結構構建Inception網絡族。作者就基於該思想對原有的Inception V3網絡進行了改進,在兩個圖像分類任務上取得了一定的提升。

3 Xception網絡

作者完全基於分離卷積設計了Xception結構。之所以這樣設計是基於一個假設 — 跨通道卷積和空間卷積是完全獨立的。因爲該假設是Inception結構的特例,因此作者稱之爲Xception,表示特殊的Inception結構。

下圖(Fig. 5)給出了完整的Xception網絡。
在這裏插入圖片描述Xception網絡包含36個卷積層。在實驗部分使用logistic迴歸進行圖像分類,一個可選的細節是是否要在logistic迴歸之前使用全連接層。36個卷積層分爲了14塊,除了第一個和最後一個塊之外,其他塊都包含線性殘差連接。

簡言之,Xception結構是包含殘差連接的分離卷積層的堆砌。這使得模型非常易於實現,代碼https://keras.io/applications/#xcepti。

4 實驗

由於Xception結構和Inception V3具有相近的參數數量,因此作者將兩者進行了比較,這樣兩者之間任何的性能差異都不是由於模型容量不同所造成,而是由於不要模型的性能差異造成。作者在ImageNet和JFT-300M數據集上進行了性能對比。

4.1 JFT數據集

JFT數據集是谷歌內部的數據集,包括超過350Million的17000類高分辨率圖像。爲了驗證在JFT數據集上訓練的模型的性能,作者在FastEval14K數據集上進行驗證。

FastEval14K數據集包括14000張圖像,標註了6000類標籤。平均每幅圖像有36.5個label。在該數據集上,使用Mean Average Percision(MAP@ 100)來衡量最大的100個預測結果,同時使用一個score值來衡量每一類對MAP@ 100的貢獻大小,並用該分數評估這個類別在社交媒體圖像中是否常見。 此評估程序旨在捕獲社交媒體上頻繁出現的標籤的性能,這對Google的生產模型至關重要。

4.2 最優化參數

在ImageNet和JFT數據集上使用了不同的最優化參數:
在ImageNet數據集上,使用動量爲0.9的SGD最優化,初始學習率0.045,每2個epoch學習率變爲原來的0.94倍;
在JFT數據集上,使用動量爲0.9的RMSprop優化,初始學習率0.001,每處理3百萬圖像學習率變爲原來的0.9倍。

對Inception V3和Xception結構使用了相同的最優化參數,這些參數是Inception V3的最優參數,但並不是Xception結構的最優參數。

4.3 正則化參數

  • 權重衰減:Inception V3結構使用了係數爲4e-5的L2正則化,Xception結構的L2正則化係數爲1e-5,對於ImageNet和JET數據集使用的都是1e-5,沒有進行最優參數調節;
  • Dropout:對ImageNet數據集,在logistic迴歸層之前使用了係數爲0.5的dropout層,對JFT數據集,因爲有充足的訓練樣本,所有沒有使用dropout;
  • 附加輸出:在Inception V3結構中,使用了附加輸出進行分類模型的訓練,該附加輸出也是一個額外的正則化措施。但本文中的Inception V3和Xception網絡都沒有使用該措施。

4.4 訓練設備

使用Tensorflow在60塊NVIDIA K80顯卡上訓練。對ImageNet數據集,使用了同步梯度下降和數據並行以獲得最佳分類性能。JFT數據集訓練時使用了異步梯度下降以加速訓練過程。ImageNet模型訓練需要3天,JFT模型訓練需要接近一個月。

4.5 Xception和Inception V3實驗結果對比

4.5.1 分類性能對比

所有的測試都是基於單個模型、單個測試圖像crop進行。

ImageNet的對比實驗是在驗證集上進行的。JFT的實驗是進行了3千萬次迭代,而不是訓練到完全收斂。在JFT數據集上,訓練了兩個版本的模型,分別是不包含全連接層和包含兩個4096個神經元的全連接層。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在ImageNet數據集上,Xception略好於Inception V3,且優於ResNet-50,ResNet-101,ResNet-152。在JFT數據集上,使用FastEval14K MAP@100度量,Xception比Inception V3提升了4.3%。

相比Inception V3,Xception網絡在JFT數據集上的提升要比在ImageNet數據集上的提升更大。作者認爲這是因爲Inception V3結構主要就是針對ImageNet數據集進行設計的,可能存在了一定程度的過擬合。但沒有任何一個模型是針對JFT數據集進行設計的。本文的實驗並沒有針對JFT數據集選取最優的正則化參數和最優化參數,若進行最優參數的選取,有可能Xception相比Inception V3的提升會更大。

4.5 模型大小和運算速度

在這裏插入圖片描述在ImageNet數據集上比較了設計的模型的參數數量和每秒鐘在60塊K80上的迭代次數。Xception參數略少,但是訓練速度略慢,這主要是由於Xception的實現還可以繼續優化。Inception V3和Xception具有相近的參數數量,因此性能的提升不是來自於模型容量的擴充,而是設計了性能更優的模型。

4.6 殘差連接的作用

在這裏插入圖片描述爲了衡量Xception結構中殘差連接的作用,作者在ImageNet數據集上設計了不包含全連接層及殘差連接版本的Xception網絡。模型對比結果如上圖Fig. 9所示。殘差連接已經被證明在幫助模型收斂上是必需的,對於模型的訓練速度和最終性能都有正面作用。但是我們的實驗結果表明,使用相同的最優化參數對非殘差版本的模型進行訓練是不合理的,使用針對非殘差版本的模型選取更合適的參數可以取得更優的結果。

另外,上述實驗只是針對該模型證明了殘差連接的意義。但是,對於堆砌分離卷積獲取模型而言,殘差連接不是必需的。作者還設計了無殘差連接、使用分離卷積的的VGG版本的模型,在相同參數數量的情況下在JFT數據集上取得了比Inception V3更好的性能。

4.7 在逐點卷積之後使用中間層激活函數的作用

在這裏插入圖片描述
圖10給出了在逐點卷積後使用ReLU、ELU激活函數和不使用激活函數對模型訓練過程的影響。結果表明,不使用非線性激活函數可以使得模型訓練收斂的更快且可以取得更好的分類效果。

作者認爲這是一組很有意義的對比實驗,因爲在Inception實驗中曾經得到過相反的結論。作者認爲這可能是因爲在逐點卷積之後,要應用空間卷積操作,那麼逐點卷積結果的通道數對是否應用非線性函數有決定性的作用。如果逐層卷積輸出的通道數很大,那麼應用非線性激活函數是有用的。但如果逐層卷積輸出的通道數很小,例如分離卷積中逐通道進行空間卷積,那麼使用非線性激活造成了信息丟失,起到了反向作用。

5 後續研究方向

在普通卷積和分離卷積之間,存在一箇中間形式,主要是由應用空間卷積的通道數目決定。從這個視角出發,Inception是一種特殊形式的分離卷積。本文的實驗證明了極端形式的Inception結構 — 分離卷積要由於普通的Inception結構。但是,在分離卷積之外,可能還存在其他形式的性能更好的卷積。這值得後續繼續研究。

6 總結

普通卷積一次性處理輸入數據的所有通道,分離卷積每次對輸入數據的單個通道進行空間卷積,他們都是分離卷積的特殊形式。Inception結構介於兩者之間。

本文用分離卷積代替Inception結構構建Xception網絡,和Inception V3網絡具有相近的參數數量,但是在ImageNet和JFT數據集上都取得了更好的分類性能。

作者認爲分離卷積可能會成爲未來卷積神經網絡設計的基礎。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章