別の記事の副産物として、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が低いので、少し不安になりました。
そこで、写真を使って実際に物体検出させてみました。
このやり方も上記で示したリンクに書いてあります。
結果は以下のとおりです。
左側はオリジナルモデルを使った検出、右側は今回学習したモデルで
検出した結果です。
精度はほとんど変わらないことが確認できました。
#まとめ