Советы для достижения наилучших результатов обучения YOLOv5
📚 Это руководство объясняет, как получить наилучшие показатели mAP и результаты обучения с помощью YOLOv5 🚀.
Чаще всего хорошие результаты можно получить без внесения изменений в модели или настройки обучения, при условии, что твой набор данных достаточно велик и хорошо размечен. Если поначалу ты не получаешь хороших результатов, есть шаги, которые могут помочь их улучшить, но мы всегда рекомендуем пользователям сначала провести обучение с настройками по умолчанию, прежде чем вносить какие-либо изменения. Это поможет установить базовый уровень производительности и выявить области для улучшения.
Если у тебя возникли вопросы по результатам твоего обучения, мы рекомендуем предоставить как можно больше информации, если ты ожидаешь полезного ответа. Это включает графики результатов (потери на обучении, потери на валидации, P, R, mAP), PR-кривую, матрицу ошибок, мозаики обучения, результаты тестирования и изображения статистики набора данных, такие как labels.png. Все это находится в твоей директории project/name, обычно это yolov5/runs/train/exp.
Мы подготовили полное руководство для пользователей, стремящихся получить наилучшие результаты в своем обучении YOLOv5, представленное ниже.
Датасет
- Изображений на класс. Рекомендуется ≥ 1500 изображений на класс
- Экземпляров на класс. Рекомендуется ≥ 10000 экземпляров (размеченных объектов) на класс
- Разнообразие изображений. Должно быть репрезентативным для среды развертывания. Для реальных сценариев использования мы рекомендуем изображения, сделанные в разное время суток, в разные сезоны, при разной погоде, разном освещении, под разными углами, из разных источников (найденные в сети, собранные локально, с разных камер) и т. д.
- Согласованность разметки. Все экземпляры всех классов на всех изображениях должны быть размечены. Частичная разметка не сработает.
- Точность разметки. Разметка должна плотно охватывать каждый объект. Между объектом и его граничной рамкой не должно быть пространства. Ни один объект не должен быть без разметки.
- Дисциплина разделения на обучающую/валидационную выборки. Убедись, что изображения для валидации и тестирования никогда не попадают в набор для обучения, чтобы избежать излишне оптимистичных метрик. Сохраняй распределение классов схожим между выборками.
- Проверка разметки. Просматривай
train_batch*.jpgпри начале обучения, чтобы убедиться, что твоя разметка выглядит корректно, например, посмотри пример мозаики. - Фоновые изображения. Фоновые изображения — это изображения без объектов, которые добавляются в набор данных для уменьшения количества ложноположительных срабатываний (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 можно найти в argparser в 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 включает различные методы аугментации, такие как мозаика, которая объединяет несколько обучающих изображений. Для последних нескольких эпох рассмотри использование
--close-mosaic 10, чтобы отключить мозаичную аугментацию, что может помочь стабилизировать обучение. - Гиперпараметры. Гиперпараметры по умолчанию находятся в hyp.scratch-low.yaml. Мы рекомендуем сначала обучаться с гиперпараметрами по умолчанию, прежде чем думать об их изменении. В целом, увеличение гиперпараметров аугментации уменьшит и отсрочит переобучение, что позволит проводить более длительное обучение и получить более высокий конечный mAP. Снижение гиперпараметров веса компонентов потерь, таких как
hyp['obj'], поможет уменьшить переобучение в тех конкретных компонентах потерь. Для автоматизированного метода оптимизации этих гиперпараметров посмотри наш Учебник по эволюции гиперпараметров. - Обучение со смешанной точностью. Включи обучение со смешанной точностью с помощью
--amp, чтобы ускорить процесс и уменьшить использование памяти без потери точности модели. - Обучение на нескольких GPU. Если у тебя несколько GPU, используй
--device 0,1,2,3для распределения обучения между ними, что может значительно сократить время обучения. - Ранняя остановка. Используй
--patience 50, чтобы остановить обучение, если валидационные метрики не улучшаются в течение 50 эпох, что экономит время и предотвращает переобучение.
Продвинутые методы оптимизации
- Трансферное обучение. Для специализированных наборов данных начни с предобученных весов и постепенно размораживай слои во время обучения, чтобы адаптировать модель к твоей конкретной задаче.
- Прунинг модели. После обучения рассмотри возможность прунинга твоей модели, чтобы удалить лишние веса и уменьшить размер модели без значительной потери производительности.
- Ансамбль моделей. Для критически важных приложений обучай несколько моделей с разными конфигурациями и объединяй их предсказания для повышения точности.
- Аугментация во время тестирования. Включи TTA во время вывода с помощью
--augment, чтобы улучшить точность предсказания путем усреднения результатов аугментированных версий входного изображения.
Дополнительные материалы
Если ты хочешь узнать больше, хорошей отправной точкой будет статья Карпати 'Рецепт для обучения нейронных сетей', в которой содержатся отличные идеи для обучения, применимые во всех областях ML: https://karpathy.github.io/2019/04/25/recipe/
Для получения более подробной информации о настройках обучения и конфигурациях обратись к документации по настройкам обучения Ultralytics, которая содержит исчерпывающие объяснения всех доступных параметров.
Удачи 🍀 и дай нам знать, если у тебя есть еще какие-либо вопросы!
Часто задаваемые вопросы (FAQ)
Как узнать, переобучается ли моя модель?
Твоя модель может переобучаться, если потери на обучении продолжают снижаться, а потери на валидации начинают расти. Следи за валидационным mAP: если он выходит на плато или снижается, в то время как потери на обучении продолжают улучшаться, это признак переобучения. Решения включают добавление большего количества данных для обучения, увеличение аугментации данных или применение методов регуляризации.
Какой оптимальный размер пакета для обучения YOLOv5?
Оптимальный размер пакета зависит от памяти твоего GPU. Большие размеры пакетов обычно обеспечивают лучшую статистику нормализации по пакетам и стабильность обучения. Используй максимально возможный размер пакета, который может выдержать твое оборудование без переполнения памяти. Ты можешь использовать --batch-size -1 для автоматического определения оптимального размера пакета для твоей настройки.
Как я могу ускорить обучение YOLOv5?
Чтобы ускорить обучение, попробуй: включить обучение со смешанной точностью с помощью --amp, использовать несколько GPU с --device 0,1,2,3, кэшировать свой набор данных с помощью --cache и оптимизировать размер пакета. Также рассмотри использование более компактного варианта модели, например YOLOv5s, если абсолютная точность не является критически важной.
