タイトル通りopencvで学習済みのモデルを動かしてみようって記事です。
opencv3.3からcontribにあったdnnモジュールがメインのレポジトリにシュッっと入ってました。(記事書いてるときの最新は3.4)
なので気軽(?)に学習済みモデル拾ってきて試す~なんてことができそうです。メインのレポジトリにあるものを使う安心感は異常です。
このdnnモジュール、いろいろなフレームワークのモデルを読み込むことができるらしいです。
ここ みた感じtensorflow,darknet,caffe,torchが読み込めるっぽい。すごい。
何が嬉しいって、無駄にビルドバトルしないで済むということですね。
私昔tensorflowの学習済みをwindows上でc++で呼び出したかったのでビルドバトルして、まぁ失敗に終わったのですが、大分時間を吸われました。3日くらい。
これさえあればそういう手間がグっと減るということです。
あとリアルタイムで動くアプリ書いてるときはどうしてもpythonよりc++で書きたかったりしますよね。そういう需要にもこたえてくれそうです。
ていうかopencv3.4.0普通にビルド済み配っててくれてうれしい。ビルドめんどくさい()
能書きはこれくらいにして実際に動かして行きます。動画もあるよ('ω')
今回使ったソースはこれ(こっち)です。yoloとかいうリアルタイムで物体検出するとき現行最強(yolov2)の初代さんを動かします。
重みのデータとかそこらへんはdarknetから落としてきます。
コマンドライン引数は
-cfg=yolo.cfg -model=yolo.weights -class_names=coco.names
です。
windowsで動かした場合。
Linuxでopencvをたたかないで直にdarknetをたたいた場合。
机の上が汚いのはまぁ仕方がないですね。
大体opencvで動かすとopenclが使える状態でwindowsもUbuntuも大体3FPS前後。
darknetをダイレクトにたたくと大体15fpsくらい。
( ^ω^)・・・ダメじゃん!w
まぁダメではないんですが、opencvのはちょっと遅いですね。今後早くなるんですかね?contribするかーとか思ってソース読んでたけど、うんわからんといった感じであきらめました。貢献はまたいずれ。。。ていうか遅いの、nvidiaがopenclにやる気ないからなのではとか勘ぐってみたり。
ちなみにvisual studioでDebugのままいじったときFPS0.3とかで凄まじく重たかった()
しかしwindowsでもdnn関連のものがさっくり動かせるようになるのは個人的にすごくうれしいですね、なにかとアプリ組む時はwindowsですが深層学習のフレームワークをwindowsで使おうとすると一悶着あったりするので。
今度はtensorflowの学習済みがさっくり読み込めて使えるかを試していきたいところです。