Как я могу свести потери к более низкому значению?(Тензорный поток)

Я использовал API обнаружения объектов tensorflow.
Вот мое окружение.
Все изображения взяты из 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 {
    }
  }
}

Я не могу найти оптимизированную скорость обучения, соответствующие шаги распада и коэффициент.
Я много тренировался, но результат всегда одинаковый.
Как я могу это исправить??
Я уже неделю потратил только на эту проблему..
В другом посте кто-то рекомендовал добавить шум в набор данных (изображения).
Но я не знаю, что это значит.
Как я могу это сделать?

0 ответов

Я думаю, что в другом посте говорилось о том, чтобы немного увеличить данные, добавив несколько зашумленных изображений в ваш набор обучающих данных. Это означает, что вы применяете некоторые случайные преобразования к своим входным данным, чтобы модель была лучше обобщена. Типом шума, который можно использовать, является случайный гауссовский шум ( https://en.wikipedia.org/wiki/Gaussian_noise), который применяется патчем в API обнаружения объектов. Хотя кажется, что у вас достаточно обучающих образов, попробовать стоит. Шум будет выглядеть так:

...
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

Что касается скорости обучения, одна из распространенных стратегий - это попробовать большую скорость обучения (например, 0,02) и одну очень маленькую, как вы уже пробовали. Я бы порекомендовал вам попробовать с 0,02, оставить его на некоторое время или использовать скорость обучения с экспоненциальным затуханием, чтобы увидеть, лучше ли результаты.

Изменение batch_size также может иметь некоторые преимущества, попробуйте batch_size = 2 вместо 6.

Я также рекомендую вам оставить обучение и перейти к дополнительным шагам, пока вы не увидите никаких улучшений в обучении, возможно, оставьте его, пока в вашей конфигурации не будут определены 200000 шагов.

Некоторые более глубокие стратегии могут помочь модели работать лучше, о них было сказано в этом ответе: qaru.site/questions/435 /... / 61699696/14203615

При этом, если ваш набор данных составлен правильно, вы должны получить хорошие результаты на своем тестовом наборе.