Xceptionの論文読解(初心者向け)
前回のResNeXtの記事に続き、今回はXceptionの論文を読んで解説します。
いつも通りネチネチ解説します。
参照した論文は以下
Xception: Deep Learning with Depthwise Separable Convolutions
まずInceptionジュールについて説明
以下の図はInceptionモジュールを表しています。
input時に1×1の畳み込みをすることでチャンネル数を減らしています。
Figure1を簡略化したのがFigure2になります。
Figure2でinputの後にいくつかに分岐しそれぞれ1×1のカーネルで畳み込みをしていますが、分岐してようがしてまいが同じことです。
なので下の図のように表すことができます。
そしてパラメーターの数はこの分岐を増やせば増やすほど減っていきます。(この辺の一連の流れや、パラメータが減る理由は前回のResNeXtの記事をみてもらえればさらに理解しやすいと思います)
そしてこの分岐を下の図のように増やしていって、最大まで分岐させたのがXceptionモジュールです。
え、めっちゃ極端に分岐させるやん、、、と思った方。
そうです 極端(eXtreme)なinCEPTIONモデルなので XCEPTIONという名前がついたらしいです。
全体像は以下
入り口、中間、出口の3パートに別れており、中間部分は同じモジュールが8回繰り返されています。
入り口と出口部以外、residual(前の層の値)が追加されています。
精度
Image-NetとJFT dataset(JFTは大規模な画像分類用のデータセット)を使って実験しています。
Image-NetではInceptionV3に対してXceptionの方が少し精度が上回り
JFTではXceptionが圧勝しています。
スピードは?
スピードではInceptionに負けましたが、将来最適化が進むことでXceptionが上回る可能性に期待したいと論文は言っています。
Inception V3とXceptionのパラメータ数はほぼ同じなので、モデルのパフォーマンス向上の要因は容量の増加というよりもモデルのパラメータの効率性によるものと考えられるといっています。
residualを追加するか
下の図を見ればわかりますが、residualは追加した方が良さそうです。
ただしNon-residualのほうはハイパーパラメーターの調整をしていないのがすこしハンデではある。(そこは調整しとけよ)
非線形関数を挟むか
1×1のカーネル(チャネル方向の畳み込み)と3×3のカーネル(空間的な畳み込み)の間に非線形関数は挟まないほうがよさそうです。
普通、深い特徴空間では非線形な変換は必要ですが、最大限分岐させてチャネルが少ない場合は逆効果になるようです。
最後に
・XceptionとInception V3ではほぼ同じパラメーター数で学習しているのに、精度がよくなったということは、より効率よくパラメーターを使えているということ
・Xceptionモデルは「チャネル方向の畳み込み」と「空間方向の畳み込み」を完全に分離したものととらえることができる
・Xceptionモデルでは最大に分岐させているが、もしかしたら最適な分岐数があるかもしれないのでそれは今後検討するとのこと
追伸
論文は自分を信じて英語のまんま読んだほうがいいです
他の論文和訳記事を参考にしながら読んだら余計に訳が分からなくなりました(訳だけに、、、)