Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

はじめに

これまで、オブジェクト検出として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バージョン
しかし、最新の手法が色々なフレームワークで簡単に試せるのは非常にありがたいですね。
私も、人々の役に立つソースを提供したいと思う今日このごろです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした