Darkflow: какой минимальный убыток может достигнуть?

Созданный на 16 нояб. 2016  ·  14Комментарии  ·  Источник: thtrieu/darkflow

привет, я обучил модель yolo-small шагу 4648, но большинство значений потерь больше 1.0, и результат теста не очень хороший. Я хочу знать, насколько хорошо может быть значение потерь, и не могли бы вы показать некоторые ключевые параметры во время обучения, например, скорость обучения, время обучения, окончательное значение потерь и так далее.

Обучаю модель на iMac (Inter Core i7 4 ГГц, память 16Гб), режим CPU.

Спасибо!

Самый полезный комментарий

Какой размер партии вы используете? Потому что без размера партии номер шага ничего не может сказать о том, как далеко вы зашли. По словам автора YOLO, он использовал довольно мощный тренажер и тренировка состояла из двух этапов, причем первый этап (тренировочный сверточный слой со средним пулом) длится около недели . Так что вам следует набраться терпения, если вы не так уж далеки от начала.

Обучение глубокой сети - это больше искусство, чем наука. Поэтому я предлагаю вам сначала обучить свою модель на небольшом размере данных, чтобы увидеть, может ли модель переобучиться по обучающему набору, если нет, то есть проблема, которую нужно решить, прежде чем продолжить. Обратите внимание, что из-за увеличения данных, встроенного в код, вы не можете достичь 0,0 для потери.

Я обучил несколько конфигураций своему коду, и потери могут значительно уменьшиться с> 10,0 до примерно 0,5 или ниже (параметры C, B, S не имеют значения, поскольку потери усредняются по выходному тензору). Обычно я начинаю со скоростью обучения по умолчанию 1e-5 и размером пакета 16 или даже 8, чтобы сначала ускорить потерю, пока она не перестанет уменьшаться и не станет казаться нестабильной.

Затем скорость обучения будет уменьшена до 1e-6, а размер пакета увеличится до 32 и 64 всякий раз, когда я чувствую, что потеря застряла (а тестирование все еще не дает хорошего результата). Вы можете переключиться на другой алгоритм обучения с адаптивной скоростью обучения (например, Adadelta, Adam и т. Д.), Если чувствуете, что знаком с ними, отредактировав ./yolo/train.py/yolo_loss()

Вы также можете посмотреть политику скорости обучения, которую использовал автор YOLO, в файлах .cfg.

Удачи

Все 14 Комментарий

Какой размер партии вы используете? Потому что без размера партии номер шага ничего не может сказать о том, как далеко вы зашли. По словам автора YOLO, он использовал довольно мощный тренажер и тренировка состояла из двух этапов, причем первый этап (тренировочный сверточный слой со средним пулом) длится около недели . Так что вам следует набраться терпения, если вы не так уж далеки от начала.

Обучение глубокой сети - это больше искусство, чем наука. Поэтому я предлагаю вам сначала обучить свою модель на небольшом размере данных, чтобы увидеть, может ли модель переобучиться по обучающему набору, если нет, то есть проблема, которую нужно решить, прежде чем продолжить. Обратите внимание, что из-за увеличения данных, встроенного в код, вы не можете достичь 0,0 для потери.

Я обучил несколько конфигураций своему коду, и потери могут значительно уменьшиться с> 10,0 до примерно 0,5 или ниже (параметры C, B, S не имеют значения, поскольку потери усредняются по выходному тензору). Обычно я начинаю со скоростью обучения по умолчанию 1e-5 и размером пакета 16 или даже 8, чтобы сначала ускорить потерю, пока она не перестанет уменьшаться и не станет казаться нестабильной.

Затем скорость обучения будет уменьшена до 1e-6, а размер пакета увеличится до 32 и 64 всякий раз, когда я чувствую, что потеря застряла (а тестирование все еще не дает хорошего результата). Вы можете переключиться на другой алгоритм обучения с адаптивной скоростью обучения (например, Adadelta, Adam и т. Д.), Если чувствуете, что знаком с ними, отредактировав ./yolo/train.py/yolo_loss()

Вы также можете посмотреть политику скорости обучения, которую использовал автор YOLO, в файлах .cfg.

Удачи

@thtrieu Какое прекрасное предложение!

Я также столкнулся с похожими проблемами и обнаружил, что предварительно натренированный вес может действительно помочь. Больше, качество и количество данных - само по себе действительно важно, особенно при обучении сети в стиле йоло, слишком сложно хорошо сойтись ...

Я все еще борюсь с этим ~ '~

@thtrieu, спасибо ~

В моем первом раунде обучения размер партии - 12. Я понимаю вашу точку зрения, когда вы говорите «терпеливый».

Моя конечная цель - найти ограничивающую рамку объекта, которого нет в Imagenet, поэтому я провожу обучение без предварительно обученной модели.

Еще раз спасибо!

Просто дружеский пинг. Я закончил обучение на ЙОЛО 4 класса, если интересно, напишу несколько заметок о процессе его обучения.

@thtrieu Да, я с нетерпением жду этого.

С тех пор я обновлял код много раз, так что это повлияет на масштабирование значения потерь. Но механизм тот же. Вот мои заметки:

  1. Вам действительно следует повторно использовать обученные веса, это поддерживаемая функция в darkflow . Желательно 2 или 3 первых слоя, взятых из оригинального YOLO.

  2. Перед обучением выполните тонкую настройку на некоторых обученных моделях, чтобы увидеть значение потерь. Это сходящиеся значения, так что ваша цель - обойти эти числа. (Приблизительно 1,5 ~ 1,7)

  3. Прежде чем двигаться дальше, убедитесь, что вы переоборудовали очень маленький набор обучающих данных. Это гарантирует, что логика работает.

  4. Когда вы застряли на значении потерь, снова переобучите очень небольшой набор данных для обучения. Если вы можете уменьшить потери, ваша модель не соответствует требованиям, поэтому рассмотрите два варианта: 1. увеличить размер слоев, 2. увеличить глубину. Последний вариант обычно лучше с точки зрения обобщения и скорости.

  5. Время от времени визуализируйте прогноз и посмотрите, какую ошибку делает модель. В моем случае он предсказывал, что почти все классы будут person из-за сильно искаженных данных. Когда я постепенно устанавливаю более высокий вес для термина класса в цели потерь, эта ошибка становится менее серьезной. Обратите внимание, что репликация данных другого класса для достижения баланса приведет к неестественному распределению обучающих данных. Так что я бы посоветовал этого не делать.

Удачи, я хотел бы услышать новости о ваших тренировках.

@thtrieu Я

У меня нет большого опыта в YOLOv2, может быть, у @ ryansun1900 есть.

Вот почему потери YOLOv2 намного выше, чем у v1:

  • В версии 2 есть ограничивающие прямоугольники предложения 13 x 13 x 5 = 845 , каждый со своей достоверностью (объектностью) и условиями вероятности условного класса.
  • В v1 есть только ограничивающие рамки предложения 7 x 7 x 2 = 98 , которые разделяют тот же термин доверительной вероятности, а также условия условной вероятности класса.

Таким образом, объем вывода v2 намного больше, чем v1 ( 21125 vs 1470 ), как и потери.

Пока что у меня нет большого опыта в обучении больших данных.
Но это объяснение верно. Реализация потерь различается между yolov1 и yolov2. Думаю, разница в убытках разумная.

спасибо за хорошие советы :)

Привет ,

  1. Когда вы застряли на значении потерь, снова переобучите очень небольшой набор данных для обучения. Если вы можете уменьшить потери, ваша модель не соответствует требованиям, поэтому рассмотрите два варианта: 1. увеличить размер слоев, 2. увеличить глубину. Последний вариант обычно лучше с точки зрения обобщения и скорости.

@thtrieu, не могли бы вы объяснить, что вы имеете в виду под увеличением глубины? Как мы это делаем? Изменив что-то в файле cfg? Я тренируюсь для 9 классов с yolov2 и создал cfg-файл под названием yolov2-tiny-9c.cfg. ТАК я вношу изменения в этот файл или в исходный файл yolov2-tiny.cfg?

Обучаю модель для 1 класса, yolov3-tiny.cfg. Учебный набор 6800 jpeg от 1 до 24 объектов в каждом jpeg. Изображения обучающего набора нормализованы до 720 строк (высота), но переменной ширины. Размер пакета 24, подразделений 2. Размер изображения 512x512. Скорость обучения 0,0015. Максимальное количество пакетов 450000. Хотя mAP высокое (около 98%), средняя потеря все еще выше 0,5. Я предполагаю, что эта модель полностью обучена на итерации 31500, потому что после этой точки mAP стабильна на уровне 0,98 (98%).

Я сомневаюсь: я считаю, что модель переобучена, потому что она плохо обобщает, или она плохо обобщает, потому что средние потери все еще высоки?

Screenshot_20200615_104714

Обучаю модель для 1 класса, yolov3-tiny.cfg. Учебный набор 6800 jpeg от 1 до 24 объектов в каждом jpeg. Изображения обучающего набора нормализованы до 720 строк (высота), но переменной ширины. Размер пакета 24, подразделений 2. Размер изображения 512x512. Скорость обучения 0,0015. Максимальное количество пакетов 450000. Хотя mAP высокое (около 98%), средняя потеря все еще выше 0,5. Я предполагаю, что эта модель полностью обучена на итерации 31500, потому что после этой точки mAP стабильна на уровне 0,98 (98%).

Я сомневаюсь: я считаю, что модель переобучена, потому что она плохо обобщает, или она плохо обобщает, потому что средние потери все еще высоки?

Screenshot_20200615_104714

Эй, ты можешь мне сказать, как напечатать вот такую ​​диаграмму, когда тренируешь свою модель?

Эй, ты можешь мне сказать, как напечатать вот такую ​​диаграмму, когда тренируешь свою модель?

Я думаю, он использует репозиторий AlexeyAB с поддержкой графического интерфейса.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги