tensorflow オブジェクト検出 API を使用しました。
こちらが私の環境です。
すべての画像は coco API からのものです
Tensorflow version : 1.13.1
Tensorboard version : 1.13.1
Number of test images : 3000
Number of train images : 24000
Pre-trained model : SSD mobilenet v2 quantized 300x300 coco
Number of detecting class : 1(person)
これが私の train_config です。
train_config: {
batch_size: 6
optimizer {
adam_optimizer: {
learning_rate {
exponential_decay_learning_rate: {
initial_learning_rate:0.000035
decay_steps: 7
decay_factor: 0.98
}
}
}
}
fine_tune_checkpoint: "D:/TF/models/research/object_detection/ssd_mobilenet_v2_quantized_300x300_coco_2019_01_03/model.ckpt"
fine_tune_checkpoint_type: "detection"
num_steps: 200000
data_augmentation_options {
random_horizontal_flip {
}
}
data_augmentation_options {
ssd_random_crop {
}
}
}
最適化された学習率、適切な減衰ステップと係数が見つかりません。
それでたくさんのトレーニングをしましたが、結果はいつも似たようなものでした。
どうすればこれを修正できますか??
この問題のためだけにすでに 1 週間を費やしました。
他の投稿では、データセット(画像)にノイズを追加することを推奨している人がいました。
でもそれが何を意味するのか分かりません。
どうすればそれを実現できますか?
------------------------
他の投稿で参照されていたのは、ノイズの多い画像を追加してデータを拡張することであったと思います。トレーニング データセットまでの期間を延長します。これは、モデルがより適切に一般化できるように、入力にランダムな変換を適用することを意味します。
使用できるノイズのタイプは、オブジェクト検出 API のパッチによって適用されるランダム ガウス ノイズ (https://en.wikipedia.org/wiki/Gaussian_noise) です。
十分なトレーニング画像があるように見えますが、試してみる価値はあります。
ノイズは次のようになります:
...
data_augmentation_options {
random_horizontal_flip {
}
}
data_augmentation_options {
ssd_random_crop {
}
}
data_augmentation_options {
randompatchgaussian {
// The patch size will be chosen to be in the range
// [min_patch_size, max_patch_size).
min_patch_size: 300;
max_patch_size: 300; //if you want the whole image to be noisy
}
}
...
データ拡張のリストについては、以下を確認してください。
https://github.com/tensorflow/models/blob/master/research/object_detection/protos/preprocessor.proto
学習率に関して、一般的な戦略の 1 つは、すでに試したように、大きい学習率 (たとえば 0.02) と非常に小さい学習率を試すことです。 0.02 を試して、しばらく放置するか、指数関数的に減衰する学習率を調べて、結果がより良いかどうかを確認します。
batch_size を変更すると、いくつかの利点がある場合があります。batch_size = 6 ではなく 2 を試してみてください。
また、トレーニングにまったく改善が見られなくなるまで、トレーニングをそのままにしてさらにステップを続けることをお勧めします。おそらく、構成で 200,000 ステップが定義されるまでそのままにしておきます。
いくつかのより深い戦略はモデルのパフォーマンスを向上させるのに役立ちます。それらはこの回答で述べられています: https://stackoverflow.com/a/61699696/14203615
とはいえ、データセットが正しく作成されていれば、テスト セットで良好な結果が得られるはずです。