12
9

More than 5 years have passed since last update.

独自データで物体検出 ーTensorFlow object detection function APIの使い方ー

Last updated at Posted at 2019-04-14

別の記事の副産物として、TensorFlow object detection function APIを用いて
物体検出を「独自データ」で学習させました。学習手順をメモ代わりに残しておきます。

学習の手順

既にvictordibiaさんが書いた素晴らしい手順書があるので、そちらをグーグル翻訳しながら進めました。Data preparation and network training in Tensorflowの部分に学習の手順が書いてあります。

ちなみに、このリポジトリでは、データのダウンロードからアノテーションの編集作業まで全て自動化されています。もし、画像を自分で用意する場合はアノテーションの部分を編集する必要があると思われます。

ただし、train.pyを実行する際は、仕様が変わったらしく以下のサイトを参考に進めました。
https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/running_locally.md

Colaboratoryを使う場合

Colaboratoryで学習させるといくつかエラーが出るので、以下のサイトを参考に進めました。
https://stackoverflow.com/questions/54778472/google-colab-tensowflow-object-detection-api-function-object-has-no-attrib

Colaboratoryでは、一回で演算できる制限(12時間ルール)があります。
12時間以上学習させる場合は、一回frozenモデルを出力すれば、再度学習を継続することができます。

もしかしたら、以下のリンクも参考になるかもしれません。
https://github.com/RomRoc/objdet_train_tensorflow_colab/blob/master/objdet_custom_tf_colab.ipynb

また、Tensorboardを出したい場合は、以下の記事が参考になります。
https://qiita.com/kazuyakitahara/items/ef92f93afba5462e9cb3

学習させてみた

victordibiaさんを見習い、手の検出を学習させてみました。
結果は以下のとおりです。

オリジナル(victordibiaさん) 今回
学習回数 200k 100k
モデル SSD-MobileNetV2? SSD-MobileNetV1
mAP50 0.9686 0.89

今回はColaboratory(GPU)で学習させました。100kで合計15時間ほどかかりました。
mAP50は精度みたいなものです。最大値は「1」で、この値が高いほど精度が良いです。

結果

私の方がmAP50が低いので、少し不安になりました。

そこで、写真を使って実際に物体検出させてみました。
このやり方も上記で示したリンクに書いてあります。

結果は以下のとおりです。

sum1.png
sum2.png

左側はオリジナルモデルを使った検出、右側は今回学習したモデルで
検出した結果です。

精度はほとんど変わらないことが確認できました。

まとめ

  • データさえ入手すれば、簡単に物体検出できる時代になりました。
  • TensorFlow object detection function APIを使った事例として、の検出だったり、アライグマの検出だったり、マカロニの検出だったり面白い報告がたくさんあります。
12
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
9