Take’s diary

Macとマイコンに関すること--ワクワクの製作日記

openFrameworks でCoreML (YOLO)!!

openFrameworks for iOSでYOLOを動かしてみました。

前回紹介したGitHub - hollance/YOLO-CoreML-MPSNNGraph: Tiny YOLO for iOS implemented using CoreML but also using the new MPS graph API. iOSでのYOLO実行環境はSwiftでした。SwiftはUI環境を整備しなくてはいけないので、私にはとてもやっかいです。これをOpenframeworksで実行させたら、簡単に画像を加工できるはず。この記事には、YOLO標準データをCoreML専用に変換するPythonスクリプトも入っているので再学習も可能のはずです。結果、ソースの変更でopenFrameworksでもCoreMLが実行できました。肝心の画像認識部分の実行速度は、Swift版より今回移植したC++版の方がかなり早くなっているようです。画像加工が簡単なので少し表示内容を変更しています。画像認識部分はマルチスレッドにしているので、画像を加工しても画像表示はCoreML(物体認識部分)に影響されません。ただし実行時iPhoneがかなり熱くなるので、連続して実行する場合は1分前後が目安です。iPhone7以降で実行可能。

f:id:TAKEsan:20180102224325p:plain

openFrameworksはdownload | openFrameworksからiOS版をダウンロードしてインストールして下さい。

以下iPhone 7plusで動かした場合

               

以下iPhone Xで動かした場合

               

前回のSwift版より認識スピードが倍近く速くなっているので(計測ポイントは同じ)ハードの実力はすごいの一言。ただ、画像のフレームレートが下がっていますが、カメラ画像の大きさに影響するようです(今回は1280X720としたので遅くなっている)-->1/27修正 今はiPhoneXで29~30FPS、iPhone +で20FPS位になってます。-->1/28修正 画素を元々のswift版と同じ640x480として、内部を少し変えたらiPhoneXで45~60FPS、iPhone +で30FPS位になりました。動画画像は60Fpsでも認識スピードは変わらないのであしからず。マルチスレットにするとiPhoneXだとまだまだ+αが可能ですなー。(肝心な部分を抜かしているような気もしないではありませんが...)

                

1/28修正 最終的にこのくらい。iPhoneXで動画が最高60Fpsいってました。640x480だと認識率が落ちるようですが、これで文句言う人あんまりいないでしょ。

やはりiPhone7の倍くらいスピードが違いました。

ソースは以下に公開しました。

実機でないと実行できないので注意。(Yoro_of2.zipをダウンロード)

https://drive.google.com/drive/folders/0BzqxnYlVMv6uRUtMb2pRXzdsNlU?usp=sharing

急いで作ったので、グローバル変数が多いですが、addonにすれば、かなり簡単に応用できると思います。YOLOの学習済みCoreMLファイル「TinyYOLO.mlmodel」は、プロジェクトにコピーすると、自動的にobjectiv-Cのヘッダーファイル(TinyYOLO.h)が作成されます。画像の変換に利用しているだけですが、ofxCVアドオンをダウンロードして追加してください。1/27修正 結構頻繁にハングアップしていましたが、修正済み。oF上の画像部分取得コマンドofImage.cropFromに少しバグがあるようです。1/28修正 解像度変更とマルチスレッド見直しでスピードが大幅に上がった。

多分Signing系のエラーが出ますので、赤矢印部分を自分の環境に設定して下さい。

f:id:TAKEsan:20180102223102p:plain

                             では、また。