Help us understand the problem. What is going on with this article?

TensorFlow-Object-Detection(物体認識)を使って学習モデルの作成からiOSでビルドするまでの道のり【学習】

More than 1 year has passed since last update.

前回まで

前回はTensorFlowを使って学習させるまでのセットアップからデータの収集と学習に必要なデータの準備を行いました。ここからは学習の工程に入ります。
※私は機械学習については全くの素人です。

おおまかな流れ
  1. 学習準備
    1. TensorFlowのセットアップ
    2. 対象画像を集める
    3. 画像ごとにラベリング
    4. TFRecordを作成
  2. 学習
    1. モデル学習用のconfigファイルを用意
    2. 学習
    3. 学習過程を確認
    4. 学習モデルの書き出し
  3. iOS

モデル学習用のconfigファイルを用意

事前に学習してある学習モデルを使って、集めた画像を機械学習させます。使う学習モデルによって認識精度とスピードが異なるようです。こちらのサイトに各モデルを使って学習させた場合の、認識スピードと精度の対応表があります。ただし、 GPUはNvidia GeForce GTX TITAN X cardで測定しているそうです。

上記サイトからssd-mobilenet-v1をダウンロードしてきて、以下のファイルをtensorflow-stamp-mode/に移動させます。

  • model.ckpt.meta
  • model.ckpt.index
  • model.ckpt.data-00000-of-00001
  • pipeline.config

そして、pipeline.configを編集します。基本的にPATH_TO_BE_CONFIGUREDと書いてある箇所です。

pipeline.config変更箇所
# 変更後
num_classes: 3 # ラベル名の数?だと思う
fine_tune_checkpoint: "model.ckpt"
label_map_path: "annotations/label_map.pbtxt"
input_path: "train.record"
label_map_path: "annotations/label_map.pbtxt"
input_path: "val.record"

学習

これで準備が整ったので、いよいよ学習に入ります。modelフォルダに学習過程が保存されていきます。学習を中断させても、もう一度下記のコマンドを叩けば続きから学習するようです。
また、fine_tune_checkpointをコメントにすると学習済みのモデルを使用しないで0から学習できるようです。

/tensorflow-stamp-model
python object_detection/model_main.py \
--logtostderr \
--model_dir=model \
--pipeline_config_path=pipeline.config

GPUがないため、私の環境で停めたり学習したりを繰り返しながら15638ステップまで到達するのに2日ほどかかりました。。。

学習過程を確認

学習状況を確認するためにtensorboardというツールを使います。

/tensorflow-stamp-model
tensorboard --logdir model

http://0.0.0.0:6006/

test.gif
上記gifで同じ画像が2枚並んでいますが、左側が推論によって検出されたオブジェクトで右側がラベリングしたときのラベル位置になっています。ステップ数が上がるにつれて、検出できるオブジェクト数が増えていっているのが分かります。この左側の画像になにも表示されない場合は、学習不足もしくは特徴量が足りない可能性があります。

学習モデルを書き出し

ある程度の認識精度が出たら、modelフォルダにあるデータを学習モデルとして書き出します。
modelフォルダにある以下のファイルをコピーしてtensorflow-stamp-model/に移動します。
※ 番号はステップ数に応じて変更してください。

  • model.ckpt-15752.index
  • model.ckpt-15752.meta
  • model.ckpt-15752.data-00000-of-00001
/tensorflow-stamp-model
python object_detection/export_inference_graph.py \
        --input_type image_tensor \
        --pipeline_config_path pipeline.config \
        --trained_checkpoint_prefix model.ckpt-15752 \
        --output_directory output_inference_graph

これでiOSで利用するための学習モデルができました。
次回はこの学習モデルを使ってiOSに組み込むまでを記録します。


動作保証はしませんが、今回のTensorFlowのプロジェクトはGitHubに置いてあります。
また、TensorFlowの学習モデルをiOSに組み込んだプロジェクトはこちらです。ご自由にお使いください。

mitsuya_bauhaus
ドイツにある企業に転職しました。 それを機にアプリエンジニアからフロントエンドエンジニアへキャリアチェンジ。 Generative Designなどプログラミングを使った表現を追求しています。 YouToube始めました。プログラミングとモノづくりをテーマに発信していきます。 https://www.youtube.com/channel/UCGuM6WxNbW0QafPASmSHn4g/
https://code.mitsuyabauhaus.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away