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

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

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

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

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

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

Набор данных

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

Анализ COCO

Выбор модели

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

  • Эпохи. Начните с 300 эпох. Если это приводит к переобучению на ранней стадии, то можно уменьшить количество эпох. Если переобучение не происходит после 300 эпох, продолжайте обучение дольше, например, 600, 1200 и т.д. эпох.
  • Размер изображения. COCO обучается в собственном разрешении --img 640, хотя из-за большого количества мелких объектов в наборе данных, может быть полезно обучение при более высоких разрешениях, таких как --img 1280. Если имеется много мелких объектов, то пользовательские наборы данных выиграют от обучения при исходном или более высоком разрешении. Наилучшие результаты инференса получаются при том же --img как обучение было запущено, т.е. если вы обучаете при --img 1280 вам также следует протестировать и обнаружить на --img 1280.
  • Размер пакета (batch size). Используйте самый большой --batch-size которое позволяет ваше оборудование. Небольшие размеры пакетов дают плохие batch normalization статистики и следует избегать. Вы можете использовать --batch-size -1 чтобы автоматически выбрать оптимальный размер пакета для вашего GPU.
  • Скорость обучения. Расписание обучения по умолчанию работает хорошо в большинстве случаев. Для более быстрой сходимости вы можете попробовать использовать --cos-lr флаг для включения планирования скорости обучения с косинусом, который постепенно снижает скорость обучения, следуя косинусоидальной кривой в течение эпох.
  • Аугментация данных. YOLOv5 включает в себя различные методы аугментации, такие как mosaic, который объединяет несколько обучающих изображений. В течение последних нескольких эпох рассмотрите возможность использования --close-mosaic 10 чтобы отключить увеличение мозаики, что может помочь стабилизировать обучение.
  • Гиперпараметры. Параметры гиперпараметров по умолчанию находятся в hyp.scratch-low.yamlМы рекомендуем сначала обучать модель с гиперпараметрами по умолчанию, прежде чем думать об их изменении. В общем, увеличение гиперпараметров аугментации уменьшит и отсрочит переобучение, что позволит проводить более длительное обучение и получить более высокое итоговое значение mAP. Уменьшение гиперпараметров усиления компонента потерь, таких как hyp['obj'] поможет уменьшить переобучение в этих конкретных компонентах потерь. Автоматизированный метод оптимизации этих гиперпараметров см. в нашем разделе Руководство по эволюции гиперпараметров.
  • Обучение со смешанной точностью. Включите обучение со смешанной точностью с помощью --amp чтобы ускорить обучение и уменьшить использование памяти без ущерба для точности модели.
  • Обучение с использованием нескольких GPU. Если у вас несколько GPU, используйте --device 0,1,2,3 чтобы распределить обучение между ними, что может значительно сократить время обучения.
  • Ранняя остановка. Используйте --patience 50 чтобы остановить обучение, если метрики проверки не улучшаются в течение 50 эпох, экономя время и предотвращая переобучение.

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

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

Дополнительная литература

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

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

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

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

Как узнать, не переобучается ли моя модель?

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

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

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

Как ускорить обучение YOLOv5?

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



📅 Создано 1 год назад ✏️ Обновлено 2 месяца назад

Комментарии