SSDが現在最速のネットワークだと聞いて使っていたがなんとそれを上回るネットワークが発表されたらしい
それはあのYOLOの改良版とも言うべきYOLOv2
以下のようにSSDを上回るスピードと精度が報告されている
(サイト表より引用)
mAP, FPS共に前のYOLOを大きく上回っている
今回はこのYOLOv2の公開されている訓練済モデルで画像を認識させてみる
基本的には公式サイトにある通りに進めれば問題ない
今回使用する環境
以下の環境で作業を行った
- Ubuntu 14.04 LTS x86_64
- GCC 4.8.4
- CUDA 7.5
- OpenCV 2..4.8
YOLOv2のダウンロード, コンパイル
公式サイトにある通りに進める
たった3個のコマンドを実行するだけで終わる
ライブラリ絡みで悩むことはない
他フレームワーク(Caffe, Chainer等)と比べて非常に導入しやすい印象を受けた
CUDAを有効にしたコンパイルについてはここ
OpenCVを有効にしたコンパイルについてはここ
これらを有効にするためにはMakefileを1行ずつ編集するだけなので簡単
- CUDAを有効化
Makefileの1行目
GPU=1
- cuDNNを有効化
Makefileの2行目
CUDNN=1
- OpenCVを有効化
Makefileの3行目
OPENCV=1
そして以下を実行
git clone https://github.com/pjreddie/darknet
cd darknet
make
訓練済みモデルのダウンロード
これも公式サイトに書いてある通りに
wget http://pjreddie.com/media/files/yolo.weights
サンプルプログラムの実行
画像ファイルから認識する
公式サイトにあるように以下を実行するだけ
任意の画像ファイルを指定して認識できる
OpenCVを有効にしてコンパイルしていれば検出結果が表示される
./darknet detect cfg/yolo.cfg yolo.weights data/dog.jpg
2018/4/26 追記: @physics303 さんからコメントよりご指摘いただきました。
正しくは以下のようになります。
./darknet detect cfg/yolov2.cfg yolo.weights data/dog.jpg
data
ディレクトリに入っている画像ファイル6種類を試してみた結果
あらかじめ入っている画像だけあってかなりの検出率がうかがえる
ウェブカメラからリアルタイム認識
CUDAとOpenCVを利用するようにコンパイルしてあることが必須
ウェブカメラを接続して実行
カメラが複数ある場合は使用するカメラ-c <num>
オプションで選択
./darknet detector demo cfg/coco.data cfg/yolo.cfg yolo.weights
あまりに簡単すぎて記事にする必要すらなかったかも…
darknetに驚き…