Faster R-CNNのCaffe・Python実装で物体検出モデルを作成してみた

py-faster-rcnn-training
Faster R-CNNのCaffeとPythonによる実装「py-faster-rcnn」で、物体検出モデルを作成してみました。

py-faster-rcnnのインストールや物体検出デモの方法は、以下の記事をご覧ください。

Faster R-CNNのCaffe・Python実装で物体検出デモを試してみた
Faster R-CNNのCaffeとPythonによる実装「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」で、物体検出モデルを作成してみました。