核心貢獻:從Inception的思想:剝離時序卷積和空域卷積 得到啟發,提出了Xception(Extreme Inception),希望能徹底解耦二者。
其他貢獻:
-
本文提供了關於Inception的一種解釋。
-
討論了與現有深度可分離卷積的區別,並指出其最大影響因素是兩層卷積之間的非線性化。
-
在兩個圖像分類數據庫上的效果都超越了Inception V3,但參數量是一樣的。
故事
Inception結構和思想
Inception結構的演進:In-Network[11] => 2014年GooLeNet(V1)[20] => Inception V2[7] => Inception V3[21] => Inception-ResNet[19]。
首先我們應該知道:一般的卷積實際上是在同時完成 通道互相關 和 空域 互相關。
這是基礎。如果這一點不清楚,后面就沒法看啦。
Inception的核心思想,就是解耦這兩個操作:先做多個1×11×1卷積,得到多個通道互相關結果;然后再對這些結果進行空域互相關操作。

看圖應該就明白了。最好能提前熟悉1×11×1卷積的原理和應用。
補充:V3有一些變種的思想是類似的,但不一樣:它是希望解耦height-wise和width-wise的卷積,方法是級聯7×17×1和1×71×7的卷積。
更進一步,以及現有的深度可分離卷積
上圖可以等價為下圖3所示的兩步:
-
用一個1×1卷積,得到很多通道;
-
將這些通道分成幾份(幾百個通道分成3、4份),然后對每一份做正常的卷積(既包含空域,也有一定的通道互相關,但是少很多)。
既然如此,我們為什么不更進一步呢?我們讓空域卷積只在單個通道上操作,即完全不含任何通道互相關信息。如圖4:

得一提的是,TensorFlow和Keras里已經內置了類似的結構,稱為深度可分離卷積。有兩點不同:
-
通道互相關卷積 和 空域卷積 的順序。現存結構中,空域卷積在前。
-
兩層卷積之間是否有ReLU非線性。現存結構中,兩層卷積中間沒有ReLU激活。注意,Inception內每一層卷積后一般都有。
作者將展示:第一點無關緊要,然而第二點非常重要。
Xception結構

-
36層卷積。Entry flow進行一次(8層卷積),Middle flow重復8次(24層卷積),最后是Exit flow(4層卷積)。由於是分類任務,最后跟了FC層和邏輯回歸。
-
一共有14個module包裹這36個卷積層。每個module都有頭尾短連接。
實驗
實驗和V3比較,並且保證參數數量基本一致。優化方法都沿襲V3的方法。
實驗結果:Xception更快、更好。


各模塊的短連接有必要:

在 depthwise 和 pointwise 卷積之間的非線性激活是不好的。取消非線性激活,可以讓收斂速度更快,效果更好:

這一點和Inception的報告是相反的。可能的原因是:Inception是將幾百個通道分成3-4份,每一份都很多。因此非線性對於這種深度學習是有幫助的。但是,Xception的空域卷積只對單通道操作,深度不足,非線性反而會讓信息丟失。
