YOLO(You Only Look Once)試してみた


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行目
Makefile
GPU=1
  • cuDNNを有効化
    Makefileの2行目
Makefile
CUDNN=1
  • OpenCVを有効化
    Makefileの3行目
Makefile
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に驚き…