Edited at

Faster R-CNNを使ってリアルタイムオブジェクト検出をしてみよう

More than 1 year has passed since last update.


はじめに

これまで、R-CNNとしてBINGやSelective Searchといった手法を紹介してきました。

・過去の記事はこちら

CNNの前処理としてOpenCVでBINGを使ってみた

R-CNNとしてSelective search を使ってみた

しかし、BINGについてはあまり精度がよくない事、

Selective Searchについては処理速度が遅いといった不満が残ります。

そこで今回はFaster R-CNNを試したみたいと思います。


Faster R-CNNとは

物体の候補検出もCNNで行うことにより高速化された手法です。

もともとはFast R-CNNという手法が先に発表されましたが、

すぐ後に更に高速となったFaster R-CNNが発表されました。

(この世界の進歩の速度は恐ろしいものがあります。。)

詳しくはCornnel Univercityのページを参照してください

https://arxiv.org/abs/1506.01497


やり方

オリジナルはCaffe の方ですが

https://github.com/rbgirshick/py-faster-rcnn/tree/96dc9f1dea3087474d6da5a98879072901ee9bf9

個人的な趣味でCaffe はあまり使いたくないので、今回はChainerのバージョンを使います。

https://github.com/mitmul/chainer-faster-rcnn

環境:Ubuntu16.04LTS、Python2.7.12、 Chainer1.12.0

ReadMeに書かれた手順に従って実行していくだけです。

□ chainer-fast-neuralstyleをcloneします。

$ git clone https://github.com/mitmul/chainer-faster-rcnn

□ ライブラリフォルダに移動しビルドします

$ cd chainer-faster-rcnn/lib

$ python setup.py build_ext -i
$ cd ..

□ トレーニング済みモデルをダウンロードします

$ if [ ! -d data ]; then mkdir data; fi; cd data

$ wget https://dl.dropboxusercontent.com/u/2498135/faster-rcnn/VGG16_faster_rcnn_final.model`
$ cd ..

□ テスト画像をダンロードし実行します

$ wget http://vision.cs.utexas.edu/voc/VOC2007_test/JPEGImages/004545.jpg

$ python forward.py --img_fn 004545.jpg --gpu 0


結果

テスト画像の結果です

result_master.jpg

こちらは自分で用意した画像

result_dog.jpg

どちらも正確に検出されていますね。

さらにGTX970を使った場合では約0.3~0.4秒で検出されています。

ちなみにCPUのみの場合30秒ほどかかりました。


まとめ

Faster R-CNNは現時点ではかなり優れた手法と言えそうです。

グラフィックックスボードが必須ですが。

今後、モバイルデバイスでも動作するような軽量モデルも出てくることでしょう。

[2016/11/30追記]

と思っていたら、より高速なSingle Shot Multi-box Detectionという手法があるみたいですね。

https://arxiv.org/abs/1512.02325

こちらも暇な時間に試してみたいと思います。