ホーム > カテゴリ > Python・人工知能・Django >

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

Python/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[]の横に「*」がある場合は実行中ですのでしばらく待ちましょう。

最後まで実行すると次のような画像が表示されます。

テスト画像を変更する場合は次の変数を変更します。

PATH_TO_TEST_IMAGES_DIR
TEST_IMAGE_PATHS

学習済みモデルを変更するには

MODEL_NAME

です。モデルはTensorflow検出モデル動物園で公開されています。

次は「mask_rcnn_inception_v2_coco」(http://download.tensorflow.org/models/object_detection/mask_rcnn_inception_v2_coco_2018_01_28.tar.gz)のモデルを使用した例です。

以上となります。

公式

公式のインストール方法 (英語)





関連記事



公開日:2018年08月05日 最終更新日:2018年08月24日
記事NO:02711