Обучение YOLOv5 на пользовательских данных
📚 В этом руководстве рассказывается о том, как обучить собственный набор данных с помощью YOLOv5 модели YOLOv5 🚀. Обучение пользовательских моделей является фундаментальным шагом в адаптации решений компьютерного зрения к конкретным реальным задачам, выходящим за рамки общего обнаружения объектов.
Прежде чем начать
Сначала убедитесь, что у вас настроено необходимое окружение. Клонируйте репозиторий YOLOv5 и установите необходимые зависимости из requirements.txt
. A Python.8.0 окружение с PyTorch.8 необходимо. Модели и наборы данных автоматически загружаются из последней версии YOLOv5 выпуск если они не найдены локально.
git clone https://github.com/ultralytics/yolov5 # Clone the repository
cd yolov5
pip install -r requirements.txt # Install dependencies
Обучение на пользовательских данных
Разработка пользовательской модели обнаружения объектов - это итеративный процесс:
- Собирайте и упорядочивайте изображения: Соберите изображения, относящиеся к конкретной задаче. Очень важно получить высококачественные и разнообразные данные. См. наше руководство по сбору данных и аннотированию.
- Пометить объекты: Точно обозначьте интересующие вас объекты на изображениях.
- Обучите модель: Используйте помеченные данные для обучения модели YOLOv5 . Используйте возможности трансферного обучения, начав с предварительно обученных весов.
- Развертывание и прогнозирование: Используйте обученную модель для выводов на новых, неизвестных данных.
- Соберите крайние случаи: Определите сценарии, в которых модель работает плохо(крайние случаи), и добавьте аналогичные данные в свой набор данных, чтобы повысить надежность. Повторите цикл.
Ultralytics HUB предлагает оптимизированное решение без кода для всего цикла операций машинного обучения (MLOps), включая управление набором данных, обучение моделей и развертывание.
Лицензирование
Ultralytics предлагает два варианта лицензирования для различных сценариев использования:
- ЛицензияAGPL-3.0 : Эта одобренная OSI лицензия с открытым исходным кодом идеально подходит для студентов, исследователей и энтузиастов, увлеченных открытым сотрудничеством и обменом знаниями. Она требует, чтобы производные работы распространялись под той же лицензией. Все подробности см. в файле LICENSE.
- Корпоративная лицензия: Эта лицензия, предназначенная для коммерческих приложений, позволяет легко интегрировать программное обеспечение Ultralytics и модели искусственного интеллекта в коммерческие продукты и услуги без соблюдения условий AGPL-3.0, касающихся открытого исходного кода. Если ваш проект требует коммерческого развертывания, запросите корпоративную лицензию.
Более подробная информация о возможностях лицензирования представлена на странице ЛицензированиеUltralytics .
Прежде чем приступить к обучению, необходимо подготовить набор данных.
1. Создайте набор данных
Для изучения визуальных характеристик классов объектов моделям YOLOv5 требуются маркированные данные. Правильная организация набора данных - ключевой момент.
1.1 Создать dataset.yaml
Файл конфигурации набора данных (например, coco128.yaml
) описывает структуру набора данных, имена классов и пути к каталогам с изображениями. COCO128 служит небольшим набором данных, включающим первые 128 изображений из обширного набора. COCO набор данных. Это полезно для быстрого тестирования обучающего конвейера и диагностики потенциальных проблем, таких как оверфиттинг.
Сайт dataset.yaml
Структура файла включает:
path
: Корневой каталог, содержащий набор данных.train
,val
,test
: Относительные пути изpath
к каталогам с изображениями или текстовым файлам, в которых указаны пути к изображениям для обучающего, проверочного и тестового наборов.names
: Словарь, отображающий индексы классов (начиная с 0) на соответствующие им имена классов.
Ниже приведена структура для coco128.yaml
(вид на GitHub):
# Dataset root directory relative to the yolov5 directory
path: ../datasets/coco128
# Train/val/test sets: specify directories, *.txt files, or lists
train: images/train2017 # 128 images for training
val: images/train2017 # 128 images for validation
test: # Optional path to test images
# Classes (example using 80 COCO classes)
names:
0: person
1: bicycle
2: car
# ... (remaining COCO classes)
77: teddy bear
78: hair drier
79: toothbrush
1.2 Использование моделей для автоматической маркировки
Хотя ручная маркировка с помощью инструментов является распространенным подходом, этот процесс может занимать много времени. Последние достижения в области фундаментных моделей открывают возможности для автоматизации или полуавтоматизации процесса аннотирования, что может значительно ускорить создание наборов данных. Вот несколько примеров моделей, которые могут помочь в создании меток:
- БлизнецыGoogle : Большие мультимодальные модели, такие как Gemini, обладают мощными возможностями понимания изображений. Их можно попросить идентифицировать и найти объекты на изображениях, создавая ограничительные рамки или описания, которые можно преобразовать в метки формата YOLO . Изучите его потенциал в прилагаемом учебном блокноте.
- SAM2 (Segment Anything Model 2): Фундаментальные модели, ориентированные на сегментацию, такие как SAM2, позволяют идентифицировать и очерчивать объекты с высокой точностью. Хотя в первую очередь они предназначены для сегментации, полученные маски часто могут быть преобразованы в аннотации ограничительных рамок, подходящие для задач обнаружения объектов.
- YOLOWorld: Эта модель предлагает возможности обнаружения объектов с открытым словарем. Вы можете предоставить текстовые описания интересующих вас объектов, и YOLOWorld сможет найти их на изображениях без предварительного обучения этим конкретным классам. Это может быть использовано в качестве отправной точки для создания начальных меток, которые затем можно уточнить.
Использование таких моделей позволяет выполнить этап "предварительной маркировки", сократив ручную работу. Однако очень важно просматривать и уточнять автоматически сгенерированные метки, чтобы обеспечить точность и согласованность, поскольку их качество напрямую влияет на производительность обученной модели YOLOv5 . После создания (и возможного уточнения) меток убедитесь, что они соответствуют YOLO формат: один *.txt
файл для каждого изображения, каждая строка которого представляет объект как class_index x_center y_center width height
(нормализованные координаты, класс с нулевой индексацией). Если на изображении нет объектов, представляющих интерес, нет и соответствующего *.txt
необходим файл.
Формат YOLO *.txt
точные спецификации файлов:
- Одна строка для каждой границы объекта.
- Каждый ряд должен содержать:
class_index x_center y_center width height
. - Координаты должны быть нормализованный в диапазоне от 0 до 1. Чтобы добиться этого, разделите значения пикселей на
x_center
иwidth
на общую ширину изображения и разделитеy_center
иheight
на общую высоту изображения. - Индексы классов индексируются нулями (т.е. первый класс представлен
0
, второй - по1
, и так далее).
Файл меток, соответствующий изображению выше, содержащий два объекта 'person' (индекс класса 0
) и один объект "галстук" (индекс класса 27
), будет выглядеть следующим образом:
1.3 Организация каталогов
Структурируйте свой наборы данных как показано ниже. По умолчанию YOLOv5 предполагает, что каталог набора данных (например, /coco128
) для проживания в пределах /datasets
папка, расположенная прилегающий к сайт /yolov5
каталог репозитория.
YOLOv5 автоматически находит метки для каждого изображения, подставляя последний экземпляр /images/
в пути к изображению с /labels/
. Например:
../datasets/coco128/images/im0.jpg # Path to the image file
../datasets/coco128/labels/im0.txt # Path to the corresponding label file
Рекомендуемая структура каталогов такова:
/datasets/
└── coco128/ # Dataset root
├── images/
│ ├── train2017/ # Training images
│ │ ├── 000000000009.jpg
│ │ └── ...
│ └── val2017/ # Validation images (optional if using same set for train/val)
│ └── ...
└── labels/
├── train2017/ # Training labels
│ ├── 000000000009.txt
│ └── ...
└── val2017/ # Validation labels (optional if using same set for train/val)
└── ...
2. Выберите модель
Выберите предварительно обученную модель, чтобы начать процесс обучения. Начало обучения с предварительно обученными весами значительно ускоряет процесс обучения и повышает производительность по сравнению с обучением с нуля. YOLOv5 предлагает модели разных размеров, в каждой из которых по-разному сочетаются скорость и точность. Например, YOLOv5s - это вторая по размеру и самая быстрая модель, подходящая для сред с ограниченными ресурсами. Подробное сравнение всех доступных моделей можно найти в таблице README.
3. Поезд
Начните обучение модели используя train.py
сценарий. Основные аргументы включают:
--img
: Определяет вход размер изображения (например,--img 640
). Большие размеры обычно дают лучшую точность, но требуют больше памяти GPU .--batch
: Определяет размер партии (например,--batch 16
). Выберите самый большой размер, с которым может справиться ваш GPU .--epochs
: Указывает общее количество тренировок эпохи (например,--epochs 100
). Одна эпоха представляет собой полный проход по всему обучающему набору данных.--data
: Путь к себеdataset.yaml
файл (например,--data coco128.yaml
).--weights
: Путь к файлу с начальными весами. Использование предварительно обученных весов (например,--weights yolov5s.pt
) настоятельно рекомендуется для ускорения сходимости и получения более высоких результатов. Для обучения с нуля (не рекомендуется, если у вас не очень большой набор данных и нет особых потребностей) используйте--weights '' --cfg yolov5s.yaml
.
Предварительно обученные веса автоматически загружаются из последней версии YOLOv5 , если не найдены локально.
# Example: Train YOLOv5s on the COCO128 dataset for 3 epochs
python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt
Оптимизируйте скорость тренировок
💡 Работа --cache ram
или --cache disk
для кэширования изображений набора данных в RAM или локальный диск, соответственно. Это значительно ускоряет обучение, особенно когда операции ввода/вывода данных являются узким местом. Обратите внимание, что для этого требуется значительный объем оперативной памяти или дискового пространства.
Локальное хранилище данных
💡 Всегда обучайтесь на наборах данных, хранящихся локально. Доступ к данным с сетевых дисков (например, Google Drive) или удаленных хранилищ может быть значительно медленнее и снижать производительность обучения. Копирование набора данных на локальный SSD-накопитель часто является лучшей практикой.
Все результаты обучения, включая веса и журналы, сохраняются в файле runs/train/
каталог. Каждый сеанс обучения создает новый подкаталог (например, runs/train/exp
, runs/train/exp2
, и т.д.). Чтобы получить интерактивный практический опыт, изучите раздел обучения в наших официальных учебных тетрадях:
4. Визуализируйте
YOLOv5 легко интегрируется с различными инструментами для визуализации тренировочного прогресса, оценки результатов и мониторинга эффективности в режиме реального времени.
Comet Ведение журнала и визуализация 🌟 НОВИНКА
Comet полностью интегрирован для всестороннего отслеживания экспериментов. Визуализируйте метрики в реальном времени, сохраняйте гиперпараметры, управляйте наборами данных и контрольными точками модели, а также анализируйте предсказания модели с помощью интерактивных пользовательских панелейComet .
Приступить к работе очень просто:
pip install comet_ml # 1. Install Comet library
export COMET_API_KEY=YOUR_API_KEY_HERE # 2. Set your Comet API key (create a free account at Comet.ml)
python train.py --img 640 --epochs 3 --data coco128.yaml --weights yolov5s.pt # 3. Train your model - Comet automatically logs everything!
Углубляйтесь в поддерживаемые функции в нашем Руководство по интеграции Comet. Подробнее о возможностях Comet можно узнать из их официального сайта документация. Попробуйте использовать блокнот Comet Colab Notebook для демонстрации в реальном времени:
ClearML Ведение журнала и автоматизация 🌟 НОВИНКА
ClearML Интеграция ClearML позволяет детально отслеживать эксперименты, управлять версиями наборов данных и даже удаленно выполнять тренировочные прогоны. Активируйте ClearML с помощью этих простых шагов:
- Установите пакет:
pip install clearml
- Инициализируйте ClearML: Запустить
clearml-init
один раз, чтобы подключиться к вашему серверу ClearML (либо самостоятельному, либо на сервере бесплатный уровень).
ClearML автоматически фиксирует детали эксперимента, загрузку моделей, сравнения, незафиксированные изменения кода и установленные пакеты, обеспечивая полную воспроизводимость. Вы можете легко планировать задачи обучения на удаленных агентах и управлять версиями наборов данных с помощью ClearML Data. Для получения подробной информации изучите руководство по интеграцииClearML .
Локальное протоколирование
Результаты тренировок автоматически регистрируются с помощью TensorBoard и сохраняется как CSV файлы в конкретной директории эксперимента (например, runs/train/exp
). Зарегистрированные данные включают:
- Потери при обучении и проверке, а также показатели производительности.
- Образцы изображений, демонстрирующих примененные дополнения (например, мозаики).
- Метки истины и предсказания модели для визуального контроля.
- Ключевые метрики оценки, такие как кривые Precision-Recall (PR).
- Матрицы запутывания для детального анализа производительности в зависимости от класса.
Сайт results.csv
Файл обновляется после каждой эпохи и отображается в виде графика results.png
после завершения обучения. Вы также можете построить график любого results.csv
файл вручную с помощью предусмотренной функции утилиты:
from utils.plots import plot_results
# Plot results from a specific training run directory
plot_results("runs/train/exp/results.csv") # This will generate 'results.png' in the same directory
5. Следующие шаги
После успешного завершения обучения контрольная точка для модели с наилучшими показателями (best.pt
) сохранен и готов к развертыванию или дальнейшей доработке. Возможные следующие шаги включают:
- Запустите вывод на новых изображениях или видео с использованием обученной модели с помощью CLI или Python.
- Проведите валидацию, чтобы оценить точность модели и ее обобщающие способности на различных фрагментах данных (например, на тестовом наборе).
- Экспортируйте модель в различные форматы развертывания, например ONNX, TensorFlow SavedModelили TensorRT для оптимизированных выводов на различных платформах.
- Используйте методы настройки гиперпараметров, чтобы потенциально получить дополнительный прирост производительности.
- Продолжайте совершенствовать свою модель, следуя нашим советам для достижения наилучших результатов обучения и итеративно добавляя более разнообразные и сложные данные на основе анализа эффективности.
Поддерживаемые среды
Ultralytics предоставляет готовые к использованию среды, оснащенные такими необходимыми зависимостями, как CUDAи cuDNN, Pythonи PyTorchчто способствует плавному старту.
- Бесплатные блокноты GPU:
- Облачные платформы:
- Google Облако: Руководство по быстрому запуску GCP
- Amazon AWS: Руководство по быстрому запуску AWS
- Microsoft Azure: Руководство по быстрому запуску AzureML
- Локальная настройка:
Статус проекта
Этот значок означает, что все тесты непрерывной интеграции (CI) YOLOv5 GitHub Actions успешно пройдены. Эти строгие CI-тесты охватывают основные функциональные возможности, включая обучение, проверку, вывод, экспорт и контрольные показатели, в операционных системах macOS, Windows и Ubuntu. Тесты выполняются автоматически каждые 24 часа и при каждом коммите кода, обеспечивая стабильность и оптимальную производительность.
ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ
Часто задаваемые вопросы
Как обучить YOLOv5 на пользовательском наборе данных?
Обучение YOLOv5 на пользовательском наборе данных включает в себя несколько ключевых этапов:
- Подготовьте набор данных: Собирайте изображения и аннотируйте их. Убедитесь, что аннотации соответствуют требованиям YOLO формат. Организуйте изображения и метки в
train/
иval/
(и по желаниюtest/
) каталогов. Рассмотрите возможность использования таких моделей, как Близнецы Google, SAM2, или YOLOWorld для помощи или автоматизации процесса маркировки (см. раздел 1.2). - Настройте окружение: Клонируйте репозиторий YOLOv5 и установите зависимости, используя
pip install -r requirements.txt
.git clone https://github.com/ultralytics/yolov5 cd yolov5 pip install -r requirements.txt
- Создание конфигурации набора данных: Определите путь к набору данных, количество классов и имена классов в
dataset.yaml
файл. - Начать обучение: Выполнить
train.py
скрипт, указав пути к вашимdataset.yaml
, желаемые предварительно обученные веса (например,yolov5s.pt
), размер изображения, размер партии и количество эпох.python train.py --img 640 --batch 16 --epochs 100 --data path/to/your/dataset.yaml --weights yolov5s.pt
Почему я должен использовать Ultralytics HUB для обучения своих моделей YOLO ?
Ultralytics HUB - это комплексная платформа, предназначенная для оптимизации всего жизненного цикла разработки модели YOLO , зачастую без необходимости писать какой-либо код. Ключевые преимущества включают:
- Упрощенное обучение: Легкое обучение моделей с помощью предварительно настроенных сред и интуитивно понятного пользовательского интерфейса.
- Интегрированное управление данными: Загружайте, контролируйте версии и эффективно управляйте своими наборами данных в рамках платформы.
- Мониторинг в режиме реального времени: Отслеживайте ход обучения и визуализируйте показатели эффективности с помощью таких интегрированных инструментов, как Comet или TensorBoard.
- Функции совместной работы: Облегчает работу в команде благодаря общим ресурсам, инструментам управления проектами и простому обмену моделями.
- Развертывание без кода: Развертывание обученных моделей непосредственно на различные цели.
Для получения практического руководства ознакомьтесь с нашей статьей в блоге: Как обучать пользовательские модели с помощью Ultralytics HUB.
Как преобразовать аннотированные данные в формат YOLOv5 ?
Независимо от того, делаете ли вы аннотацию вручную или используете автоматизированные инструменты (например, те, что упоминались в разделе 1.2), итоговые метки должны быть в специальном форматеYOLO , требуемом YOLOv5:
- Создайте один
.txt
файл для каждого изображения. Имя файла должно совпадать с именем изображения (например,image1.jpg
соответствуетimage1.txt
). Поместите эти файлы вlabels/
параллельно с каталогомimages/
каталог (например,../datasets/mydataset/labels/train/
). - Каждая строка в
.txt
Файл представляет собой аннотацию одного объекта и имеет формат:class_index center_x center_y width height
. - Координаты (
center_x
,center_y
,width
,height
) должен быть нормализованный (значения от 0,0 до 1,0) относительно размеров изображения. - Индексы классов на нулевой основе (первый класс
0
, второй -1
, и т.д.).
Многие инструменты для ручного аннотирования предлагают прямой экспорт в формат YOLO . Если вы используете автоматизированные модели, вам понадобятся скрипты или процессы для преобразования их выходных данных (например, координат ограничительных рамок, масок сегментации) в этот специфический нормализованный текстовый формат. Убедитесь, что конечная структура набора данных соответствует приведенному в руководстве примеру. Для получения более подробной информации см. наше Руководство по сбору данных и аннотированию.
Каковы возможности лицензирования для использования YOLOv5 в коммерческих приложениях?
Ultralytics обеспечивает гибкое лицензирование, соответствующее различным потребностям:
- ЛицензияAGPL-3.0 : Эта лицензия с открытым исходным кодом подходит для академических исследований, личных проектов и ситуаций, когда соблюдение требований открытого исходного кода является приемлемым. Она требует, чтобы модификации и производные работы также были опубликованы под AGPL-3.0. Ознакомьтесь с подробностями лицензииAGPL-3.0 .
- Корпоративная лицензия: Коммерческая лицензия, предназначенная для предприятий, интегрирующих YOLOv5 в собственные продукты или услуги. Эта лицензия снимает обязательства AGPL-3.0 по открытому исходному коду, позволяя распространять закрытый исходный код. Посетите нашу страницу лицензирования, чтобы узнать подробности или запросить корпоративную лицензию.
Выберите лицензию, которая лучше всего соответствует требованиям вашего проекта и модели распространения.