Faster R-CNNのChainer実装で物体検出を試してみた

chainer-faster-rcnn1
Faster R-CNN(Region-based Convolutional Neural Networks)のChainerによる実装「chainer-faster-rcnn」で、物体検出を試してみました。

なお、Faster R-CNNの詳細は、以下の論文をご覧ください。

Shaoqing Ren, Kaiming He, Ross Girshick, Jian Sun, “Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

スポンサーリンク

chainer-faster-rcnn

準備(2016年11月5日時点のアップデートを反映)

chainer-faster-rcnn(https://github.com/mitmul/chainer-faster-rcnn)のREADME.mdを参照して、準備を行います。

以下の記事で構築したPython 3.5.1とOpenCV 3.1の環境を利用します。

Python3とOpenCV3の環境を構築してみた
Ubuntu 14.04にpyenvをインストールした後、AnacondaによりPython 3.5環境を構築しました。更に、Anacondaのパッケージ管理ツールcondaでOpenCV 3.1環境を構築しました。

前回の記事で、Python 3.5.1を含むPythonパッケージanaconda3をインストールし、Anacondaのパッケージ管理ツールcondaでOpenCV 3.1もインストールしているので、以下のコマンドでChainer(1.9.1+が必要、インストール時点の最新版は、1.12.0)をインストールすると、環境が整いました。

$ pip install chainer

次に、あらかじめ作成しておいたgithubディレクトリに移動し、GitHubのchainer-fast-neuralstyleをcloneします。

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

chainer-faster-rcnn/libディレクトリに移動し、extensionをビルドします。

$ cd chainer-faster-rcnn/lib
$ python setup.py build_ext -i
$ cd ..

chainer-faster-rcnnディレクトリに戻ったら、(dataディレクトリが無ければ作成した後)dataディレクトリに移動し、トレーニング済みモデルをダウンロードします。

$ if [ ! -d data ]; then mkdir data; fi; cd data
$ wget https://dl.dropboxusercontent.com/u/2498135/faster-rcnn/VGG16_faster_rcnn_final.model
$ cd ..

chainer-faster-rcnnディレクトリに戻ったら、PASCAL VOC2007のテスト画像をダウンロードします。

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

物体検出

以下のコマンドを実行し、入力画像から物体を検出します。

$ python forward.py --img_fn <path/to/input_image> [--out_fn <path/to/output_image>]

オプションの使い方は、--img_fnオプションで入力画像(省略時は、sample.jpg)、--out_fnオプションで出力画像(省略時は、result.jpg)を指定します。また、--gpuオプションでGPUモードに変更できます。

README.md通りに物体検出を行ってみます。

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

約30秒で、下の画像が出力されます。

result.jpg

result.jpg

処理時間が気になるので、複数の入力画像を処理するように変更して計測すると、モデルの準備に20秒位掛かっていますが、GTX 960では、1枚目は約1秒、2枚目以降は約0.5秒で処理できています。

まとめ

Faster R-CNNのChainer実装「chainer-faster-rcnn」で、物体検出を試してみました。

気になる処理時間に関して、モデルの準備に20秒位掛かっていますが、GTX 960では、1枚目は約1秒、2枚目以降は約0.5秒で処理できています。