Darknetとは何ぞやについてはいろいろなサイトで紹介されてるので、そっちをご参照ください。
これは、ディープラーニングのフレームワークの1つで、このモデルでリアルタイム物体検出などができます(リアルタイムはGPUがあればの話ですけど)。
Darknet:Open Source Neural Networks in C の公式サイト
なんだか闇サイトや神秘主義を連想させるロゴですが、内容はいたってマトモです(^^)。
まあ、この方のネーミングセンスはどれもこんな感じなんで、そういう方なんでしょう。
準備した環境
Windows 7 (64bit)……まだ使ってます(^^)
2015 を使うのが本筋のようだけどMicrosoftの公式サイトにはもうないです、Dev Essentialsに参加すればProducts->Downloadsの中にありますが、延々とLoadingが続いてばかりだったので面倒になって止めました。
CUDAも用意しといてね、ということだけど我PCにはGPUなどという立派なものは積んでないのでここではパス。
前準備
をインストールしたら、もう一度Visual Studio installerを起動して変更をかけます。対象はビルドツールセットです。現行のDarknetではv140のツールセットを使ってますが、VS 2017はv141です。
「C++によるデスクトップ開発」を選んで、v140ツールセットにチェックを入れて変更を実行します。
コンパイル準備
VS2017を起動して、ビルドをRelease x64にしておきます。
ファイル->開く->プロジェクト/ソリューションで、darknet-masterの中のbuild/darknet/daknet_no_gpu.slnを選びます。
プロジェクトのプロパティ
VC++ディレクトリ
インクルードディレクトリにOpenCVのbuild/includeをフルパスで追加
ライブラリディレクトリにOpenCVのbuild/x64/vc12/libをフルパスで追加
コンパイル実行
ビルドメニュからdarknet_no_gpuのビルドを実行
これでdaknet-master/build/darknet/x64の中にdarknet_no_gpu.exeが作成されます。
試してみる
Darknetには学習済のweightsデータが用意されています。
このyolo.weightsをダウンロードしてdarknet-master/build/darknet/x64にコピー。
検出テストをしてみましょう。
DOSプロンプトを開いて、darknet-master/build/darknet/x64に移動。
darknet-master/build/darknet/x64/dataフォルダーに動物のJPG画像(例:animals.jpg)を入れてテストしてみます。
以下のコマンドを実行。
1 |
darknet_no_gpu detect cfg/yolo.cfg yolo.weights data/animals.jpg |
GPUを使っていない分、2~3秒くらいかかって認識されます。
確からしさはこんな感じです。
選手もボールも検出されています、後は顔認識があればね。
WisteriaHillでは2010年ころにOpenCV2.0を使ってサッカーボールの検出なんてことやってました。ハールトレーニングをやってカスケードファイルを作って….云々。OpenCV 覚書
もう必要ないですなぁ。
GPUがあると仮定して……
CUDA 8.0 + cuDNNでやってみました。難しくはありませんが、とっても面倒でした。
NVIDIAの公式ぺーじには、CUDA 8.0はもうないので探さなきゃいけなかったですし。
でコンパイルは通りましたが、darknet.exeを実行するとドライバーが無いのでinsuffientで
途中エラーで落ちます。
GPU欲しい。CPUのみの環境だとトレーニングに恐ろしく時間がかかるようで。
サーバーが過負荷になるようですので、CUDA,cuDNNファイルの直ダウンロードはしばらくお休みします。
ダウンロード先を再設定したら、また復活します。
Movidius NCSについて
WisteriaHillではAIの最終ターゲットのプラットフォームイメージはスタンドアローンのポータブルデバイスです(A.I. in my pocket)。
WisteriaHillではMovidius NCSでやってみます。これはTensorFlowやCaffeのモデルを実行できる専用プロセッサーを搭載したUSBタイプのデバイスです。
最近はAmazonでも扱ってて10000円ちょいくらいです。
秋月電子で買った方が安いです(2017/12/16)。
Raspberry Piがインストールターゲットになっている例をよくみますが、さてどうしよう?シングルボード・コンピュータは他にもあるしなぁ。これにはジャイロと加速度計とGPSも欲しいです。
DraknetのモデルをTensorFlow用に変換するやり方については、この方のブログを参照。
Draknetのモデル->TensorFlow変換ライブラリ
TensorFlowをMovidius NCSで使う方法はSWITCHSCIENCEの記事を参照
Caffeについてはこの方のブログが参考になります
Caffeの場合の変換ライブラリはここを参照
Next
トレーニングを開始する前に、データを準備しておきます。
OpenCV 覚書でハールトレーニングをやる前に矩形座標取得(haartraining用)でやったような、ジミーに画像からデータを取得するようなやつです。今回のデータはもっと複雑ですがツールを使ってやってみましょう。
参考資料
いろんなNeural Networkについての説明の中で、以下の電子書籍が一番分かりやすかったです。
Neural Networkの理解に数学は避けて通れない(避けると、ますます分からなくなります)が、この説明は理解しやすいです。
Leave a Reply