Faster R-CNNのCaffeとPythonによる実装「py-faster-rcnn」で、物体検出モデルを作成してみました。
py-faster-rcnnのインストールや物体検出デモの方法は、以下の記事をご覧ください。
py-faster-rcnn training
準備
以下のコマンドで、PASCAL VOCデータセットをダウンロードします。
$ wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar $ wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar $ wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCdevkit_08-Jun-2007.tar
ダウンロードしたファイルを解凍します。
$ tar xvf VOCtrainval_06-Nov-2007.tar $ tar xvf VOCtest_06-Nov-2007.tar $ tar xvf VOCdevkit_08-Jun-2007.tar
py-faster-rcnnをインストールしているディレクトリ(ここでは、~/github/py-faster-rcnn)のdataディレクトリに移動し、上で解凍したPASCAL VOCデータセットにシンボリックリンクを張ります。
$ cd ~/github/py-faster-rcnn/data $ ln -s ~/Downloads/VOCdevkit VOCdevkit2007
py-faster-rcnnディレクトリに戻って、以下のコマンドで、imagenetモデルをダウンロードします。
$ cd ~/github/py-faster-rcnn $ ./data/scripts/fetch_imagenet_models.sh
物体検出モデルの作成
同じくpy-faster-rcnnディレクトリで、faster_rcnn_end2end.shを実行します。README.mdでは、
$ ./experiments/scripts/faster_rcnn_end2end.sh [GPU_ID] [NET] [--set ...]
となっていますが、実際には、以下のように途中で[DATASET]
を指定します。
$ ./experiments/scripts/faster_rcnn_end2end.sh [GPU_ID] [NET] [DATASET] [--set ...]
faster_rcnn_end2end.shの使い方は、GPUモード、ZFモデル、PASCAL VOCデータセットを使用する場合、以下のコマンドのように[GPU_ID]
に0、[NET]
にZF、[DATASET]
にpascal_vocを設定します。
$ ./experiments/scripts/faster_rcnn_end2end.sh 0 ZF pascal_voc
しばらく学習させていたのですが、終了までに10時間以上掛かりそうだったため、faster_rcnn_end2end.shの30行目の
ITERS=70000
を
ITERS=7000
に変更したfaster_rcnn_end2end_7000.shを実行します。
$ ./experiments/scripts/faster_rcnn_end2end_7000.sh 0 ZF pascal_voc
約1時間で学習(トレーニングフェーズ)が終了しました。
tools/demo.pyの37行目を上で学習したcaffemodelに変更して、物体検出を行った結果が、この記事の最初の画像です。
物体検出デモで用いたZFモデル(イタレーション:70000回?)と比較すると、今回作成したZFモデル(イタレーション:7000回)は、やはり検出性能が低いようです。
まとめ
Faster R-CNNのCaffeとPythonによる実装「py-faster-rcnn」で、物体検出モデルを作成してみました。