物体検出 (YOLOv3)

YOLO v3 は、深層学習アルゴリズムを適用した物体検出を行う解析プログラムである。Keras (Tensorflow バックエンド)フレームワークを使って実行できるモデルは、qqwweee/keras-yolo3 で公開されている。

環境構築

ここでは Anaconda を使用して、YOLOv3 用の仮想環境を構築する。YOLO v3 に必要なライブラリーを conda コマンドでインストールする。

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

データの準備

qqwweee/keras-yolo3 版の YOLOv3 は、クラスラベルとアノテーションの 2 種類のファイルを必要とする。クラスラベルのファイルは、次のようにクラス名が、1 クラス 1 行で記述さしているファイルである。

dog
cat
mouse

アノテーションファイルは、画像へのパス、物体の位置情報(バウンディングボックス)およびクラス番号が記載されているファイルである。1 画像につき 1 行で記述する。1 画像に複数の物体がある場合は、それらを空白で区切って書く。

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

画像のクラスラベルとアノテーションを準備してから、次に学習済みのモデルをダウンロードして、keras で扱える状態にする。

wget https://pjreddie.com/media/files/yolov3.weights
python convert.py yolov3.cfg yolov3.weights model_data/yolo.h5

学習

学習は train.py を使用する。train.py ファイル中に annotation_path および classes_path 変数があるので、これらの変数の値を書き換えて、それぞれ、上で作ったクラスラベルのファイルへのパスおよびアノテーションファイルへのパスを与える。

    annotation_path = 'my_annotations.txt'  # changed
    log_dir = 'logs/000/'
    classes_path = 'my_classes.txt'  # changed
    anchors_path = 'model_data/yolo_anchors.txt'
    class_names = get_classes(classes_path)

パスの書き換えが終われば、そのまま train.py を実行するだけで学習が開始される。学習し終えると、予測モデルが trained_weights_final.h5 の名前で保存される。

python train.py

途中で「OOM when allocating tensor with shape」のようなエラーが生じる場合は、train.py ファイルを開いて、batch_size