【論文読み】Xception : Deep Learning with Depthwise Separable Convolutions

Oct 2016, by Francois Chollet (Kerasの作者)
arxiv: https://arxiv.org/abs/1610.02357

## 何がすごい？
・新たなモデル、Xceptionを提案
・Inception V3にImageNetというデータセットで辛勝
・JFTというデータセットで圧勝
・モデルサイズは殆ど変わらず


## Inception概説
Inceptionをつかったモデルの一つである**GoogLeNet**はInception Moduleを積み重ねてできている。
![](https://i.imgur.com/ajuq5ag.png)

* GoogLeNet（とそれに使われたInception Module）は、モデルアーキテクチャを手動で探索せずとも、いろんな深さの層を並列に組んでやって学習すれば自動で探索してくれるのでは？というアイデアに基づいている。
* しかし、これを**チャンネル同士の関係性 (channel correlation) の分離**という別の視点から考察することにより、Xceptionモデルが生まれた。以下に詳説する：

Inception Moduleでは先に1x1 convでチャンネル数を減らし、その後で3x3 convなどをする（図1）。


![](https://gyazo.com/cff7a94eddfd950346a2c6831a071ca4.png)

シンプルにしたのが図2。
これは、**1x1 convの出力チャンネルが3倍あって、それを3x3 convが分担して受け取っている**とも考えられる。
すなわち
![](https://gyazo.com/1206b40f66d9a1f23d6220571f392e48.png)
更に、これを極端(eXtreme)にするならば
![](https://gyazo.com/94f314191c99f09a966a134c90b6686b.png)
こうなる。
3x3 convの数自体は増えるが、それぞれのconvに対するinput channelを少なくしている（**というか1**）ので計算量が激減する。
この時、もはや3x3 convは**1チャンネルしか入力されていない**ので、**チャンネル同士の関係性を見ることはない**。
これをXception Moduleと呼ぶ。

## Inception仮説, Xception仮説

Inception Moduleが正しく動くには、channel correlationと空間同士の関係性 (spatial correlation) の計算が（ある程度）分離可能という仮説が必要。
Xception Moduleが正しく動くには、channel correlationとspacial correlationが**完全に分離可能**という仮説が必要[^how_are_they_split]。

[^how_are_they_split]: 1x1 convでchannel correlationを、3x3 convでspacial correlationを独立に計算しているので

以下豆知識

* Xception はeXtreme inCEPTIONから来ている
* Xceptionは、いわゆる**depthwise separable convolution**にほぼ同じ 
     * チャンネルごとに独立した空間方向convolutionとPointwise (1x1) convolutionのセット
     * つまり、Depthwise separable conv = spacial conv + pointwise conv
* これとは順番が違う（Xception = pointwise + spacial）のと、間に非線形関数（ReLUとかELU）が挟まれないという違いがある。
     * 1つ目の違いはどうでもいい。どうせたくさん積み重ねて使うので
     * 2つめは効果ありかも。図10を参照

![](https://i.imgur.com/48t6m6H.png)

空間方向のコンボリューションをする前、チャンネルがいくつの独立した部分segmentに分かれているかで分類すると……

* 通常のコンボリューションは**すべてのチャンネルが一つ**になっている
* Inception Moduleは**3-4つ**に分かれている
* Xception Moduleは**すべての**チャンネルが独立している

という考察も可能

一番過激なXception仮説に基づいてXception ModelをGoogLeNetと同じくらいのパラメータ数で構築したら圧勝したよ
……というのが今回の理論的バックグラウンド

## 備考
空間的に分離したコンボリューション (**Spacial** separable conv) というのもある (1x7conv → 7x1convみたいなの)

* 歴史は長いらしい（2012年の深層学習の勃興以前から計算量の少ない画像処理手法として使われていた。Separable filterなどで調べよ）
* でもCNN的には性能があまり良くないので最近はあまり使われていないとか

Depthwise separable convを使うアイデア自体はMobileNetで提案されていたとか

* なので、今回の論文の新規性は
     * **間に非線形関数を挟まない**ようにしたこと
          * MobileNetでは挟んでいる[^quotation_from_mobilenet]
          * ![](https://i.imgur.com/eofKPbI.png)

     *    ResNetライクな**Skip connectionを追加**して超深層にしたこと
* あたりか


[^quotation_from_mobilenet]: MobileNetの論文 "... MobileNets use both batchnorm and ReLU nonlinearities for both layers ..."

## アーキテクチャ
![](https://i.imgur.com/vqNxHpi.png)

*    GoogLeNetとかと違って繰り返しが多いのでプログラムするのも簡単

## 結果

* ImageNetで辛勝
![](https://i.imgur.com/uguQ5mi.png)

*    JFT Datasetで圧勝
![](https://i.imgur.com/1mo7olz.png)

* Inception V3はImageNetに強いのかも？
 * 対ImageNetで作られたInception V3はアーキテクチャ自体がImageNetにOverfitしている？

## パフォーマンス
![](https://i.imgur.com/9VoNl8d.png)

パラメータ数的には互角だが、速さ的には負けた……

負けてしまった理由は、depthwise convolutionの計算の効率が通常のconvに比べて悪いからと思われる。CUDNNとかが最適化されれば同等〜より高速になれるかも[^GPU_1x1conv]

[^GPU_1x1conv]: 近年の論文では、そもそも1x1 conv自体がGPUによる計算では効率的でないのであまりやらないほうがいいのではないかという議論もなされている(Lee et al, 2019, [arxiv](https://arxiv.org/abs/1904.09730))

## Residual connectionの効果
![](https://i.imgur.com/biJlo0e.png)

* ありそう
    * 最終的な結果ももちろん違うが、それに加えて、収束もより早くなっている。
    * 論文では述べられていないが、**Non-residualだと最初のあたりでろくに予測できていない。**これは逆伝播を効率的に飛ばすresidual connectionの効果の一つ。
* ただし、OptimizerなどのハイパラをNon-residualに対しては調整してないのでちょっとハンデになってはいる。
* 別にdepthwise convを使ったモデルにresidualが必須というわけではもちろんない
     * convをdepthwiseで置き換えたVGGライクなモデルでも、JFTデータセットに対してはInception V3に勝利

## 非線形関数を挟むか
GoogLeNetだと挟んだほうが性能が上がったらしい……
が、今回は挟むと**下がった**
![](https://i.imgur.com/48t6m6H.png)

* 中間出力のチャンネル深さによるのかもしれないと考察している
     * GoogLeNetだと16~チャンネルあった
     * ![](https://i.imgur.com/jjk9E4y.png)
     * Xceptionは1チャンネル
          * Xception仮説に基づいているので
     * そのため非線形関数を用いることがチャンネル間の情報を「うまく混ぜる」ことよりむしろ情報を落としてしまうことに繋がり有害なのではないか（今回はそもそも1チャンネルなので混ぜない）

## 展望

* Xception仮説が完全に正しいかはわからない
* InceptionとXceptionの間にもっといいモデルがあるかもしれない

## 結論
Inception Moduleは、アーキテクチャ探索を簡単にするために導入されたモデルだったが、それを**「チャンネル方向と空間方向のコンボリューションの分離」**という解釈のもと考察した。
その考察をもとに、**もっと過激に『完全分離可能』を仮定**したモデルを作ってXceptionと名付けた。
depthwise convolutionはInception Moduleと同じような性質(depth/space separation)を持つしプログラムしやすいからこれからますます使われそう（実際よく使われている）

*この記事はMETRICAの内部勉強会用の資料を改稿して作りました*