YOLO
YOLOとはリアルタイム物体検出アルゴリズムで、「You only look once」の頭文字を取って「YOLO」と呼ばれています。
YOLOはDarknetというフレームワークで開発されています。
アルゴリズムの詳細は論文を検索してみてください。
ビルド環境構築
Visual Studio 2017
C++によるデスクトップ開発 をインストールします。
CUDA Toolkit/cuDNN
下記バージョンの CUDA Toolkit、cuDNNをインストールします。
インストール方法につていは「CUDA Toolkit」あたりで検索すると解説サイトがヒットすると思います。
【参考】NVIDIA CUDA toolkit on Windows
- CUDA Toolkit 10.1
- cuDNN 7.4
OpenCV
OpenCV からビルド済みの OpenCV をダウンロードします。
2020年7月現在、最新版は 4.x.x ですが 3.4.x を入手します。
Windows版は自己解凍型の実行ファイルで配布されていますので、入手後、とりあえず下記のフォルダに展開します。
C:\tools\opencv
で、下記フォルダパスを環境変数 Path に登録しておきます。
C:\tools\opencv\build\x64\vc14\bin
Darknetのビルド
-
ソースコードの入手
AlexeyAB/darknet から Darknet のソースコード一式を入手します。
下記の手順は C:\work にGitリポジトリを clone したことを前提としています。> cd C:\work > git clone https://github.com/AlexeyAB/darknet.git
-
Visual Studio 2017の起動
darknet.sln(c:\work\darknet\build\darknet\darknet.sln)をVS2017 プロジェクトを開きます。 -
プロジェクトの設定
- ビルドの依存関係設定
- 構成とプラットフォームの変更
- メニューから ビルド ⇒ 構成マネージャー を開きます。
- プロジェクトを右クリック ⇒ プロパティ を開きます。
- 「C/C++」→「全般」→「追加のインクルードディレクトリ」で以下を追加します。
- C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin
- C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\include
- C:\tools\cuda\include
- C:\tools\opencv\build\include
- ライブラリディレクトリの設定
- プロジェクトを右クリック ⇒ プロパティ を開きます。
- 「リンカー」→「全般」→「追加のライブラリディレクトリ」で以下を追加します。
- C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\lib
- C:\tools\cuda\lib\x64
- C:\tools\opencv\build\x64\vc14\lib
上記設定後、ビルドを実行すると、C:\work\darknet\build\darknet\x64 にdarknet.exeが生成されます。
darknet.exeの使い方
darknet.exe を使用するためには YOLO のバージョンに対応した weights ファイルを入手する必要があります。
主なファイルは下記のリンク先ファイルになります。
-
yolov3.weights (237 MB)
-
yolov3-tiny.weights (33.7 MB)
-
yolov4.weights (245 MB)
-
yolov4-tiny.weights (23.1 MB)
画像ファイルに映る物体の検出
darknet のソースの中にサンプルの写真が何枚か入っていますので、それを利用して動作確認ができます。
-
YOLO v3の場合
> darknet detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights data/dog.jpg
-
YOLO v4の場合
> darknet detector test cfg/coco.data cfg/yolov4.cfg yolov4.weights data/dog.jpg
カメラに映る映像のリアルタイム物体検出
PCにカメラを付けると、カメラの映像を入力にして物体検出をしてくれます。
GPU無しで実行するのは結構きついです。
ちなみに、GeForce 1050では 約7フレーム/秒 くらいでした。
> darknet detector demo cfg/coco.data cfg/yolov4.cfg yolov4.weights
MP4動画映像のリアルタイム物体検出
> darknet detector demo cfg/coco.data cfg/yolov4.cfg yolov4.weights -thresh 0.5 data/test.mp4 -dont_show 1 -out_filename result/test_out.mp4