Советы для достижения наилучших результатов тренировок
📚 В этом руководстве рассказывается о том, как получить наилучшие результаты при работе с картами и тренировках с помощью YOLOv5 🚀.
В большинстве случаев хорошие результаты можно получить без изменений в моделях или настройках обучения, если ваш набор данных достаточно велик и хорошо маркирован. Если поначалу вы не получаете хороших результатов, есть шаги, которые можно предпринять для улучшения, но мы всегда рекомендуем пользователям сначала провести обучение со всеми настройками по умолчанию, прежде чем рассматривать любые изменения. Это поможет определить базовую производительность и выявить области для улучшения.
Если у вас есть вопросы о результатах ваших тренировок мы рекомендуем вам предоставить максимальное количество информации если вы ожидаете полезного ответа, включая графики результатов (потери в поезде, потери в вале, P, R, mAP), кривую PR, матрица смешения, обучающие мозаики, результаты тестов и изображения статистики набора данных, такие как labels.png. Все они находятся в вашем project/name
каталог, обычно yolov5/runs/train/exp
.
Мы подготовили полное руководство для пользователей, желающих добиться наилучших результатов на тренировках YOLOv5 .
Набор данных
- Изображения на класс. ≥ 1500 изображений на класс.
- Экземпляры на класс. ≥ 10000 экземпляров (помеченных объектов) на класс.
- Разнообразие изображений. Они должны быть репрезентативными для развернутой среды. Для реальных примеров использования мы рекомендуем использовать изображения, полученные в разное время суток, в разное время года, в разную погоду, при разном освещении, под разными углами, из разных источников (из сети, собранные на месте, с разных камер) и т. д.
- Согласованность меток. Все экземпляры всех классов на всех изображениях должны быть помечены. Частичная маркировка не подходит.
- Точность этикетки. Этикетки должны плотно охватывать каждый объект. Между объектом и его ограничительной рамкой не должно быть пространства. Ни один объект не должен быть лишен метки.
- Проверка этикетки. Посмотреть
train_batch*.jpg
при отправлении поезда проверьте правильность наклеек, т.е. см. пример мозаика. - Фоновые изображения. Фоновые изображения - это изображения без объектов, которые добавляются в набор данных для уменьшения количества ложных срабатываний (FP). Мы рекомендуем использовать около 0-10 % фоновых изображений, чтобы уменьшить количество ЛП (для сравнения в COCO есть 1000 фоновых изображений, 1 % от общего количества). Для фоновых изображений не требуется никаких меток.
Выбор модели
Более крупные модели, такие как YOLOv5x и YOLOv5x6, дают лучшие результаты почти во всех случаях, но имеют больше параметров, требуют больше памяти CUDA для обучения и работают медленнее. Для мобильных развертываний мы рекомендуем YOLOv5s/m, для облачных - YOLOv5l/x. Полное сравнение всех моделей приведено в таблице README.
- Начните с предварительно обученных весов. Рекомендуется для небольших и средних наборов данных (т.е. VOC, VisDrone, GlobalWheat). Передайте имя модели в параметр
--weights
аргумент. Модели загружаются автоматически из последний выпуск YOLOv5.
python train.py --data custom.yaml --weights yolov5s.pt
yolov5m.pt
yolov5l.pt
yolov5x.pt
custom_pretrained.pt
- Начните с нуля. Рекомендуется для больших наборов данных (т.е. COCO, Объекты365, OIv6). Передайте интересующую вас архитектуру модели YAML вместе с пустым
--weights ''
аргумент:
python train.py --data custom.yaml --weights '' --cfg yolov5s.yaml
yolov5m.yaml
yolov5l.yaml
yolov5x.yaml
Настройки обучения
Прежде чем что-то изменять, сначала потренируйтесь с настройками по умолчанию, чтобы определить базовую производительность. Полный список настроек train.py можно найти в аргпарсере train.py.
- Эпохи. Начните с 300 эпох. Если на ранних этапах происходит оверфиттинг, то можно уменьшить количество эпох. Если оверфиттинг не происходит после 300 эпох, тренируйтесь дольше, т. е. 600, 1200 и т. д. эпох.
- Размер изображения. COCO тренируется с собственным разрешением
--img 640
Хотя из-за большого количества мелких объектов в наборе данных он может выиграть от обучения на более высоких разрешениях, таких как--img 1280
. При наличии большого количества мелких объектов пользовательские наборы данных выигрывают от обучения в родном или более высоком разрешении. Наилучшие результаты вывода получаются при--img
при котором проходила тренировка, т.е. если вы тренируетесь при--img 1280
вы также должны проверить и обнаружить на--img 1280
. - Размер партии. Используйте самый большой
--batch-size
что позволяет ваше оборудование. Малые объемы партий дают плохую статистику batchnorm, поэтому их следует избегать. - Гиперпараметры. Гиперпараметры по умолчанию находятся в hyp.scratch-low.yaml. Мы рекомендуем сначала тренироваться с гиперпараметрами по умолчанию, прежде чем думать об их изменении. В целом, увеличение гиперпараметров усиления уменьшает и замедляет перебор, что позволяет увеличить продолжительность обучения и повысить итоговый показатель mAP. Уменьшение гиперпараметров усиления компонентов потерь, таких как
hyp['obj']
поможет уменьшить перегрузку в этих конкретных компонентах потерь. Автоматический метод оптимизации этих гиперпараметров см. в нашей статье Учебное пособие по эволюции гиперпараметров.
Дальнейшее чтение
Если вы хотите узнать больше, начните с книги Карпати "Рецепт обучения нейронных сетей", в которой есть отличные идеи для обучения, применимые во всех областях ML: https://karpathy.github.io/2019/04/25/recipe/.
Удачи 🍀 и дайте нам знать, если у вас возникнут другие вопросы!