はじめに
今回は、今年(2018)の4月に発表された、物体検出モデルPeleeについて調べてみました。
Peleeについて
Peleeの論文のタイトルは、「Pelee: A Real-Time Object Detection System on Mobile Devices」です。
タイトルの通り、モバイル端末でのリアルタイムでの物体検出に適したモデルらしいです。
つまり、処理速度を上げつつ、モデルの大きさ(パラメータ数)を抑えたモデルらしいです。
Peleeモデルのテクニック
PeleeモデルはDenseNetベースのモデルで、これをSSDと組み合わせたようです。
[Densely Connected Convolutional Networks](https://arxiv.org/pdf/1608.06993v3.pdf)Peleeの主なテクニックとして、以下のようなものが上げられています。
- ResBlockのconvにおける1×1カーネル
これにより、モデルの大きさを削減できる。
[Pelee: A Real-Time Object Detection System on Mobile Devices](https://arxiv.org/pdf/1804.06882.pdf)- Post Activation
これにより、最後の推論時にまとめて正規化・活性化できるので、処理速度が向上する。
[Post Activation vs Pre Activation](https://deepage.net/deep_learning/2016/11/30/resnet.html)- SSDの特徴マップで38x38を使用しない
これにより、モデルの大きさが削減でき、処理速度が向上する。
[Pelee: A Real-Time Object Detection System on Mobile Devices](https://arxiv.org/pdf/1804.06882.pdf)比較
学習済みモデルを使って、SSD(VGGベース)とPeleeのモデルの大きさと速度を比較してみたいと思います。
精度の計測は、実際に行っていないので論文の値を載せておきます。
Method | 07+12 | 07+12+coco |
---|---|---|
SSD300 | 77.2 | 81.2 |
Pelee | 70.9 | 76.4 |
SSDモデルとPeleeモデルはGitHubにCaffe形式で上げられています。
まずは、モデルの大きさが以下の通りです。
SSD_300x300 | Pelee_304x304 |
---|---|
約100M | 約20M |
SSDの方が約5倍くらい大きいようです。
次に、コマンドラインによる(CPUの仮想マシン環境下における)ベンチマークが以下の通りです。
SSD_300x300 | Pelee_304x304 | |
---|---|---|
Average Forward pass | 475.895 ms | 90.4204 ms |
Average Backward pass | 386.498 ms | 41.6736 ms. |
Average Forward-Backward | 863.5 ms | 133.7 ms |
Total Time | 8635 ms | 1337 ms |
Peleeの方がかなり速いようです。
ついでに、物体検出の様子をGIFにしてみました。
左がSSD、右がPeleeです。
検出を表示する閾値は、両者とも0.6以上に設定しています。
結果は、Peleeの方も結構いい感じに検出してくれているように見えます。
最後に
PeleeはSSD(VGGベース)よりも、たしかに処理速度が早く、モデルの大きさが小さいモデルでした。
論文によると精度はPeleeの方が少し低いので、Peleeは精度と速度をトレードオフしたモデルのようです。
そして、最後の最後に一言。
Caffeのインストールが難しすぎる。。。