物体検出 (Faster R-CNN)

Faster R-CNN は、オブジェクトの位置とオブジェクトのクラス判定の両方を畳み込みニューラルネットワークで行うアルゴリズムである。アルゴリズム全体の処理時間が、R-CNN などに比べて非常に速い。Faster R-CNN のソースコードはいくつかの GitHub アカウントで公開されている。例えば、jinfagang/keras_frcnn では Keras で実装した Faster R-CNN のソースコードが公開されている。ここでは、このソースコードを使用して、学習および予測を行う例を示す。

環境構築

jinfagang/keras_frcnn は、keras 2.0.3 を指定しているので、Anaconda を使用して、Faster R-CNN 用の仮想環境を構築する。conda コマンドを使用すると keras 2.0.3 をインストールできないので、ここでは pip コマンドを使用して keras をインストールする。

conda create -n frcnn_env python=3.6
source activate frcnn_env
pip install keras==2.0.3
conda install tensorflow-gpu

データの準備

写真および写真中の物体の位置情報(バウンディングボックス)等のアノテーションを 1 つのテキストファイルに書き出す。このテキストファイルには、画像へのパス、バウンディングボックスの座標 x1、座標 y1、座標 x2、座標 y2、物体の名前の順で情報を記入していく。1 物体につき 1 行で記入していく。ここでこのファイルの名前を my_data_annotations.txt としておく。

/path/training/images/001.jpg,120,42,250,168,dog
/path/training/images/001.jpg,320,532,610,690,cat
/path/training/images/002.jpg,20,420,130,980,dog

学習

学習は train_frcnn_kitti.py を使用して行う。この際に、train_frcnn_kitti.py ファイル中の cfg.model_path の値をモデルの保存先パスに書き換えて、cfg.simple_label_file の値をアノテーションファイルへのパスに書き換える必要がある。

    cfg.model_path = 'my_best_model.hdf5'
    cfg.simple_label_file = 'my_data_annotations.txt'

パスの書き換えが終われば、そのまま train_frcnn_kitti.py を実行するだけで学習が開始される。学習し終えると、予測モデルが my_best_model.hdf5 の名前で保存される。また、学習時のハイパーパラメーター等は、config.pickle ファイルに保存される。これらのファイルは予測時に使用する。

source activate frcnn_env
python train_frcnn_kitti.py

学習時のハイパーパラメーター(エポック数、入力画像のサイズ等)は、keras_frcnn フォルダ中の config.py ファイルに記載されている。このファイル中の各変数の値を書き換えることでハイパーパラメーターを調整することができる。

予測(物体検出)

予測は predict_frcnn_kitti.py を使う。この際に、写真へのパスは -p オプションで与える。また、多くの写真を含んでいるフォルダへのパスを -p オプションで与えると、predict_frcnn_kitti.py がフォルダ内にあるすべての写真に対して物体検出を行うようになる。

source activate frcnn_env
python predict_frcnn_kitti.py -p /path/to/test_image.jpg

References

  • Ren S, He K, Girshick R, Sun J. Faster R-CNN: Towards real-time object detection with region proposal networks. arXiv. 2016. arXiv: 1506.01497