Python
DeepLearning
docker
TensorFlow
ObjectDetectionAPI

Tensorflow Object Detection API クイックスタート

はじめに

この記事は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 のドキュメント(英語)

他の解説記事