Python
MachineLearning
DeepLearning
TensorFlow
物体検出

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

別の記事の副産物として、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を使った事例として、の検出だったり、アライグマの検出だったり、マカロニの検出だったり面白い報告がたくさんあります。