CVPR2019で発表されたESPNetv2の論文を読んだので、その内容について自分用にまとめておく
#本論文に関して
プログラムを書くことが容易になったことやGPUの計算能力の向上など伴い、深層畳み込みニューラルネット(CNNs)分野の発展が著しい。CNNsを利用した様々なアプリケーションの開発が進んでいるが、現実世界で有用なアプリケーション(例えば自動運転やロボットへの応用)はリソースが制限されたエッジデバイスにおける低遅延処理を要求する。しかしながら、現存するCNNの技術に基づいたシステムはメモリや電力などを含んだ膨大なコンピュータリソースを要求する。
こうした問題の解決に向けて、本論文では軽量で電力効率が優れた汎用的なタスクに応用可能な畳み込みニューラルネットの紹介を行っている。
#ESSPモジュールに関して
ESPNetv2を構成する主なモジュールとしてESSPがある。このESSPモジュールはESPNetにおけるESPモジュールを改善したものである。
ちなみに、ESPNetもESPNetv2と同様にCNNsの効率性を上昇させることを目的としたネットワークである。
順を追って説明する。
下図の(a)は元となるESPモジュールである。このESPモジュールに改良を加えていく。
まず、ESPモジュールを計算効率を向上させることを目的としてESPモジュールのpoint-wise convolutions(図(a)内 Conv-1の部分)をgroup point-wise convolutionに置き換える。そして、ESPモジュール内の計算負荷が大きい$3 \times 3$ dilated convolution(図(a)内 DConv-3の部分)を計算負荷が小さいdepth-wise dilated separable convolutionに置き換える。depth-wise畳み込みを適用することで、標準の畳み込みと比較して必要なパラメータ数を入力のチャンネル数の逆数倍まで減少させることができる。depth-wise畳み込みでは、パラメータ数を減らすことができる一方でチャンネル間の関係については考慮できていないので、point-wise畳み込みが施されている(図(b)内 Add下のConv-1の部分)。これらの改良を加えた結果が図(b)のESSP-Aモジュールである。
さらにESSP-Aモジュールに改良を加える。ESSP-Aモジュールでは、depth-wise dilated separable convolutionを行ったそれぞれの結果に対して独立したpoint-wise convolutionを行っている。(図(b)内 Conv-1の部分)この部分を一回のgroup convolutionに置き換える(図(c)内 Add上のGConv-1の部分)ことで必要なカーネル数を1つにまとめ、パラメータ数を減少させることができる。
以上の改良を施した結果が図(c)のESSPモジュールである。
このように、ESSPモジュールはESPモジュールの計算効率向上を目的としてパラメータ数を極力減らすことに主眼をおいて改良を重ねた結果である。
また、ダウンサンプリングと畳み込み操作の間に入力の空間情報が失われてしまう影響を軽減することを目的として入力画像とダウンサンプリングユニットの間にlong-range shortcut connection(下図の赤線部分)が加えられている。このshortcut connectionでは下図に示す通り、まず入力画像がダウンサンプリングされた特徴マップと同じサイズになるまで繰り返し平均プーリングされる。その後、2度の畳み込み操作を介している。
効率的な学習率の設定に関する多くの研究が行われており、今回紹介する論文はSGDRという学習率の設定方法を参考にしている。
SGDRはエポック毎に、コサイン波の減少部分を利用することで学習率を減少させている。また、Warm Restartといって一定のエポック毎に学習率を最初の学習率まで戻すということを行っている。これにより、学習率が小さい場合と大きい場合の欠点を補いながら学習を行うことができる。
今回の論文ではコサイン波は利用せずに、一定のエポック毎(5エポック)に下図のような周期性を持たせている。
具体的にはエポック$t$における学習率は以下の式で制御される。
$$\eta_t = \eta_{max} - (t mod T) ・ \eta_{min}$$
ここで、$\eta_{max}$と$\eta_{min}$は学習率の上限と下限であり、$T$は周期である。
また、本論文では300epochsで学習を行っており、epoch数を重ねるにしたがってより細かな学習を可能にするため、{50, 100, 130, 160, 190, 220, 250, 280}のepochインターバル毎に学習率の範囲を半分にしている。
#ESPNetv2のアーキテクチャに関して
ここまで紹介したESSPモジュールやStrided ESSPモジュールを中心にESPNetv2は構成されている。
論文内にlayerの要素や出力チャンネル数を変化させた際の積和計算量について記されていたので、表を掲載しておく。
#クラス分類の結果に関して
本論文では、ESPNetv2の有効性を示すために、(1)object classification(2)semantic segmentation(3)object detection(4)language modelingの4つのタスクを行っている。今回はその中で1つ目のクラス分類の結果を紹介する。
データセット:ImageNet(1000-way classification that contains 1.28M images)
実験環境:Pytorch deep learning framework with CUDA 9.0
結果ではtop-1 accuracyとFLOPsの観点で最先端のネットワーク(ShuffleNet, MobileNet)と比較している。top-1 accuracyとはネットワークによって画像のクラス分類を行った際の出力結果の1番大きな出力が正解ラベルと適合している場合にのみ正解とした場合の分類精度である。FLOPsはネットワークで入力から出力を出すまでの積和演算操作の回数を呼ぶ。
下図を見ると、ESPNetv2が従来の先端ネットワークよりも小さなFLOPsで高いtop-1 accuracyを示している様子が分かる。
機械学習を学びたての身なのでこんなにも畳み込み操作だけで種類があるのかと戸惑う一方で多くの手法の利点を知ることができて良かったです。
#Refference
[1]ESPNetv2:A Light-weight, Power Efficient, and General purpose Convolutional Neural Network
[2]ESPNet:Efficient Spatial Pyramid of Dilated Convolutions for Semantic Segmentation
[3]SGDR:STOCHASTIC GRADIENT DESCENT WITH WARM RESTARTS