PythonMania

普段はロボットとAIを組み合わせて色々作ってます。Python関係以外も色々投稿していくと思います。

【Python】tensorflow objectdetection api 学習の仕方【DeepLearning】

今更ですがtensorflow objectdetection api のチュートリアルを試してみたのでメモ!





スポンサードリンク





①事前準備

以下URLよりコードをダウンロードできます






github.com









ダウンロードしたら、環境変数「PYTHONPATH」に

"~/models-master"
"~/models-master/research"
"~/models-master/research/slim"

までの絶対パスを追加しておきます






また今回学習させる画像データ・アノテーションファイルは以下のURLからダウンロードできます(チュートリアル用のデータです)


http://www.robots.ox.ac.uk/~vgg/data/pets/data/images.tar.gz

http://www.robots.ox.ac.uk/~vgg/data/pets/data/annotations.tar.gz


データはzip形式でダウンロードされるので、解凍しておきます。






次に、今回使用する学習済モデルをダウンロードしておきます

github.com


今回はssd_mobilenet_v1_cocoを使用して転移学習を行っていきます.








②TF-Recordの作成



ObjectDetection apiで学習を行うためにはTF-recordという独自のデータ形式に変換する必要があります。




models-master以下の「research」ディレクトリに移動したうえで、以下のコマンドでTF-Recordを作成します。

python object_detection/dataset_tools/create_pet_tf_record.py /
--label_map_path=object_detection/data/pet_label_map.pbtxt /
--data_dir=`/` /
--output_dir=`/`
    • label_map_pathは.pbtxt(カテゴリラベルファイル)のディレクトリを指定
    • data_dirは先程ダウンロードしてきたimages・annotationsフォルダが置かれているディレクトリ

(images・annotationsフォルダはresearch直下に配置するといいと思います)

    • output_dir =TF-Recordを生成するディレクトリ






③コンフィグファイルの設定

学習を行う前に、コンフィグファイルの設定を行っていきます.




コンフィグファイルには学習を行うための様々なパラメータが設定してあります.

以下のファイルを編集していきます。
(今回はssd_mobilenet_v1_cocoモデルを使用するので以下のファイルですが、
別のモデルをダウンロードしてきた場合は適宜編集するファイルを変更してください)




research/object_detection/samples/configs/ssd_mobilenet_v1_coco.config




変更するのは以下の4か所です



①num_class
ssd { num_classes: 37 # 分類する数

.pbtxtファイルを確認して、分類する数に変更する



②fine_tune_checkpont
fine_tune_checkpoint: "~/research/ssd_mobilenet_v1_coco_2018_01_28/model.ckpt"

models.ckptまでの絶対パスを指定



③input_path

input_path:"~/research/train_record/*"


先程生成したtrain_recordまでの絶対パスを指定





④label_map_path
label_map_path: "~/research/object_detection/data/pet_label_map.pbtxt"}

.pbtxtまでの絶対パスを指定







④トレーニングの実行


以下コマンドでトレーニングを実行します

python research/object_detection/legacy/train.py --logtostderr /

    • pipeline_config_path=~\models-master\models-master\research\ssd_mobilenet_v1_coco.config /
    • train_dir=~\models-master\models-master\research\result

僕の場合は「research」ディレクトリから実行すると、
「nets」モジュールが読み込めないor「object-detection」モジュールが読み込めない
というエラーが出てしまうので、一つ上のmodels-masterディレクトリから実行しました

それぞれ環境変数に追加しているのになんでだろう...




⑤.pb形式で出力


python research/object_detection/export_inference_graph.py /

    • input_type=image_tensor /
    • pipeline_config_path=~\research\ssd_mobilenet_v1_coco.config /
    • trained_checkpoint_prefix=~\research\result\model.ckpt-242 /
    • output_directory=~\research\result2