画像内の物体を検出するObject Detection APIの使用方法 [TensorFlow]

TensorFlowの「Object Detection API」のインストールと使用方法です。
Object Detection APIでは「一般物体検出アルゴリズム」のSSD(Single shot multibox detector)やFaster RCNNなどでCOCOデータセットを使用して訓練された学習済みモデルを使用します。
前提条件
次の「Docker/nvidia-docker2のコンテナ」を作成してAnaconda、TensorFlowをインストール済みとします。
Docker/nvidia-docker2のコンテナ上にAnacondaをインストール |
TensorFlow(GPU版)/KerasのインストールからHello World |
※主にUbuntuでの解説ですが、Windowsの方は読み替えてください。
1. ソースなどを一括ダウンロードする
apt install git git clone https://github.com/tensorflow/models.git
[コマンド例]
root@xxx:~# git clone https://github.com/tensorflow/models.git
※今回はコンテナ上なので/rootに保存します。
2. protobuf-compilerのインストール
apt install protobuf-compiler
3. Protobufライブラリをコンパイル
cd models/research/ protoc object_detection/protos/*.proto --python_out=.
次のようなエラーが表示される場合があります。
object_detection/protos/ssd.proto:87:3: Expected "required", "optional", or "repeated". object_detection/protos/ssd.proto:87:12: Expected field name. object_detection/protos/model.proto: Import "object_detection/protos/ssd.proto" was not found or had errors. object_detection/protos/model.proto:12:5: "Ssd" is not defined.
その場合は次のコマンドも実行します。
apt install unzip wget -O protobuf.zip https://github.com/google/protobuf/releases/download/v3.0.0/protoc-3.0.0-linux-x86_64.zip unzip protobuf.zip ./bin/protoc object_detection/protos/*.proto --python_out=. protoc ./bin/protoc object_detection/protos/*.proto --python_out=.
4. PYTHONPATHにライブラリを追加する
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim
※このコマンドは一時的です。コンテナを再起動後する度に毎回実行する必要があります。
5. インストールのテスト
python object_detection/builders/model_builder_test.py
バージョンによっては次のようなエラーが表示されます。
Traceback (most recent call last): File "object_detection/builders/model_builder_test.py", line 311, in test_create_ssd_resnet_v1_fpn_model_from_config model = model_builder.build(model_proto, is_training=True) File "/root/models/research/object_detection/builders/model_builder.py", line 110, in build add_background_class) File "/root/models/research/object_detection/builders/model_builder.py", line 214, in _build_ssd_model ssd_config.anchor_generator) File "/root/models/research/object_detection/builders/anchor_generator_builder.py", line 91, in build cfg.normalize_coordinates File "/root/models/research/object_detection/anchor_generators/multiscale_grid_anchor_generator.py", line 61, in __init__ for scale in xrange(scales_per_octave)] NameError: name 'xrange' is not defined
xrangeはPython3では削除されている為に発生します。multiscale_grid_anchor_generator.pyの61行目にあるxrangeをrangeに変更します。
再度、テストを実行します。
6. チュートリアル
/root/models/research/object_detection/object_detection_tutorial.ipynbをJupyter NoteBookで開いて、上から順番に実行します。
In[]の横に「*」がある場合は実行中ですのでしばらく待ちましょう。
最後まで実行すると次のような画像が表示されます。


テスト画像を変更する場合は次の変数を変更します。
TEST_IMAGE_PATHS
学習済みモデルを変更するには
です。モデルはTensorflow検出モデル動物園で公開されています。
次は「mask_rcnn_inception_v2_coco」(http://download.tensorflow.org/models/object_detection/mask_rcnn_inception_v2_coco_2018_01_28.tar.gz)のモデルを使用した例です。

以上となります。
公式
公式のインストール方法 (英語)