Tensorflow Object Detection API クイックスタート
Qiitaから移行しました。
はじめに
この記事は2017年6月に公開されたTensorflow Object Detection APIのクイックスタートガイドです。 ドキュメント読んだり、環境設定に時間を掛けずにペットデータセットを使ったサンプルをDockerを使ってローカル環境で簡単に試せるようにしました。 僕自身もそうですが、普段PythonやDeepLearningをやっていない人の助けになれれば幸いです。
環境
必要な環境はDockerだけです。 メモリが足りないとプロセスが止まってしまうので12GB程度割り当てて下さい。
- Docker
- CPUs: 2, Memory: 12GB
Mac以外でも動くと思いますが、自分のマシンのスペックを記載しておきます。
- MacBook Pro (13-inch, 2016)
- CPU: 3.3 GHz Intel Core i7
- Memory: 16 GB
- OS: macOS Sierra 10.12.6
ステップ
Clone repository
まずはこのクイックスタートのために用意したレポジトリをクローンします。
git clone https://github.com/Jwata/tensorflow-pet-detector-quickstart cd tensorflow-pet-detector-quickstart
TF Recordの作成
ペットデータをダウンロードして、Object Detection APIのレポジトリのスクリプトを使ってTFRecordを作成します。 ダウンロードに結構時間かかります。
pushd data wget http://www.robots.ox.ac.uk/~vgg/data/pets/data/images.tar.gz wget http://www.robots.ox.ac.uk/~vgg/data/pets/data/annotations.tar.gz tar -xvf images.tar.gz tar -xvf annotations.tar.gz popd docker run -it -v `pwd`/data:/data jwata/tensorflow-object-detection \ python object_detection/create_pet_tf_record.py \ --label_map_path=/data/pet_label_map.pbtxt \ --data_dir=/data \ --output_dir=/data
data
ディレクトリ内を確認して2つのファイルが出来ていればOKです。
pet_train.record
はトレーニング用、pet_val.record
は評価用に使います。
ls data/pet_*.record data/pet_train.record data/pet_val.record
学習済みモデルのダウンロード
COCOデータセットの学習済みモデルをダウンロードします。 モデルはチュートリアルで使われているFasterRcnn + Resnet101というものを使っていますが、Googleは他の種類の学習済みも公開しているので、Configファイルを変更すれば別のモデルを選択することも可能です。 モデルの違いについては現在勉強中です。
pushd data wget http://storage.googleapis.com/download.tensorflow.org/models/object_detection/faster_rcnn_resnet101_coco_11_06_2017.tar.gz tar -xvf faster_rcnn_resnet101_coco_11_06_2017.tar.gz cp faster_rcnn_resnet101_coco_11_06_2017/* . popd
トレーニング
Dockerを使ってトレーニングのプロセスを開始します。
docker run -d -v `pwd`/data:/data --name pet_detector_train jwata/tensorflow-object-detection \ python object_detection/train.py \ --logtostderr \ --pipeline_config_path=/data/faster_rcnn_resnet101_pets.config \ --train_dir=/data/train
評価
トレーニングを開始したら評価のプロセスも開始できます。
docker run -d -v `pwd`/data:/data --name pet_detector_eval jwata/tensorflow-object-detection \ python object_detection/eval.py \ --logtostderr \ --pipeline_config_path=/data/faster_rcnn_resnet101_pets.config \ --checkpoint_dir=/data/train \ --eval_dir=/data/eval
Tensorboard
トレーニングと評価の進捗をTensorboardで確認します。
docker run -d -v `pwd`/data:/data -p 6006:6006 --name tensorboard \ jwata/tensorflow-object-detection \ tensorboard --logdir=/data open http://localhost:6006
10分ほど待つと評価プロセスの結果の画像が表示されると思います! 2,3日夜通し計算して5000~7000ステップほど学習したら結構良い結果が出ていました。
最後に
DeepLearningは勉強していてわくわくしますね。 次は下記のことを進めてていきます。
- 違うモデルで学習する
- 自分のデータセットで学習する
- 寿司の画像で学習中です。近日中に進捗を共有します。
参考リンク
Object Detection API のドキュメント(英語)
- Quick Start: Distributed Training on the Oxford-IIIT Pets Dataset on Google Cloud
- Running Locally
- ObjectDetectionAPIをローカルマシンで使うための解説
- Configuring the Object Detection Training Pipeline
- トレーニングのConfigについて