#はじめに
これまで、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
#結果
テスト画像の結果です
こちらは自分で用意した画像
どちらも正確に検出されていますね。
さらにGTX970を使った場合では約0.3~0.4秒で検出されています。
ちなみにCPUのみの場合30秒ほどかかりました。
#まとめ
Faster R-CNNは現時点ではかなり優れた手法と言えそうです。
グラフィックックスボードが必須ですが。
今後、モバイルデバイスでも動作するような軽量モデルも出てくることでしょう。
[2016/11/30追記]
と思っていたら、より高速なSingle Shot Multi-box Detectionという手法があるみたいですね。
https://arxiv.org/abs/1512.02325
こちらも暇な時間に試してみたいと思います。