Tensorflow Object Detection API(TF OD API)では、Protocol Buffersを使用して学習と評価のプロセスを設定しています。学習と評価用のスキーマは、tensorflow/models/research/object_detection/protos/pipeline.configに定義されており、ハイレベルでは5つのパートに分かれています。
- 特徴抽出器の指定など、モデルの詳細設定(model)
- model.protoに定義
- バッチサイズやデータ拡張オプションなど、モデルの学習用の設定(train_config)
- train.protoに定義
- 学習用の入力画像、正解ラベル、正解BoundingBoxなどのテンソルを生成するinput readerの設定(train_input_reader)
- バッチサイズやデータ数など、モデルの評価用の設定(eval_config )
- eval.protoに定義
- train_input_readerと同様で、評価用のinput readerの設定(eval_input_reader)
それぞれの詳細は、別途まとめをするとして、ここでは基本的な設定について触れることにする。
1. model configuration
モデルの詳細設定は、メタアーキテクチャにより異なり、指定可能なアーキテクチャは3種類。
- faster_rcnn
- ssd
- center_net
それぞれのアーキテクチャの中で、feature_extractorや入力画像の前処理のimage_resizerの設定など、細かく指定ができるようになっている。これは、それぞれtensorflow/models/research/object_detection/protosの中に、faster_rcnn.proto、ssd.proto、center_net.protoにて定義されている。
2. train_config
学習の設定で、29種類の項目がある。基本的な項目としては、以下のようなものがある。
- batch_size
- num_steps
- 学習ステップ数。0とすると上限なしとなる。
- fine_tune_checkpoint
- リストア対象のチェックポイントへのパス。Tensorflow2 Detection Model Zooからダウンロードしたpretrainedモデルなどを使用。
3. train_input_reader
学習用の入力データ生成に関する設定。基本は、検出対象クラス名とインデックスの対応を記述したlabel mapと、学習データを記録したtfrecordを使った学習をすることが多いので、それらを指定するところとなる。その他、30種類ほど指定可能な項目がある。
- label_map_path
- label mapファイルのパス
- tf_record_input_reader もしくは external_input_reader
- tfrecordの場合は、tf_record_input_readerの中で、input_pathとして指定する。
4. eval_config
evaluationのmetricsなど、評価用の設定(35種類)。
5. eval_input_reader
3のtrain_input_readerと同じで、こちらはevaluation用。こちらもtfrecordを使うことが多いので、3と同じ様にlabel_map_pathとtf_record_input_readerを指定する。加えて、データの処理順序をshuffleしないようにする(shuffle: false)、num_epochsは1回だけ(num_epochs: 1)、などもよく使う。
最後に
見てみると、それぞれの大項目には結構な数の設定項目があり、基本的にはmodel zooの設定をそのまま使うことが多いけれど、自分のデータセットでチューニングする時には知っておくと良さそうなので、それぞれまた詳しく調べてみることにする。