#はじめに
これまで、オブジェクト検出としてBING、Selective Search、Faster-RCNNといった手法を試してきました。
今回は現在(2017/6月)のところ最速であろうYOLO(v2)を試したみたいと思います。
オリジナルはC言語で書かれています。 https://pjreddie.com/darknet/yolo/
・過去の記事はこちら
CNNの前処理としてOpenCVでBINGを使ってみた
R-CNNとしてSelective search を使ってみた
Faster R-CNNを使ってリアルタイムオブジェクト検出をしてみよう
#実行環境
OS: Ubuntu16.04LTS
GPU:GTX-1050
Python:3.5
CUDA8.0
cuDNN5.1
#準備
大変ありがたいことに、TensorFlowを使用したバージョンを公開されてますので今回はこちらを使います。
(C++でラッパークラスを作ったりもしましたがPythonを使いたいので)
インストールはReadmeに書かれている内容通りなのでつまずくことはないと思います。
(※TensorFlowとOpenCVをインストールしていない場合は、事前にインストールしてください)
GitHubからクローンして、フォルダに入ります。
git clone https://github.com/thtrieu/darkflow.git
cd darkflow
YOLOのホームページからweightファイルをダウンロードしておきます。
wget https://pjreddie.com/media/files/yolo.weights
インストール方法は下記の3通りあります。自分の環境に合わせてインストールしましょう。
■方法1(:この方法でインストールする場合は、グローバルにインストールされていないため、フローの代わりに複製されたダークフローディレクトリで./flowを使用する必要があります。)
python3 setup.py build_ext --inplace
■方法2(pipを使ってグローバルにインストールします。グローバルアクセス可能だが、この場合コードへの変更はただちに有効になる)
pip install -e .
■方法3(pipを使ってグローバルにインストールします)
pip install .
#サンプルコード
難しいところは特に無いですね。
bin/yolo.weights
には先程ダウンロードしたweightファイルのパスが入ります。
結果result
にはJSON形式で結果が格納されます。あとはこれをパースして描画などをします。
※gpu:1.0
はGPUの使用率です。私の環境では、1.0にするとOut Of Memoryのエラーが出たので0.6に設定してます。
from darkflow.net.build import TFNet
import cv2
options = {"model": "cfg/yolo.cfg", "load": "bin/yolo.weights", "threshold": 0.1, "gpu": 1.0}
tfnet = TFNet(options)
imgcv = cv2.imread("./sample_img/dog.jpg")
result = tfnet.return_predict(imgcv)
print(result)
#まとめ
今回、TensorFlowを使用しましたが、
他にもKeras,Chainer等のバージョンが GitHubにアップされているので
自分の好きなフレームワークを使用してYOLO(v2)を試してみてください。
Kerasバージョン
Chianerバージョン
しかし、最新の手法が色々なフレームワークで簡単に試せるのは非常にありがたいですね。
私も、人々の役に立つソースを提供したいと思う今日このごろです。