2017年6月9日金曜日

TensofFlow版のSSDを試してみた。(I tried SSD (Single Shot MultiBox Detector) with TensorFlow)

検出結果

はじめに

SSD (Single Shot MultiBox Detector)は、特定の物体の検出と分類を同時に行うアルゴリズムである。
どのようなアルゴリズムかは、スライド SSD: Single Shot MultiBox Detector が参考になる

本来Caffeをベースに開発されたが、諸事情によりTensorFlow版を試してみた。
ベースのTensorFlowの環境は
 cuda 8
 cuDNN 5.1
 Tensorflow 1.1
である。

ソースの取得と展開

ここから一式をダウンロードする。

展開すると
SSD-Tensorflow-masterというフォルダーが作成される。

モデルデータの展開

./checkpoint に移動し、ssd_300_vgg.ckpt.zipを展開する

準備

notebooksに移動し、ssd_notebook.ipynb を修正する。

65行目の
from notebooks import visualization を
import visualization に変更する

また、オリジナルのCaffeから
run_jupyter.sh、jupyter_notebook_config.py をコピーする。

 jupyter_notebook_config.py は /root/.jupyter/ に
 run_jupyter.sh は /opt/SSD-Tensorflow-master/notebooks/ に

起動

./run_jupyter.sh --allow-root
を実行するとJupyter Notebookが起動する。

ssd_notebook.ipynb を選択し、cell から Run All を実行する。

ラベル名

補足このデモでは、検出結果がindexで表示されているので正解なのか分かりにくい

ラベルを探してみると
SSD-Tensorflow-master/datasets/pascalvoc_common.py
のファイルに20クラスが定義されている。   

VOC_LABELS = {
    'none': (0, 'Background'),
    'aeroplane': (1, 'Vehicle'),
    'bicycle': (2, 'Vehicle'),
    'bird': (3, 'Animal'),
    'boat': (4, 'Vehicle'),
    'bottle': (5, 'Indoor'),
    'bus': (6, 'Vehicle'),
    'car': (7, 'Vehicle'),
    'cat': (8, 'Animal'),
    'chair': (9, 'Indoor'),
    'cow': (10, 'Animal'),
    'diningtable': (11, 'Indoor'),
    'dog': (12, 'Animal'),
    'horse': (13, 'Animal'),
    'motorbike': (14, 'Vehicle'),
    'person': (15, 'Person'),
    'pottedplant': (16, 'Indoor'),
    'sheep': (17, 'Animal'),
    'sofa': (18, 'Indoor'),
    'train': (19, 'Vehicle'),
    'tvmonitor': (20, 'Indoor'),
}

rclasses の値を取得し、
print VOC_LABELS[index]
でクラス名を表示できる。

上記デモ画像は、
2、7、12でそれぞれ、自転車、車、犬と正解である。

0 件のコメント:

コメントを投稿