Перейти к содержанию

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

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

Анализ КОКО

Выбор модели

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

YOLOv5 Модели

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

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

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

Дальнейшее чтение

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

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

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

ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ

Как узнать, не перегружена ли моя модель?

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

Каков оптимальный размер партии для обучения YOLOv5?

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

Как я могу ускорить тренировку YOLOv5 ?

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

📅 Создано 1 год назад ✏️ Обновлено 8 дней назад

Комментарии