opencvでリアルタイムに学習済みモデルを動かす。windowsもあるよ(*’ω’*)

タイトル通り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(Ubuntu)で動かした場合。

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の学習済みがさっくり読み込めて使えるかを試していきたいところです。

 

neno

都内のJK大学生。趣味はドールと一緒にお出かけして撮影すること。C++とC#が好き。C++は主にリアルタイム画像処理, C#はUnity, WPF, UWP, .NET Coreとかいろいろ。ASPとXamarin学習中。 専攻はCV。最近のおもちゃはHoloLens。

あわせて読みたい

5件のフィードバック

  1. より:

    最後のlinux版は、GPU利用してますか?

    • neno より:

      GPU利用してます!
      darknetはCUDAをサポートしているので公式サイト通りにビルドすればGPUが利用されるようになるはずですー

  2. たろう より:

    visualstudioでOpenCLが使える状態でのdarknetの動かし方を教えていただきたいです。

  3. たろう より:

    visualstudioでOpenCLでのdarknetの動かし方を教えていただきたいです。

    • neno より:

      OpenCVを使わずにということであれば、自分で実装しないと無理だと思います。darknetのオリジナルはCUDA実装です。
      (さらにいえばwindowsでオリジナルは動きません)
      もしかしたらOpenCLように再実装してくれている人がいるかもしれませんが、 素直にCUDAを使うのがいいと思います。(windows用に実装してくれている人はいます。https://github.com/AlexeyAB/darknet)
      OpenCVを使ってということであれば、そもそもOpenCVが配布しているバイナリはもともとOpenCLも含められていたはずなので、デフォルトでOpenCLで動くはずです。
      OpenCLが動いていないようであれば、とりあえずOpenCVにOpenCLオプションを入れてビルドしてみるといいと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

%d人のブロガーが「いいね」をつけました。