け日記

最近はPythonでいろいろやってます

論文メモ: MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

今回は軽量・高速なCNNの紹介です。

最新のいかついモデルを、GPUフル回転で学習し、目標の精度を達成したとしても、いざ実際にシステムに組み込む段階になると推論の遅さが足かせになって導入できない、というケースはしばしばあるのかなと思います。そういった意味で、軽量・高速なモデルというのは重要です。

  • Kaggleなども推論時間がシビアに制限されているコンペがあるそうです

CNNの軽量化・高速化のブレイクスルーの1つとなったMobileNetの提案論文 MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications (arXiv) を読みましたので、そのメモとなります。

@article{DBLP:journals/corr/HowardZCKWWAA17,
  author    = {Andrew G. Howard and
               Menglong Zhu and
               Bo Chen and
               Dmitry Kalenichenko and
               Weijun Wang and
               Tobias Weyand and
               Marco Andreetto and
               Hartwig Adam},
  title     = {MobileNets: Efficient Convolutional Neural Networks for Mobile Vision
               Applications},
  journal   = {CoRR},
  volume    = {abs/1704.04861},
  year      = {2017},
  url       = {http://arxiv.org/abs/1704.04861},
  archivePrefix = {arXiv},
  eprint    = {1704.04861},
  timestamp = {Mon, 13 Aug 2018 16:46:35 +0200},
  biburl    = {https://dblp.org/rec/bib/journals/corr/HowardZCKWWAA17},
  bibsource = {dblp computer science bibliography, https://dblp.org}
}

MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

イシュー

AlexNet以降、"より深く"・"より複雑"なネットワーク (CNN) を構築することで精度を改善してきましたが、アプリケーションへの適用にあたってはリアルタイムな推論を限られた計算資源で行う必要があります。

  • 特にロボティックスやスマートドライビングなどの分野

本論文で提案されたMobileNetでは畳み込み層の内積回数とパラメータ数を減らすことで、推論速度の改善を実現してます。

  • モデルの圧縮ではなく、新たな畳み込み層アーキテクチャの提案です

アイディア

コアとなるアイディアは2つあります。

  • Depthwise separable convolutionsで計算量を削減 (主)
  • 精度と速度のトレードオフを調整するハイパパラメータの導入 (副)

Depthwise separable convolutions

従来の畳み込み層 (1層分) の計算量は  K \times K \times M \times N \times F \times F です。全ての要素が乗算されているため、大きな計算量となります。

  •  K \times K : フィルタ (カーネル) サイズ
  •  M : 入力チャネルサイズ,  N : 出力チャネルサイズ
  •  F \times F : 特徴マップサイズ (= 出力層のサイズ)
    • VGG16以降は入力層と同じサイズが一般的 (ex. 32x32 -> 32x32)

この1ステップの工程を2ステップ (depthwise -> pointwise) に分割した畳み込みを行うように変更します。

  • depthwise:  K \times K \times 1 のフィルタM個 => 出力サイズは  F \times F \times M
  • pointwise:  1 \times 1 \times M のフィルタN個 => 出力サイズは  F \times F \times N
    • 1x1畳み込みフィルタで、フィルタ数をコントロールしてます

f:id:ohke:20191102151507p:plain
本文FIg.2抜粋

この分割 (factorizeといいます) によって、計算量は  K \times K \times M \times F \times F + M \times N \times F \times F となります。第1項がdepthwise、第2項がpointwiseにそれぞれ対応してます。

比率で見ると  \frac{K \times K \times M \times F \times F + M \times N \times F \times F}{K \times K \times M \times N \times F \times F} = 1 / N + 1 / (K \times K) の計算量となります。一般的にK=3、N>=16のことが多いため、80%以上の計算量削減を見込めることがわかります。

精度と速度のトレードオフを調整するハイパパラメータ

精度と速度のトレードオフを調整するために、2つのハイパパラメータを導入してます。これによって様々なドメインやハードウェアへ適応することを狙ってます。

  • Width multiplier:  \alpha \in (0, 1 ]
    • チャネル数をそれぞれ  \alpha M, \alpha N に落とす => パラメータ数は概ね  \alpha^2 の削減
  • Resolution multiplier:  \rho \in (0, 1 ]
    • 特徴マップのサイズを  \rho F \times \rho F に落とす => パラメータ数は概ね  \rho^2 の削減

これら2つを組み込むと計算量は  K \times K \times \alpha M \times \rho (F \times F) + \alpha M \times \alpha N \times \rho (F \times F) となります。

アーキテクチャと評価

depthwise / pointwiseを組み込んだネットワークを構築・評価していきます。

画像 (224x224x3) から1000クラスに分類するImageNetのタスク用に、以下のネットワークを構築してます。

興味深いのは層ごとのパラメータ数の集計で、大した事なさそうな1x1畳み込み層が約3/4を占めており、支配的となっている点です。

通常の畳み込みと比較する (Table 4.) と、内積数で1/8、パラメータ数で1/7までそれぞれ削減しているが、Accuracyの低下は1.1%にとどまってます。これより効率的に計算量を削減できていることがわかります。

  •  \alpha = 0.75 のMobileNetと同程度のパラメータを持つ層数のMobileNetを比較 (Table 5.) すると、前者の方が高いAccuracyを達成しており、  alpha によって効率的にパラメータを減らすことが確認できます

他のモデルとの比較をしてますが、GoogleNetやVGG16などのより大きなモデルと同程度のAccuracyを実現してます (Table 8.)。 また、SqueezeNetやAlexNetなどの小さなCNNと比較 (Table 9.) しても、パラメータ数・Accuracyの両方において、MobileNetが優位であることがわかります。

  • 比較対象が提案された2017年当時でも少し古いモデルになっていますので、その点は注意です

まとめ

今回はMobileNetの提案論文について紹介しました。ビジネスへの適用を前提とすると、以下もMobileNetの重要な利点かなと思いました。

  • 畳み込み層の改善であるため、分類・物体検出・セグメンテーションなど様々なタスクに組み込むことができる
  • 構造が単純なため、どんなディープラーニングフレームワークでも簡単に実装できる