ぺ ん ぎ ん の 閃 き

閃き- blog

きらびやかに、美しく、痛烈に.

Google TF Object Detection API : SSD (Single Shot MultiBox Detector) - MobileNetV1 (with MS COCO)をローカル環境で動かす方法


f:id:yumaloop:20190119172625p:plain

1. はじめに

1.1 論文リンク

SSDについては、リンク先のQuitta記事で原論文の日本語全訳が読めます。ありがたい。


1.2 Githubの公式ページ

・ローカル環境でSSDを動かす方法については、Githubにある公式ページRunning locallyをぜひチェックして下さい。このポストは"Running locally"の内容を噛み砕いたものです。

f:id:yumaloop:20190119173930p:plain

Google TensorFlow API のブランチをローカルにコピー (git clone) しておくと楽です。

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


2. APIが要求するライブラリをローカル環境にインストールする

Tensorflow Object Detection API は以下のライブラリに依存します。
環境にない場合は随時インストールしてください。

  • Protobuf 3.0.0
  • Python-tk
  • Pillow 1.0
  • lxml
  • tf Slim (which is included in the "tensorflow/models/research/" checkout)
  • Jupyter notebook
  • Matplotlib
  • Tensorflow (>=1.9.0)
  • Cython
  • contextlib2
  • cocoapi

※ インストール方法については、下記リンクの公式ページで詳しく解説されています。
github.com



3. Githubから必要なファイルをダウンロード

3.1 Configファイル(JSON形式)のダウンロード

下記リンクから、学習済みモデル「ssd_mobilenet_v1_coco」について書かれたJSON形式の設定ファイル(.config)をローカル環境にダウンロードする。


models/ssd_mobilenet_v1_coco.config at master · tensorflow/models · GitHub

3.2 モデルの学習済み特徴量のダウンロード

下記リンク先のページから、MS COCOデータセットで学習済みのモデルの特徴量をダウンロードできる。今回はMobileNetV1の特徴量が欲しいので「COCO-trained models」から「ssd_mobilenet_v1_coco」を選択し、.tar.gz形式のファイル(.ckpt)をローカル環境にダウンロードする。


models/detection_model_zoo.md at master · tensorflow/models · GitHub

f:id:yumaloop:20190119173019p:plain

ダウンロードしたら、設定ファイル:ssd_moblienet_v1_coco.configを開き、ローカル環境でのパス(.ckptファイルがある場所)を指定する。

fine_tune_checkpoint: "PATH_TO_BE_CONFIGURED/model.ckpt"

3.3 MS COCOデータセットを読み込むためのシェルスクリプトをダウンロード

MS COCOデータセットのインポートを行うシェルスクリプト(.sh)を、下記リンクからローカル環境にダウンロードする。


models/download_and_preprocess_mscoco.sh at master · tensorflow/models · GitHub

ダウンロードしたら、設定ファイル:ssd_moblienet_v1_coco.configを開き、ローカル環境でのパス(.shファイルがある場所)を指定する。

input_path: "PATH_TO_BE_CONFIGURED/mscoco_train.record-?????-of-00100"

download_and_preprocess_mscoco.shは、元データをTensorFlowが読み込めるデータセットに変換してくれるシェルスクリプト。これを実行。(10h~15hかかる)

$ /hogehoge/hoge/download_and_preprocess_mscoco.sh


3.4 ベクトルデータからラベルと名前の紐付け(ex. 0 → "cat")

名前の紐付けを行うファイル(.pbtxt)を、下記リンクからローカル環境にダウンロードする。


models/mscoco_label_map.pbtxt at master · tensorflow/models · GitHub

ダウンロードしたら、設定ファイル:ssd_moblienet_v1_coco.configを開き、ファイルの該当箇所にローカル環境でのパス(.pbtxtファイルがある場所)を指定する。

label_map_path: "PATH_TO_BE_CONFIGURED/mscoco_label_map.pbtxt"


3.5 実行ファイル(.py)を動かす。

 ローカル環境でSSDを動かす方法はGithubにある公式ページRunning locallyに載っている。ダウンロードしたファイルをディレクトリ構造に注意しつつ配置して、実行ファイル(.py)が動けばOK.