YOLO Vision 2026:

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

📚 В этом руководстве объясняется, как добиться наилучших показателей mAP и результатов обучения с YOLOv5 🚀.

В большинстве случаев хороших результатов можно добиться без изменения моделей или настроек обучения, если твой датасет достаточно большой и хорошо размечен. Если сначала не удаётся получить хорошие результаты, можно предпринять несколько шагов для их улучшения, но мы всегда рекомендуем сначала обучить модель со всеми настройками по умолчанию, прежде чем рассматривать какие-либо изменения. Это помогает установить базовый уровень производительности и определить области для улучшения.

Если у тебя есть вопросы о результатах обучения, мы рекомендуем предоставить как можно больше информации, если ты рассчитываешь на полезный ответ, включая графики результатов (потери на обучении, потери на валидации, P, R, mAP), PR-кривую, матрицу ошибок, мозаики обучения, результаты тестирования и изображения со статистикой датасета, например labels.png. Всё это находится в каталоге project/name, обычно в yolov5/runs/train/exp.

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

Датасет#

  • Изображения на класс. Рекомендуется ≥ 1500 изображений на класс
  • Экземпляры на класс. Рекомендуется ≥ 10000 экземпляров (размеченных объектов) на класс
  • Разнообразие изображений. Изображения должны быть репрезентативными для среды развёртывания. Для реальных сценариев использования мы рекомендуем изображения, снятые в разное время суток, в разные времена года, при разной погоде и освещении, под разными углами и из разных источников (собранные в интернете, локально, разными камерами) и т. д.
  • Единообразие разметки. Все экземпляры всех классов на всех изображениях должны быть размечены. Частичная разметка не подойдёт.
  • Точность разметки. Разметка должна плотно охватывать каждый объект. Между объектом и его ограничивающей рамкой не должно быть зазора. Ни один объект не должен оставаться без разметки.
  • Дисциплина разделения на train/val. Убедись, что изображения для валидации и тестирования никогда не попадают в обучающую выборку, чтобы избежать завышенных метрик. Распределение классов между выборками должно быть схожим.
  • Проверка разметки. В начале обучения просмотри train_batch*.jpg, чтобы убедиться, что разметка отображается корректно, то есть посмотри на пример мозаики.
  • Фоновые изображения. Фоновые изображения — это изображения без объектов, которые добавляют в датасет для уменьшения количества ложных срабатываний (FP). Мы рекомендуем около 0–10% фоновых изображений, чтобы помочь уменьшить количество FP (в 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, который поддерживает твоё оборудование. Небольшие размеры батча приводят к плохой статистике пакетной нормализации, поэтому их следует избегать. Можно использовать --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 по настройкам обучения, где приведены исчерпывающие объяснения всех доступных параметров.

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

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

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

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

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

Комментарии