LoginSignup
21
32

More than 5 years have passed since last update.

YOLOv2(TensorFlow)を使ってリアルタイムオブジェクト認識をしてみる

Posted at

はじめに

これまで、オブジェクト検出として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)

結果

sample1.png

まとめ

今回、TensorFlowを使用しましたが、
他にもKeras,Chainer等のバージョンが GitHubにアップされているので
自分の好きなフレームワークを使用してYOLO(v2)を試してみてください。
Kerasバージョン
Chianerバージョン
しかし、最新の手法が色々なフレームワークで簡単に試せるのは非常にありがたいですね。
私も、人々の役に立つソースを提供したいと思う今日このごろです。

21
32
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
32