Meet YOLO26: next-gen vision AI.

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

📚 Это руководство объясняет, как получить лучшие результаты mAP и обучения с YOLOv5 🚀.

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

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

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

Link to this sectionДатасет#

  • Изображений на класс. Рекомендуется ≥ 1500 изображений на класс
  • Экземпляров на класс. Рекомендуется ≥ 10000 экземпляров (размеченных объектов) на класс
  • Разнообразие изображений. Должно быть репрезентативным для среды развертывания. Для реальных сценариев использования мы рекомендуем изображения, сделанные в разное время суток, в разные времена года, при разных погодных условиях, при разном освещении, под разными углами, из разных источников (найденные в интернете, собранные локально, с разных камер) и т. д.
  • Согласованность разметки. Все экземпляры всех классов на всех изображениях должны быть размечены. Частичная разметка не сработает.
  • Точность разметки. Метки должны плотно охватывать каждый объект. Между объектом и его ограничивающей рамкой не должно быть свободного пространства. Не должно быть объектов, для которых пропущена метка.
  • Дисциплина разделения на обучающую/валидационную выборки. Убедись, что изображения из валидационного и тестового наборов никогда не попадают в обучающий набор, чтобы избежать чрезмерно оптимистичных метрик. Сохраняй схожее распределение классов между выборками.
  • Проверка разметки. Просматривай train_batch*.jpg в начале обучения, чтобы убедиться, что разметка выглядит корректно, например, посмотри пример мозаики.
  • Фоновые изображения. Фоновые изображения — это изображения без объектов, которые добавляются в датасет для снижения количества ложноположительных срабатываний (False Positives, FP). Мы рекомендуем около 0–10% фоновых изображений, чтобы помочь уменьшить FP (для справки, в COCO 1000 фоновых изображений, что составляет 1% от общего количества). Для фоновых изображений разметка не требуется.

Анализ распределения классов датасета COCO

Link to this sectionВыбор модели#

Более крупные модели, такие как 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

Link to this sectionНастройки обучения#

Прежде чем что-либо менять, сначала проведи обучение со стандартными настройками, чтобы установить базовый уровень производительности. Полный список настроек 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 включает различные методы аугментации, такие как мозаика, которая объединяет несколько обучающих изображений. Регулируй силу аугментации с помощью гиперпараметра mosaic в файле --hyp, чтобы помочь стабилизировать обучение.
  • Гиперпараметры. Стандартные гиперпараметры находятся в hyp.scratch-low.yaml. Мы рекомендуем сначала обучать со стандартными гиперпараметрами, прежде чем задумываться об их изменении. В целом, увеличение гиперпараметров аугментации уменьшит и отложит переобучение, позволяя проводить более длительное обучение и достигать более высокого итогового mAP. Снижение гиперпараметров прироста компонентов потерь, таких как hyp['obj'], поможет уменьшить переобучение в этих конкретных компонентах потерь. Для автоматизированного метода оптимизации этих гиперпараметров см. наш руководство по эволюции гиперпараметров.
  • Обучение со смешанной точностью. YOLOv5 автоматически включает автоматическую смешанную точность (AMP) при обнаружении поддерживаемого GPU, что ускоряет обучение и снижает потребление памяти без ущерба для точности модели.
  • Многопроцессорное обучение (Multi-GPU). Если у тебя несколько GPU, используй --device 0,1,2,3 для распределения обучения между ними, что может значительно сократить время обучения.
  • Ранняя остановка (Early stopping). Используй --patience 50, чтобы остановить обучение, если метрики валидации не улучшаются в течение 50 эпох; это экономит время и предотвращает переобучение.

Link to this sectionМетоды расширенной оптимизации#

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

Link to this sectionДополнительная литература#

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

Более подробную информацию о настройках обучения и конфигурациях можно найти в документации по настройкам обучения Ultralytics, где представлены исчерпывающие пояснения всех доступных параметров.

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

Link to this sectionFAQ#

Link to this sectionКак понять, что моя модель переобучается?#

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

Link to this sectionКакой оптимальный размер пакета для обучения YOLOv5?#

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

Link to this sectionКак ускорить обучение YOLOv5?#

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

Комментарии