Как решить проблему градиентного взрыва в YOLO v1

#python #pytorch #object-detection #nan #yolo

Вопрос:

Сейчас я пытаюсь обучить обнаружению объектов — YOLOv1, используя этот код. В начале я использовал momentum и weight_decay , но потеря тренировок после пары эпох становится NaN . Насколько я знаю, это из-за взрыва градиента, поэтому я искал несколько способов избавиться от этого NaN , а затем проигнорировал momentum и weight decay . В результате я ничего не получил NaN , однако моя модель не смогла сойтись так, как я ожидал. Когда я подсчитал mAP , это было всего 0,29. Я использую данные VOC 2007 и 2012 годов для обучения и в качестве тестового набора VOC 2007.

Итак, мои вопросы следующие:

  • Как я могу избавиться от NaN этого во время тренировки?
  • Где я могу получить лучшие конфигурации обучения?
  • Является ли взрыв градиента нормальным в задаче обнаружения объектов?
  • Нормально ли в YOLOv1 получать вес 1,1 Гб после тренировки?

Буду признателен за любые предложения здесь.

Ответ №1:

После проверки вашего кода я увидел, что после первой эпохи вы установите скорость обучения 0.01 до 75-й эпохи. На мой взгляд, эта большая скорость обучения является основной причиной того, что ваши параметры стали исчезать/взрываться. Обычно скорость обучения 0.001 увеличивается с коэффициентом 2,1,0.1 .

Следуйте конфигурации в этом репо (самая известная реализация репо YOLOv1 согласно paperwithcode), вы можете увидеть настройку их конфигураций. Вы можете следить за их гиперпараметрами momentum=0.9 и decay=0.0005 в своем вопросе.

Примечание: пожалуйста, будьте осторожны, чтобы импульс пакетной нормы в Tensorflow = 1 — импульс в Pytorch.

Наконец, количество параметров до и после тренировки должно быть одинаковым, поэтому, если ваша модель тяжелее/легче после тренировочного процесса, это означает, что с вашим учебным кодом что-то не так.

Комментарии:

1. Спасибо за ваш любезный ответ. Итак, я должен установить значение momentum 0.9 или 0.1? Сначала я использовал momentum=0.9 и decay=0.0005 но получил nan .

2. как я уже сказал, причина вашего Nan, возможно, кроется в вашей высокой скорости обучения, уменьшите ее до 0,001 и тренируйте ее снова. momentum Вы говорите о том, является ли импульс в оптимизации, или в EAM, или в уровне пакетной нормы? Пожалуйста, проясните это

3. Установите значение 0,1 для формулы x_new = (1 - momentum) * x momentum * x_t , следуйте этим документам

4. Я буду тренироваться с этими парами, а затем, если все будет в порядке, я выберу ваш ответ как правильный.

5. спасибо за вашу помощь. Для этого нет никакой точной причины. Кажется, я забыл его сменить.