皆さん、エッジAIを使っていますか?
エッジAIといえば、MobileNet V2ですよね。
先日、後継機となるMobileNet V3が論文発表されました。
世界中のエンジニアが、MobileNet V3のベンチマークを既に行っていますが、
自分でもベンチマークをしたくなりました。
本稿では、MobileNet V3のベンチマークをKerasで行いたいと思います。
(図は論文より引用)
コード全体はGithubで公開しています。
#設定
##MobileNet V3
- コードはこちらから拝借しています。
- 重みは初期化された状態で学習します。
- V3には
small
とlarge
がありますが、ラズパイのCPUで動かすことを想定してsmall
を採用しました。 - $\alpha$の値によって、モデルサイズが変動します。$\alpha$は大きいほど精度が出ますが、速度は遅くなります。
##MobileNet V2
- KerasにはV2が標準装備されており、これを使います。
- 重みは学習済が用意されていますが、V3と同じく初期化された状態で学習します。
- $\alpha$はV3と同じ仕様です。
##その他
- データセットはcifar-10を使用します。
- 実験はColaboratory(GPU)で実施しました。
- バッチサイズは1024、エポックは100、最適化手法はAdam(lr=0.001)、DataAugmentationを使用。
#結果
##精度の比較
早速、気になる精度を見てみましょう。
下の図は各モデルを10回学習させたときの精度の結果です。
V2に対し、V3は精度も良く、ばらつきも少ないです。
V3の推論時間が速ければ、V3を使った方が良さそうです。
##推論時間の比較
Colaboratoryで1000回実行して中央値などを取り出そうとしましたが、Colaboratoryに
クセがあるのか、実行する度に計測時間が変動しました。(メモリや使用時間の影響?)
ただし、相対的な推論時間の関係は崩れなかったので、相対比較はある程度信用できそうです。
下の図は、各モデルを1000回実行させたときの推論時間の平均値です。
※推論時間の数値は信用しないでください。
※()の値は$\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では公開されています。
PytorchモデルをKerasやTensorFlow liteモデルへ変換する方法は、
以下の記事が参考になると思います。
皆さんも、どんどん転移学習しましょう。
#ラズパイで実行してみた
ラズパイでリアルタイム認識をしてみました。
コードはこちら。
- 使用機器:Raspberry Pi3 model B
- 外付けGPU:未使用
- V3 smallの$\alpha=0.2$
- 入力画像サイズ:32 x 32 x 3
だいたい15~20FPSの速度が出ました。
この速度なら、リアルタイムの処理もできそうです。
ちなみに、入力サイズ:96 x 96 x 3だと、10FPSになりました。
#まとめ
- MobileNet V3はV2の代替品になるわけではなく、延長線上という印象。すなわち、「V2よりも精度を出したいけど、多少処理速度が遅くなってもOK」というときに使うと良い。
- ただ、V3であっても速度はそこまで遅くはならない。
- 最終的には、入力画像サイズを小さくすればV3の速度は上がるため、チューニングすれば、「V2と速度は同じだけど精度は上回る」という可能性もあり得る。