Советы для достижения наилучших результатов обучения YOLOv5#
📚 Это руководство объясняет, как получить лучшие результаты mAP и обучения с YOLOv5 🚀.
Чаще всего хороших результатов можно добиться без внесения изменений в модели или настройки параметров обучения, при условии, что твой датасет достаточно большой и качественно размечен. Если поначалу ты не получаешь желаемых результатов, есть шаги, которые могут помочь их улучшить, но мы всегда рекомендуем пользователям сначала проводить обучение со всеми стандартными настройками, прежде чем вносить какие-либо изменения. Это поможет установить базовый уровень производительности и выявить области для улучшения.
Если у тебя есть вопросы о результатах обучения, мы рекомендуем предоставить максимальный объем информации, если ты рассчитываешь на полезный ответ, включая графики результатов (потери на обучении и валидации, P, R, mAP), кривую PR, матрицу ошибок, мозаики обучения, результаты тестов и изображения со статистикой набора данных, такие как labels.png. Все они находятся в твоем каталоге project/name, обычно yolov5/runs/train/exp.
Мы подготовили полное руководство для пользователей, стремящихся получить наилучшие результаты обучения с YOLOv5, которое приведено ниже.
Датасет#
- Изображений на класс. Рекомендуется ≥ 1500 изображений на класс
- Экземпляров на класс. Рекомендуется ≥ 10000 экземпляров (размеченных объектов) на класс
- Разнообразие изображений. Должно быть репрезентативным для среды развертывания. Для реальных сценариев использования мы рекомендуем изображения, сделанные в разное время суток, в разные времена года, при разных погодных условиях, при разном освещении, под разными углами, из разных источников (найденные в интернете, собранные локально, с разных камер) и т. д.
- Согласованность разметки. Все экземпляры всех классов на всех изображениях должны быть размечены. Частичная разметка не сработает.
- Точность разметки. Разметка должна плотно охватывать каждый объект. Между объектом и его ограничивающей рамкой не должно быть зазоров. Ни у одного объекта не должно отсутствовать название.
- Дисциплина разделения на обучающую/валидационную выборки. Убедись, что изображения из валидационного и тестового наборов никогда не попадают в обучающий набор, чтобы избежать чрезмерно оптимистичных метрик. Сохраняй схожее распределение классов между выборками.
- Проверка разметки. Просмотри
train_batch*.jpgв начале обучения, чтобы убедиться, что разметка выглядит правильно, например, посмотри пример мозаики. - Фоновые изображения. Фоновые изображения — это изображения без объектов, которые добавляются в датасет для снижения количества ложноположительных срабатываний (False Positives, FP). Мы рекомендуем около 0–10% фоновых изображений, чтобы помочь уменьшить FP (для справки, в 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 python train.py --data custom.yaml --weights yolov5m.pt python train.py --data custom.yaml --weights yolov5l.pt python train.py --data custom.yaml --weights yolov5x.pt python train.py --data custom.yaml --weights custom_pretrained.pt -
Начни с нуля. Рекомендуется для больших наборов данных (т. е. COCO, Objects365, OIv6). Передай интересующую тебя архитектуру модели YAML вместе с пустым аргументом
--weights '':python train.py --data custom.yaml --weights '' --cfg yolov5s.yaml python train.py --data custom.yaml --weights '' --cfg yolov5m.yaml python train.py --data custom.yaml --weights '' --cfg yolov5l.yaml python train.py --data custom.yaml --weights '' --cfg yolov5x.yaml
Настройки обучения#
Прежде чем что-либо менять, сначала обучи модель с настройками по умолчанию, чтобы установить базовый уровень производительности. Полный список настроек train.py можно найти в парсере аргументов train.py.
- Эпохи. Начни с 300 эпох. Если это приведет к преждевременному переобучению, ты сможешь уменьшить количество эпох. Если переобучение не возникает после 300 эпох, обучай дольше — например, 600, 1200 и т. д. эпох.
- Размер изображения. COCO обучается в исходном разрешении
--img 640, хотя из-за большого количества мелких объектов в наборе данных он может выиграть от обучения в более высоких разрешениях, таких как--img 1280. Если мелких объектов много, пользовательские наборы данных выиграют от обучения в исходном или более высоком разрешении. Лучшие результаты инференса достигаются при том же--img, при котором проводилось обучение, т. е. если ты обучаешь при--img 1280, тебе также следует тестировать и детектировать при--img 1280. - Размер батча. Используй наибольший
--batch-size, который позволяет твоему оборудованию. Маленькие размеры батчей дают плохую статистику нормализации батча, и их следует избегать. Ты можешь использовать--batch-size -1, чтобы автоматически выбрать оптимальный размер батча для твоего GPU. - Скорость обучения. Расписание скорости обучения по умолчанию хорошо работает в большинстве случаев. Для более быстрой сходимости ты можешь попробовать использовать флаг
--cos-lr, чтобы включить косинусное планирование скорости обучения, которое постепенно снижает скорость обучения по косинусоиде в течение эпох. - Аугментация данных. YOLOv5 включает в себя различные методы аугментации, такие как мозаика, которая объединяет несколько обучающих изображений. Настрой интенсивность аугментации с помощью гиперпараметра
mosaicв файле--hyp, чтобы помочь стабилизировать обучение. - Гиперпараметры. Гиперпараметры по умолчанию находятся в hyp.scratch-low.yaml. Мы рекомендуем сначала обучать с гиперпараметрами по умолчанию, прежде чем думать об изменении каких-либо. Как правило, увеличение гиперпараметров аугментации уменьшит и отложит переобучение, позволяя проводить более длительные тренировки и получать более высокий итоговый mAP. Уменьшение гиперпараметров усиления компонентов потерь, таких как
hyp['obj'], поможет уменьшить переобучение в этих конкретных компонентах потерь. Описание автоматизированного метода оптимизации этих гиперпараметров см. в нашем руководстве по эволюции гиперпараметров. - Обучение со смешанной точностью. YOLOv5 автоматически включает автоматическую смешанную точность (AMP) при обнаружении поддерживаемого GPU, ускоряя обучение и снижая потребление памяти без ущерба для точности модели.
- Многопроцессорное обучение на нескольких GPU. Если у тебя несколько GPU, используй
--device 0,1,2,3для распределения обучения между ними, что может значительно сократить время обучения. - Ранняя остановка. Используй
--patience 50, чтобы остановить обучение, если метрики валидации не улучшаются в течение 50 эпох, экономя время и предотвращая переобучение.
Методы расширенной оптимизации#
- Перенос обучения. Для специализированных наборов данных начните с предобученных весов и постепенно размораживайте слои во время обучения, чтобы адаптировать модель под вашу конкретную задачу.
- Прунинг модели. После обучения рассмотри возможность прунинга (обрезки) модели для удаления избыточных весов и уменьшения размера модели без существенной потери производительности.
- Ансамблирование моделей. Для критически важных приложений обучай несколько моделей с различными конфигурациями и объединяй их предсказания для повышения точности.
- Аугментация во время тестирования. Включи TTA во время инференса с помощью
--augment, чтобы улучшить точность предсказаний путем усреднения результатов из аугментированных версий входного изображения.
Дополнительная литература#
Если ты хочешь узнать больше, хорошей отправной точкой станет статья Карпати «Рецепт обучения нейронных сетей», в которой собраны отличные идеи для обучения, применимые во всех областях ML: https://karpathy.github.io/2019/04/25/recipe/
Для получения более подробной информации о настройках обучения и конфигурациях обратись к документации по настройкам обучения Ultralytics, которая содержит исчерпывающие объяснения всех доступных параметров.
Удачи 🍀 и дай нам знать, если у тебя возникнут другие вопросы!
FAQ#
Твоя модель может переобучаться, если потери на обучении продолжают снижаться, а потери на валидации начинают расти. Отслеживай mAP валидации — если он выходит на плато или снижается, пока потери на обучении продолжают улучшаться, это признак переобучения. Решения включают добавление большего количества обучающих данных, увеличение аугментации данных или внедрение методов регуляризации.
Оптимальный размер батча зависит от памяти вашего GPU. Большие размеры батчей обычно обеспечивают лучшую статистику нормализации батча и стабильность обучения. Используй наибольший размер батча, который может выдержать твое железо без нехватки памяти. Ты можешь использовать
--batch-size -1, чтобы автоматически определить оптимальный размер батча для твоей системы.Чтобы ускорить обучение, попробуй: использовать несколько GPU с
--device 0,1,2,3, кэшировать свой набор данных с помощью--cacheи оптимизировать размер батча (смешанная точность включается автоматически на поддерживаемых GPU). Также рассмотри возможность использования варианта модели поменьше, например YOLOv5s, если абсолютная точность не критична.
