ロボット研究者の戯言

TensorFlow Object Detection API で学習済みモデルを使って物体検出

      2017/11/06

学習済みモデルを使って物体検出

前回の記事ではTensorFlow Object Detection APIをインストールしました.

公式ページに書いてある方法で動作テストは行いましたが,ターミナルにOKと出るだけで本当に出来てるの?と半信半疑だったので今回は実際に画像中の物体を検出し,結果を表示させるところまでやってみたいと思います!

と,張り切っていましたが公式チュートリアルにすべて書いてあり,この記事の存在価値が...

ということで,チュートリアルをそのまま実行するのではなく,チュートリアルとは別の学習済みモデルを用いてテストしてみましょう!

※とは言うものの主要な部分はほとんど公式チュートリアルそのものです(汗)

学習済みモデルのダウンロード

公式チュートリアルではpythonスクリプト中でモデルをダウンロードしていますが,今回はターミナルからwgetでダウンロードします.

2017年8月23日現在,使用可能なモデルは以下の通りです.

  • SSD(Single Shot Multibox Detector) + Mobilenet v1 (公式チュートリアルで使用するモデル)
  • SSD(Single Shot Multibox Detector) + Inception v2
  • RFCN + ResNet
  • Faster RCNN + ResNet
  • Faster RCNN + Inception Resnet v2

どれでも良いですが,この記事では上から2番目の SSD + Inception のモデルを使用します.ダウンロード先ディレクトリはAPIインストール時にダウンロードした models/object_detection としました.ダウンロードしたら tar コマンドで解凍をしておきます.

なお,他のモデルが良ければ以下のようにすればダウンロードできます.

  • SSD(Single Shot Multibox Detector) + Mobilenet v1 (公式チュートリアルで使用するモデル) の場合

  • RFCN + ResNet の場合

  • Faster RCNN + ResNet の場合

  • Faster RCNN + Inception Resnet v2 の場合

これらのモデルはすべて MS COCO という今日のデファクトスタンダードとなっているデータセットを用いて学習されています.

スポンサーリンク



Python スクリプト

ここからはメインのスクリプトです.

object_detection ディレクトリで実行することを前提に書いています.

モジュールのインポート

※もし Object Detection API の関連モジュールのインポートエラーが出た場合は PYTHONPATH にディレクトリ tensorflow,tensorflow/slim のパスを追加して下さい.

モデルの読み込み

コメントがあるとエラーが出る場合があります.その場合はコメントを削除して実行して下さい.

ラベルマップの読み込み

ヘルパ関数の定義

テスト画像の指定

検出と結果の表示

適当なフリー素材の写真をダウンロードして試してみると,以下のような画像が表示されました.

検出結果

完璧ではありませんが,検出できていますね.こんなに簡単に出来てしまうとは...

色々なモデルで結果を比較するのも楽しそうですね!と思ったらCVPR2017で発表されたGoogleの論文がありました.

YOLOなどはネットワークの構造上比較がしにくいのかもしれませんが,TensorFlow Object Detection API で使用できる5つのモデルについては精度と速度の比較が詳しくされていました.

次は Object Detection API を用いて学習をやってみようかなと思います.

 - Python, TensorFlow, Ubuntu, 機械学習 , , , , , , , , , , ,