52
68

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

画像の認識 〜 Yolo

Last updated at Posted at 2017-04-18

Yolo を試してみました

以前、子供のために、Raspberry Pi Zero+Pi Camera を使ったプラレールを制作しました。
image

先頭車両に穴をあけてカメラを取り付け、Raspbian にインストールした MJPG Streamer で映像をストリーミング、モーターは WebSocket でコントロール、そしてライト機能を追加して、スマホや PC のブラウザで遊びます。1
映像を見ながらカメラ付きプラレールを操作するだけでも楽しいのですが、これに Yolo 画像認識を組み合わせたら、例えば、信号が赤なら止まる。電車が近くにあったら速度調整、駅に着いたら自動停止といったことも可能なのではないか?

という考えが頭に浮かび、Yolo が実際にどんなものなのか、触って確かめてみることにしました。

Yolo, Darknet とは?

Yoloは、"You only look once" の略で、リアルタイム画像認識を行うアルゴリズム(およびその実装)です2。Yolo は Darknet というフレームワークを使用して実装しています。
Darknet は C で書かれた機械学習フレームワークです。位置づけとしては、Tensorflow や Chainer のようなものになります。FCN というネットワークを使用していますが、これは darknet 以外の機械学習フレームワークでも実現可能ということで、すでに有志の方々が、Yolo の Tensorflow版Chainer版 を実装されています。
今回はおためしなので、Darknet を使用します。

インストール

自分の環境は、すでに CUDA と OpenCV がインストールされているので、必要なものだけインストールしました。

$ cd git
$ git clone https://github.com/pjreddie/darknet.git
$ cd darknet

ここで、Makefile を編集、GPU と OpenCV を有効にします。

$ diff Makefile Makefile.org 
1c1
< GPU=1
---
> GPU=0
3c3
< OPENCV=1
---
> OPENCV=0

そして make

$ make

これだけです。

実際に動かしてみる

静止画

この写真は、邪魔しに来た我が家の猫(♀)です。猫も、猫の下敷きになっているマウスもきちんと検出しています。

$ ./darknet detector test cfg/coco.data cfg/yolo.cfg yolo.weights '/home/kmori2/ピクチャ/img_6643.jpg' 

スクリーンショット_2017-04-18_21-05-56.png

GPU メモリ使用量を示すため、nvidia-smi の画面も貼り付けます。3
darknet が GPU メモリを 1.3GB 使用しています。
最低でも 4GB の GPU メモリを搭載したボードでないと、darknet を使用するのはつらいかもしれません。

動画

以前、子供と一緒にリモコンプラレールで遊んだ時に録画した映像を、Yolo にかけました。
上記静止画と同様、通常のモデル(Tiny ではない)を使用しています。
なお、この動画は 4 倍速です。動画を最後まで識別させるために、実際には 6 分以上かかりました。

$ ./darknet detector demo cfg/coco.data cfg/yolo.cfg yolo.weights ~/ビデオ/test0416-01.mp4

※画像をクリックすると youtube で再生されます。
Alt text
予想していたことですが、プラレールの運行中に視界に入るものについて、レールや駅など、列車に関わるものは全く認識していません。おおよそ Bed 、Laptop、Keyboard の3つとして検出してます。
乗り物の運行に関するものは特に学習していないようなので、これは当たり前ですね。

しかし、レゴの警官ミニフィグやソフビのウルトラマンは、しっかりと人(Person) として認識しています。ちょっと感動しました。(^^;

Yolo は検出したオブジェクトのリージョンまで検出するので、例えば「レール上に人(人形)が横たわっているので停止する」といった動作であれば簡単に実現できそうです。
まずはプラレールについて学習させ、モデルを作成しなければなりませんが、今後、楽しみです。

  1. 配線図やソースコードなど、いずれ公開しようと思います。

  2. 論文 https://arxiv.org/abs/1612.08242

  3. これまで、GTX1050(2GB) を使用していましたが、先日、GTX1080ti(11GB)に換装しました。こちらの製品です。

52
68
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
52
68

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?