ロボット研究者の戯言

TensorFlow Object Detection API で既存データセットを学習

   

既存データセットから学習

前回の記事では学習済みのモデルから画像上の物体を検出しました.

今回はGitHub上の公式ページを参考にしながら,既存のデータセット(Oxford-IIIT Pets Dataset)を用いてモデルを学習させてみます.
Googleが配布していることもありGoogle Cloudでの実行方法を書いてあるページなどもありますが,私の場合はローカルで実行するのが前提ですので,ローカル環境での方法について述べます.

ちなみに,本当は自分で作成したデータセットを作るところからやると面白いのですが,手間がかかるのと,とりあえずTensor Flowでの学習のやり方をサクッと知りたいということで,既存のデータセットを用いています.

大まかな手順は以下のようになります.

スポンサーリンク



手順

  1. データセットのダンロード
  2. 学習
  3. 学習結果の確認

1.データセットのダウンロード

まずOxford-IIIT Pets Datasetという,かわいいワンちゃんとにゃんこがたくさん詰まったデータセットをダウンロードします.

保存ディレクトリは tensorflow/models/research です.私の場合は tensorflow/models の下にresearch というディレクトリが無かったのですが,もしかすると Object Detection API をダウンロードした時期によってディレクトリ構成が少し変わっているのかもしれません.

とにかく,object_detection や inception,tutorials などのディレクトリと同じ階層(この記事ではAPIルートディレクトリと呼ぶことにします)にダウンロードすればOKです.データセットはtarで圧縮されていますのでダウンロード後解凍します.

データセットのダウンロードには少し時間がかかりますので,コーヒーでも飲んで待ちましょう.

ダウンロードしたデータは画像(jpg)とアノテーション(xml)なので,これをTFRecord形式に変換します.

今回は予め用意されているスクリプトを用いますが,自作のデータセットなどでは適宜変更が必要と思われます.

以下のコマンドをapiルートディレクトリで実行しましょう.

完了すると,apiルートディレクトリにpet_train.recordとpet_val.recordの2つのファイルができていると思います.

これでデータの準備は完了です.

2.学習

次はいよいよ学習です.

まず,モデルの定義や学習の設定を行うための,configファイルを用意しなければなりません.

今回はapiルートディレクトリ/object_detection/samples/configsにあらかじめ用意されているssd_mobilenet_v1_pets.configを使用します.

大体はそのままで大丈夫ですが,PATH_TO_BE_CONFIGUREDと書かれているところが数カ所あるので,適切なパスを指定しなければなりません.

私の場合は最初に学習用のmy_train/trainというディレクトリをapiルートディレクトリ直下に作成し,configファイルを以下のように設定しました.

  • fine_tune_checkpoint → コメントアウト.学習を再開したり,学習済みモデルを初期値として使用する場合は必要.
  • from_detection_checkpoint → true から false に変更
  • 学習時の input_path → pet_train.record
  • 学習時の label_map_path → object_detection/data/pet_label_map.pbtxt
  • テスト時の input_path → pet_val.record
  • テスト時の label_map_path → object_detection/data/pet_label_map.pbtxt

変更後,apiルートディレクトリで以下のようにコマンドを打つと学習が始まります.

また,現在の環境ではCPUしか使えず計算が遅いため,学習回数を20000回から1000回に減らしてテストしています.

  • num_steps → 1000に変更

以上のように変更して保存.以下のようにしてトレーニングを開始します.

学習が始まり,lossが少しずつ減っていけば成功です.

3.学習結果の確認

また,トレーニング中に他のターミナルで以下のように入力すると,学習結果を評価することができます.今回は評価用として,ルートディレクトリにmy_train/evalというディレクトリを作成して行っています.

トレーニングによりチェックポイントが作成されるたびに評価を行い,その結果がmy_train/evalに蓄えられます.結果の確認には tensorboard を使いましょう.非常に簡単で,視覚的に結果を確認することができます.

 

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