Edited at

【精度対決】MobileNet V3 vs V2

皆さん、エッジAIを使っていますか?

エッジAIといえば、MobileNet V2ですよね。

先日、後継機となるMobileNet V3論文発表されました。

世界中のエンジニアが、MobileNet V3のベンチマークを既に行っていますが、

自分でもベンチマークをしたくなりました。

本稿では、MobileNet V3のベンチマークをKerasで行いたいと思います。

image.png

(図は論文より引用)

コード全体はGithubで公開しています。


設定


MobileNet V3


  • コードはこちらから拝借しています。

  • 重みは初期化された状態で学習します。

  • V3にはsmalllargeがありますが、ラズパイのCPUで動かすことを想定してsmallを採用しました。

  • $\alpha$の値によって、モデルサイズが変動します。$\alpha$は大きいほど精度が出ますが、速度は遅くなります。


MobileNet V2


  • KerasにはV2が標準装備されており、これを使います。

  • 重みは学習済が用意されていますが、V3と同じく初期化された状態で学習します。

  • $\alpha$はV3と同じ仕様です。


その他


  • データセットはcifar-10を使用します。

  • 実験はColaboratory(GPU)で実施しました。

  • バッチサイズは1024、エポックは100、最適化手法はAdam(lr=0.001)、DataAugmentationを使用。


結果


精度の比較

早速、気になる精度を見てみましょう。

下の図は各モデルを10回学習させたときの精度の結果です。

image.png

V2に対し、V3は精度も良く、ばらつきも少ないです。

V3の推論時間が速ければ、V3を使った方が良さそうです。


推論時間の比較

Colaboratoryで1000回実行して中央値などを取り出そうとしましたが、Colaboratoryに

クセがあるのか、実行する度に計測時間が変動しました。(メモリや使用時間の影響?)

ただし、相対的な推論時間の関係は崩れなかったので、相対比較はある程度信用できそうです。

下の図は、各モデルを1000回実行させたときの推論時間の平均値です。

image.png

推論時間の数値は信用しないでください。

※()の値は$\alpha$の数値です。

きれいな右肩上がりになっており、V2(0.5)とV2(1)の差が大きい印象です。

また、$V2(1)\fallingdotseq V3(0.2)$となっていて、精度を考慮するとV3(0.2)を

採用する方が良いようです。

表にまとめます。

速度
精度

V2(0.5)
速い
悪い

V3 small(0.2)

V3 small(0.5)
遅い
良い

今のところ、V2(0.5)の代替品はV3で存在しないようです。


学習時間の比較

前述のとおり、実行する度に計測時間が変わったため、ここでは計測できませんでした。

ただ、V2とV3でそこまで学習時間の差は生まれない印象です。


重みのサイズの比較

$\alpha$
重みのサイズ(MB)

MobileNet V2
0.5
3.3

MobileNet V2
1
9.5

MobileNet V3 small
0.2
11.3

MobileNet V3 small
0.5
11.7

V2の方が圧倒的に軽い結果となりました。

また、V3の重みのサイズは、$\alpha$にあまり依存しないようです。


転移学習について

実際に使うことを考えると、モデルをゼロから学習させることは稀だと思います。

通常は転移学習を使いますが、今のところ、Kerasで学習済の重み(V3)は公開され

ていません。しかし、Pytorchでは公開されています。

https://github.com/d-li14/mobilenetv3.pytorch

PytorchモデルをKerasやTensorFlow liteモデルへ変換する方法は、

以下の記事が参考になると思います。

https://qiita.com/lain21/items/9f9f9707ebad4bbc627d

皆さんも、どんどん転移学習しましょう。


ラズパイで実行してみた

ラズパイでリアルタイム認識をしてみました。

コードはこちら


  • 使用機器:Raspberry Pi3 model B

  • 外付けGPU:未使用

  • V3 smallの$\alpha=0.2$

  • 入力画像サイズ:32 x 32 x 3

33tby-1m4wl.gif

だいたい15~20FPSの速度が出ました。

この速度なら、リアルタイムの処理もできそうです。

ちなみに、入力サイズ:96 x 96 x 3だと、10FPSになりました。


まとめ


  • MobileNet V3はV2の代替品になるわけではなく、延長線上という印象。すなわち、「V2よりも精度を出したいけど、多少処理速度が遅くなってもOK」というときに使うと良い。

  • ただ、V3であっても速度はそこまで遅くはならない。

  • 最終的には、入力画像サイズを小さくすればV3の速度は上がるため、チューニングすれば、「V2と速度は同じだけど精度は上回る」という可能性もあり得る。