Обучение YOLOv5 на пользовательских данных#
📚 В этом руководстве объясняется, как обучить собственный пользовательский датасет с помощью модели YOLOv5 🚀. Обучение пользовательских моделей — фундаментальный этап адаптации решений в области компьютерного зрения под конкретные реальные задачи, выходящие за рамки общего обнаружения объектов.
Перед началом#
Сначала убедись, что необходимое окружение настроено. Клонируй репозиторий YOLOv5 и установи необходимые зависимости из requirements.txt. Обязательно используй окружение Python>=3.8.0 с PyTorch>=1.8. Модели и датасеты автоматически скачиваются из последнего релиза YOLOv5, если они не найдены локально.
git clone https://github.com/ultralytics/yolov5 # Clone the repository
cd yolov5
pip install -r requirements.txt # Install dependenciesОбучение на пользовательских данных#
Разработка пользовательской модели обнаружения объектов — это итеративный процесс:
- Сбор и организация изображений: Собери изображения, соответствующие конкретной задаче. Высококачественные и разнообразные данные имеют решающее значение. См. наше руководство по сбору и аннотированию данных.
- Разметка объектов: Точно аннотируй интересующие объекты на изображениях.
- Обучение модели: Используй размеченные данные, чтобы обучить модель YOLOv5. Примени перенос обучения, начав с предварительно обученных весов.
- Развертывание и предсказание: Используй обученную модель для выполнения инференса на новых, ранее не встречавшихся данных.
- Сбор пограничных случаев: Определи сценарии, в которых модель работает плохо (пограничные случаи), и добавь в датасет похожие данные, чтобы повысить устойчивость. Повтори цикл.
Ultralytics Platform предлагает оптимизированное решение без кода для всего этого цикла операций машинного обучения (MLOps), включая управление датасетами, обучение моделей и развертывание.
Ultralytics предлагает два варианта лицензирования для различных сценариев использования:
- Лицензия AGPL-3.0: Эта одобренная OSI лицензия с открытым исходным кодом идеально подходит студентам, исследователям и энтузиастам, заинтересованным в открытом сотрудничестве и обмене знаниями. Она требует распространять производные работы на условиях той же лицензии. Полные сведения см. в файле LICENSE.
- Корпоративная лицензия: эта лицензия предназначена для разработки и использования в продакшене и обеспечивает бесшовную интеграцию программного обеспечения и моделей ИИ Ultralytics в бизнес-продукты и сервисы, включая внутренние инструменты, автоматизированные рабочие процессы и продакшен-развёртывания, без требований открытого исходного кода AGPL-3.0. Чтобы начать работу, свяжись с нами через Ultralytics Licensing.
Подробнее о вариантах лицензирования можно узнать на странице лицензирования Ultralytics.
Перед началом обучения необходимо подготовить датасет.
1. Создание датасета#
Моделям YOLOv5 нужны размеченные данные, чтобы изучать визуальные характеристики классов объектов. Правильная организация датасета имеет ключевое значение.
1.1 Создание dataset.yaml#
Файл конфигурации датасета (например, coco128.yaml) описывает структуру датасета, названия классов и пути к каталогам с изображениями. COCO128 — небольшой пример датасета, содержащий первые 128 изображений из большого датасета COCO. Он полезен для быстрой проверки конвейера обучения и диагностики потенциальных проблем, таких как переобучение.
Структура файла dataset.yaml включает:
path: корневой каталог, содержащий датасет.train,val,test: относительные пути отpathк каталогам с изображениями или текстовым файлам со списками путей к изображениям для обучающей, валидационной и тестовой выборок.names: словарь, сопоставляющий индексы классов (начиная с 0) соответствующим названиям классов.
Можно задать path как абсолютный каталог (например, /home/user/datasets/coco128) или относительный путь, например ../datasets/coco128, при запуске обучения из корневого каталога репозитория YOLOv5.
Ниже приведена структура coco128.yaml (см. на GitHub):
# Dataset root directory relative to the yolov5 directory
path: 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: toothbrush1.2 Использование моделей для автоматической разметки#
Ручная разметка — распространенный подход, но она отнимает много времени. Базовые модели могут автоматизировать или частично автоматизировать аннотирование и ускорить создание датасета. Примеры моделей, которые могут помочь с созданием разметки:
- Google Gemini: Большие мультимодальные модели, такие как Gemini, обладают мощными возможностями понимания изображений. Им можно задать запрос на обнаружение и локализацию объектов на изображениях, чтобы получить ограничивающие рамки или описания, которые можно преобразовать в метки формата YOLO. Изучи возможности этой модели в прилагаемом учебном ноутбуке.
- SAM2 (Модель сегментации любых объектов 2): Базовые модели, ориентированные на сегментацию, такие как SAM2, могут с высокой точностью обнаруживать объекты и очерчивать их границы. Хотя они предназначены главным образом для сегментации, полученные маски часто можно преобразовать в аннотации ограничивающих рамок для задач обнаружения объектов.
- YOLOWorld: Эта модель поддерживает обнаружение объектов в открытом словаре. Ты можешь указать текстовые описания интересующих объектов, и YOLOWorld найдет их на изображениях без предварительного обучения на этих конкретных классах. Это можно использовать как отправную точку для создания начальных меток, которые затем можно уточнить.
Использование этих моделей позволяет добавить этап «предварительной разметки» и сократить объем ручной работы. Однако крайне важно проверить и уточнить автоматически созданные метки, чтобы обеспечить точность и согласованность, поскольку их качество напрямую влияет на производительность обученной модели YOLOv5. После создания (и возможного уточнения) меток убедись, что они соответствуют формату YOLO: один файл *.txt на изображение, где каждая строка представляет объект в виде class_index x_center y_center width height (нормализованные координаты, индекс класса с отсчетом от нуля). Если изображение не содержит интересующих объектов, соответствующий файл *.txt не нужен.
Требования к файлу *.txt формата YOLO точно определены:
- Одна строка на каждый объект ограничивающей рамки.
- Каждая строка должна содержать:
class_index x_center y_center width height. - Координаты необходимо нормализовать в диапазон от 0 до 1. Для этого раздели значения пикселей
x_centerиwidthна общую ширину изображения, аy_centerиheight— на общую высоту изображения. - Индексы классов отсчитываются от нуля (то есть первый класс обозначается как
0, второй — как1и так далее).

Файл меток, соответствующий изображению выше и содержащий два объекта «person» (индекс класса 0) и один объект «tie» (индекс класса 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 или на локальном диске соответственно. Это значительно ускоряет обучение, особенно когда операции ввода-вывода (Input/Output) датасета становятся узким местом. Учти, что для этого требуется большой объем 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 для демонстрации в реальном времени:
Логирование и автоматизация в ClearML#
Интеграция с ClearML обеспечивает подробное отслеживание экспериментов, управление версиями датасетов и даже удаленное выполнение запусков обучения. Активируй ClearML, выполнив следующие простые шаги:
- Установи пакет:
pip install clearml - Инициализируй ClearML: один раз выполни
clearml-init, чтобы подключиться к серверу ClearML (самостоятельно размещенному или доступному на бесплатном тарифе).
ClearML автоматически собирает сведения об экспериментах, загруженные модели, результаты сравнений, незакоммиченные изменения кода и установленные пакеты, обеспечивая полную воспроизводимость. Ты можешь легко планировать задачи обучения на удаленных агентах и управлять версиями датасетов с помощью ClearML Data. Подробности см. в руководстве по интеграции с ClearML.
Локальное логирование#
Результаты обучения автоматически записываются с помощью TensorBoard и сохраняются в виде файлов CSV в каталоге конкретного эксперимента (например, runs/train/exp). Записываемые данные включают:
- Потери и метрики производительности на этапах обучения и валидации.
- Примеры изображений с примененными аугментациями (например, мозаичными).
- Эталонные метки и предсказания модели для визуальной проверки.
- Ключевые метрики оценки, такие как кривые точности-полноты (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 Cloud: краткое руководство по GCP
- Amazon AWS: краткое руководство по AWS
- Microsoft Azure: краткое руководство по AzureML
- Локальная настройка:
- Docker: Краткое руководство по Docker
- Docker: Краткое руководство по Docker
Статус проекта#
Этот значок указывает, что все тесты GitHub Actions в рамках непрерывной интеграции (CI) YOLOv5 успешно проходят. Эти строгие тесты CI охватывают основные функции, включая обучение, валидацию, инференс, экспорт и бенчмарки, в операционных системах macOS, Windows и Ubuntu. Тесты выполняются автоматически каждые 24 часа и после каждого коммита кода, обеспечивая стабильность и оптимальную производительность.
Часто задаваемые вопросы#
Обучение YOLOv5 на пользовательском датасете включает несколько ключевых этапов:
- Подготовь датасет: Собери изображения и аннотируй их. Убедись, что аннотации соответствуют требуемому формату YOLO. Организуй изображения и метки в каталогах
train/иval/(и, при необходимости,test/). Для помощи с разметкой или ее автоматизации можно использовать такие модели, как Google Gemini, 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
- Подготовь датасет: Собери изображения и аннотируй их. Убедись, что аннотации соответствуют требуемому формату YOLO. Организуй изображения и метки в каталогах
Ultralytics Platform — это комплексная платформа, призванная упростить весь жизненный цикл разработки моделей YOLO, зачастую без необходимости писать код. Ключевые преимущества:
- Упрощённое обучение: легко обучай модели с помощью предварительно настроенных окружений и интуитивно понятного пользовательского интерфейса.
- Интегрированное управление данными: эффективно загружай наборы данных, управляй их версиями и работай с ними непосредственно на платформе.
- Мониторинг в реальном времени: отслеживай ход обучения и визуализируй метрики производительности с помощью интегрированных инструментов, таких как Comet или TensorBoard.
- Функции для совместной работы: платформа упрощает командную работу благодаря общим ресурсам, инструментам управления проектами и удобному обмену моделями.
- Развёртывание без кода: развёртывай обученные модели непосредственно на различных целевых платформах.
Для практического пошагового руководства ознакомься с нашей публикацией в блоге: Как обучать собственные модели с помощью Ultralytics Platform.
Независимо от того, размечаешь ли ты данные вручную или используешь автоматизированные инструменты (например, упомянутые в разделе 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. Если ты используешь автоматизированные модели, тебе понадобятся скрипты или процессы для преобразования их выходных данных (например, координат ограничивающих рамок и масок сегментации) в этот специальный нормализованный текстовый формат. Убедись, что итоговая структура набора данных соответствует примеру, приведённому в руководстве. Подробнее см. в нашем руководстве по сбору и разметке данных.
- Создай по одному файлу
Ultralytics предлагает гибкие варианты лицензирования для различных задач:
- Лицензия AGPL-3.0: эта лицензия с открытым исходным кодом подходит для академических исследований, личных проектов и ситуаций, в которых допустимо соблюдение требований открытого исходного кода. Она требует, чтобы изменения и производные работы также публиковались с открытым исходным кодом по лицензии AGPL-3.0. Ознакомься с подробностями лицензии AGPL-3.0.
- Корпоративная лицензия: коммерческая лицензия для компаний, интегрирующих YOLOv5 в проприетарные продукты или сервисы. Эта лицензия снимает обязательства по открытию исходного кода, предусмотренные AGPL-3.0, и позволяет распространять программное обеспечение с закрытым исходным кодом. Посети нашу страницу лицензирования, чтобы узнать больше или запросить корпоративную лицензию.
Выбери лицензию, которая лучше всего соответствует требованиям твоего проекта и модели распространения.
