正月、皆が寝静まった後の時間を使ってリアルタイム物体認識を2本作ってみた。
TensorFlow Lite 版
GitHub - mattn/webcam-detect-tflite
https://github.com/mattn/webcam-detect-tflite
TensorFlow Lite は Google が開発している TensorFlow のモバイル環境向開発環境およびランタイムで今回は C++ で書いた。モデルファイルは toco 等で変換して使用します。本来 TensorFlow Lite は Linux 向けにだけ提供されているけど僕の環境は Windows なので匠の技によりポーティングされている。パフォーマンスはそれほど良くない。
Windows で OpenCV でリアルタイムにカメラ画像取り込んで TensorFlow Lite で prediction。フットプリントも初速もいいけど fps 出ないな。NNAPI あり、4スレッドで 4~5fps くらい。 pic.twitter.com/uvxTUzBPPp
— mattn来日 (@mattn_jp) December 30, 2018
mobilenet ssd というモデルの、座標情報を出力しないモデルを使うと Intel Core i5 なノートPC(メモリ16G)で 4~5fps くらい出る。
スマホ等では自分から物体にカメラを向けるはずなので用途によっては座標情報は必要ないかも。
menoh 版
GitHub - mattn/webcam-detect-menoh
https://github.com/mattn/webcam-detect-menoh
PFN (Preferred Networks) 社が GitHub 上で開発している menoh という DNN 推論ライブラリがあり、これの Go 言語バインディング go-menoh を使ってリアルタイム物体認識を作ってみた。こちらは Go 言語なので以下の3つの goroutine を使って平行処理を行っている。
- カメラからの画像キャプチャ
- リサイズと推論
- 画面描画(メインgroutine)
Intel Core i5 なノートPC 上で vgg16 というモデルを使うと 3fps 程度。resnet50 というもう少し軽いモデルを使うと 6~7fps くらい出る。
PFN社が開発してる DNN 推論ライブラリ menoh の go binding (go-menoh) を使ってリアルタイム物体認識。モデルは vgg16 なので少し重めの 3fps。 pic.twitter.com/8wFHnM5D1c
— mattn来日 (@mattn_jp) January 1, 2019
resnet50 が軽かった。6~7fps。TensorFlow で mobilenet ssd だと 10fps 出るのでもうちょっと出るモデルが欲しい。 pic.twitter.com/VvSSorsdVX
— mattn来日 (@mattn_jp) January 1, 2019