TensorFlow Object Detection APIの環境構築と実行のまとめ – MacOSとUbuntu 16.04に対応

Object Detection APIの実行結果 プログラミング

Googleから一般物体検知の新しいAPIが発表されました。(Tensorflow Object Detection API

このAPIは最新の一般物体検知技術と様々な画像認識(分類)技術を組み合わせた、学習済みのディープラーニングネットワークを利用することができます。

今回は、Object Detection APIの環境構築と実行までを解説したいと思います。

基本環境
OS: macOS Sierra 10.12.5
TensorFlow: 1.2 (virtualenv実行)
Python: 2.7.10

TensorFlow Object Detection APIのコードをGitHubからcloneする

TensorFlow Object Detection APIはTensorFlowの機械学習モデルの一つとしてオープンソースで公開されています。(GitHub公開: TensorFlow Models

TensorFlow Object Detection APIを動かすには、まずソースコードをローカルPCにダウンロードするかCloneします。

ここでは、Cloneして動作させたいと思います。

作業フォルダに移動して、git cloneを実行します。

$ cd dev_tensorflow
$ git clone https://github.com/tensorflow/models.git

TensorFlow Object Detection APIのセットアップ

Object Detection APIを動かすには依存ライブラリをインストールする必要があります。

依存ライブラリ
Protobuf 2.6
Pillow 1.0
lxml
Jupyter notebook
Matplotlib

pythonパッケージの場合はpipコマンでインストールできますが、「Protobuf」はpipでインストールできないので、パッケージ管理ソフトからインストールします。

Ubuntuの場合は「apt-get」を利用します。

$ sudo apt-get install protobuf-compiler

MacOSの場合は最近一般的な「homebrew」を利用します。

$ sudo brew install protobuf

ライブラリのインストールが終わったら、cloneしたmodelsフォルダに移動して以下の作業を行います。

Protobufのコンパイル

APIを利用する前にProtobufをコンパイルします。

$ protoc object_detection/protos/*.proto --python_out=.

PYTHONPATHの追記

PYTHONPATHにslimディレクトリのパスを追記します。因みに、slimディレクトリはCloneしたmodelsフォルダに含まれています。(virtualenvでTensorFlowを動かしている場合は、起動の度に毎回実行する必要があります。面倒な場合は.bashrcに追記しておくと良いでしょう。)

$ export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim

Testコマンドの実行

APIを動かす環境の準備が正しく完了したかどうかtestスクリプトを実行して確認します。

$ python object_detection/builders/model_builder_test.py

「OK」と表示されたらObject Detection APIを動かす準備が整いました。

TensorFlow Object Detection APIの実行

Object Detection APIを実行させる準備が完了したので、サンプルコードを動かしてみます。

サンプルコードはjupyterベースになっているので、簡単にステップバイステップで動かすことができます。

models/object_detectionに移動して、jupyterを実行させます。

$ cd object_detection/
$ jupyter notebook

ブラウザからjupyterのローカルホストにアクセスして、「object_detection_tutorial.ipynb」をクリックして開きます。

jupyterの実行

上部の実行ボタンをクリックするとコードが逐次実行されるので、最後のコードまでボタンを押して実行させます。(途中の「Download Model」のところでしばらく時間がかかります。)

最後まで実行させると、以下のような画像が表示されて正しく物体検知できていることが確認できます。

Object Detection APIの実行結果

Object Detection APIの実行結果

テスト画像の変更

物体検知させる画像を変更するには、「TEST_IMAGE_PATHS」部分のコードを変更します。

# For the sake of simplicity we will use only 2 images:
# image1.jpg
# image2.jpg
# If you want to test the code with your images, just add path to the images to the TEST_IMAGE_PATHS.
PATH_TO_TEST_IMAGES_DIR = 'test_images'
TEST_IMAGE_PATHS = [ 任意の画像ファイルへのパスを書く]

# Size, in inches, of the output images.
IMAGE_SIZE = (12, 8)

物体検知モデルの変更

サンプルコードでは物体検知のディープラーニングネットワークに、Single Shot Multibox Detector (SSD)にMobileNetを組み込んだネットワークモデルを使っています。

Object Detection APIでは下記の学習済みネットワークモデルを使用できます。

学習済みモデルネットワークモデル名
SSD with MobileNetssd_mobilenet_v1_coco_11_06_2017
SSD with Inception V2ssd_inception_v2_coco_11_06_2017
R-FCN with Resnet 101object_detection/rfcn_resnet101_coco_11_06_2017
Faster RCNN with Resnet 101faster_rcnn_resnet101_coco_11_06_2017
Faster RCNN with Inception Resnet v2faster_rcnn_inception_resnet_v2_atrous_coco_11_06_2017

ネットワークモデルを変更するには、ソースコードの「MODEL_NAME」の箇所を上記のネットワークモデル名に変更します。

# What model to download.
MODEL_NAME = ‘使用するネットワークモデル名'
MODEL_FILE = MODEL_NAME + '.tar.gz'
DOWNLOAD_BASE = 'http://download.tensorflow.org/models/object_detection/'

# Path to frozen detection graph. This is the actual model that is used for the object detection.
PATH_TO_CKPT = MODEL_NAME + '/frozen_inference_graph.pb'

# List of the strings that is used to add correct label for each box.
PATH_TO_LABELS = os.path.join('data', 'mscoco_label_map.pbtxt')

NUM_CLASSES = 90

コメント

この記事が気に入ったら最新ニュース情報を、
いいねしてチェックしよう!