Ultralytics YOLO27:
Get Started

Советы для достижения наилучших результатов при обучении YOLOv5#

📚 В этом руководстве объясняется, как добиться наилучших показателей mAP и результатов обучения с 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% от общего количества изображений). Для фоновых изображений разметка не требуется.

COCO dataset class distribution analysis

Выбор модели#

Более крупные модели, такие как YOLOv5x и YOLOv5x6, почти всегда дают лучшие результаты, но у них больше параметров, для обучения требуется больше памяти CUDA, а работают они медленнее. Для развертывания на мобильных устройствах рекомендуем YOLOv5s/m, а для развертывания в облаке — YOLOv5l/x. Полное сравнение всех моделей см. в таблице в README.

YOLOv5 Models

  • Начни с предварительно обученных весов. Рекомендуется для небольших и средних датасетов (например, 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. При небольшом размере пакета статистика пакетной нормализации получается неудовлетворительной, поэтому таких значений следует избегать. Чтобы автоматически подобрать оптимальный размер пакета для GPU, используй --batch-size -1.
  • Скорость обучения. Расписание скорости обучения по умолчанию хорошо работает в большинстве случаев. Чтобы ускорить сходимость, можно использовать флаг --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 эпох. Это сэкономит время и поможет предотвратить переобучение.

Продвинутые методы оптимизации#

  • Трансферное обучение. Для специализированных датасетов начни с предварительно обученных весов и при необходимости заморозь слои с помощью --freeze, чтобы адаптировать модель к конкретной задаче.
  • Прореживание модели. После обучения можно проредить модель, удалив избыточные веса и уменьшив ее размер без существенной потери производительности.
  • Ансамбль моделей. Для критически важных приложений обучи несколько моделей с разными конфигурациями и объедини их предсказания, чтобы повысить точность.
  • Аугментация во время тестирования. Включи TTA во время инференса с помощью --augment, чтобы повысить точность предсказаний, усредняя результаты для аугментированных версий входного изображения.

Дополнительные материалы#

Если хочешь узнать больше, начни с статьи Карпати «Рецепт обучения нейронных сетей». В ней собраны полезные идеи по обучению, применимые в самых разных областях машинного обучения: https://karpathy.github.io/2019/04/25/recipe/

Удачи 🍀! Если у тебя возникнут другие вопросы, дай нам знать.

Часто задаваемые вопросы#

  • Возможно, модель переобучается, если потери на обучающей выборке продолжают снижаться, а потери на валидационной выборке начинают расти. Следи за mAP на валидации: если показатель перестает расти или снижается, пока потери на обучении продолжают уменьшаться, это признак переобучения. Среди возможных решений — добавить обучающие данные, усилить аугментацию данных или применить методы регуляризации.

  • Оптимальный размер пакета зависит от объема памяти GPU. Большие пакеты обычно обеспечивают более точную статистику пакетной нормализации и стабильность обучения. Используй максимально возможный для твоего оборудования размер пакета, не допуская нехватки памяти. Чтобы автоматически определить оптимальный размер пакета для твоей конфигурации, используй --batch-size -1.

  • Чтобы ускорить обучение, попробуй использовать несколько GPU с --device 0,1,2,3, кэшировать датасет с помощью --cache и оптимизировать размер пакета (на поддерживаемых GPU смешанная точность включается автоматически). Также можно использовать вариант модели меньшего размера, например YOLOv5s, если абсолютная точность не критична.

Комментарии