Обучение YOLOv8 на собственных данных — пошаговое руководство

Введение
YOLOv8 — это современный алгоритм для обнаружения объектов в реальном времени из серии You Only Look Once от Ultralytics. Модель умеет детектировать объекты, выполнять сегментацию экземпляров, оценивать позу и классифицировать объекты в изображениях и видеопотоках. Основная цель — достичь высокой скорости и точности по сравнению с предыдущими версиями.
В этом руководстве показано, как подготовить и обучить YOLOv8 на собственном наборе данных: от создания виртуального окружения до оценки и экспорта модели в формат ONNX для продакшена.
Что вам потребуется
- Python 3.8+ и доступ к терминалу.
- GPU рекомендуется (CUDA + драйверы) для ускоренного обучения, но обучение возможно и на CPU для небольших наборов.
- Набор изображений и разметка в формате, совместимом с Ultralytics/YOLO (обычно формат YOLO: .txt с классом и bbox в нормализованных координатах).
Важное: если у вас большие проекты с приватными данными, продумайте безопасность и хранение метаданных (шифрование, доступ по ролям).
Требования и установка окружения
- Создайте рабочую папку и виртуальное окружение:
mkdir yolov8project
cd yolov8project
python -m venv env- Активируйте виртуальное окружение:
# На Windows
env/Scripts/activate
# На Linux / macOS
source env/bin/activate- Установите Ultralytics (включает YOLOv8):
pip install ultralytics- Быстрая проверка: запустите детекцию на тестовом изображении или видео, чтобы убедиться, что всё установлено корректно:
# детекция на изображении
yolo task=detect mode=predict model=yolov8n.pt source="path/to/image.png"
# детекция на видео
yolo task=detect mode=predict model=yolov8n.pt source="path/to/video.mp4"Результаты появятся в папке проекта в runs/detect/exp.
Подготовка собственных данных
Основные шаги: сбор, разметка и разделение данных.
Сбор данных
Соберите разнообразные изображения с объектами, которые хотите детектировать. Обратите внимание на освещение, ракурсы и фоны. Источники: собственная съёмка, публичные датасеты (OpenImages, COCO), Kaggle. В примере использован датасет по безопасности на стройке с Kaggle.
Совет: соберите изображения с разной плотностью объектов (сильная/слабая загруженность кадра) — это улучшит обобщающую способность модели.
Разметка
Инструменты: LabelImg, CVAT, Roboflow. Разметка должна соответствовать формату YOLO (каждая строка .txt:
Короткое определение: нормализованные координаты — координаты bbox, отнесённые к размерам изображения (от 0 до 1).
Разделение набора данных
Разделите данные на train/valid/test. Рекомендуемые соотношения:
- Для больших наборов: 70% train / 20% valid / 10% test.
- Для средних или малых наборов: 80% train / 10% valid / 10% test.
Утилиты: библиотека split-folders для случайного разбиения.
Примечание: убедитесь, что распределение классов одинаково в каждом сете (stratified split), особенно при дисбалансе классов.
Конфигурация данных (config.yaml)
Создайте файл config.yaml с путями и именами классов. Пример:
path: (dataset directory path)
train: (train dataset folder path)
test: (test dataset folder path)
valid: (validation dataset folder path)
# Classes
nc: 5 # замените числом классов в вашем датасете
# Class names
names: ['class1', 'class2', 'class3', 'class4', 'class5']Важно: указывайте корректные относительные или абсолютные пути, иначе обучение не сможет загрузить изображения.
Обучение YOLOv8 на собственных данных
Запустите обучение через CLI Ultralytics:
yolo task=detect mode=train model=yolov8n.pt data=path/to/config.yaml epochs=10 imgsz=640Разбор параметров:
- task: detect, segment или classify.
- mode: train, predict, val, export и т.д.
- model: стартовая предобученная модель (yolov8n.pt / yolov8s.pt / yolov8l.pt / yolov8x.pt).
- epochs: количество эпох обучения.
- imgsz: размер изображения (кратный 32).
Рекомендации:
- Для дебага начните с небольшого числа эпох (5–10) и лёгкой модели (yolov8n).
- Для финального тренинга используйте более крупные модели и увеличьте epochs, если модель не переобучается.
Время обучения зависит от размера набора данных, типа модели и наличия GPU.
После завершения тренировки веса сохранятся в runs/train/exp/weights/best.pt. Для инференса используйте команду:
yolo task=detect mode=predict model="runs/train/weights/best.pt" source="image.png"Результаты детекции будут в runs/detect/exp.
Оценка модели
Для оценки используйте команду валидации:
yolo val model=yolov8n.pt data=path/to/config.yaml batch=1 imgsz=640Типичные метрики:
- precision (точность) — доля правильно предсказанных обнаружений среди всех предсказаний;
- recall (полнота) — доля верно обнаруженных объектов среди всех истинных объектов;
- F1 — гармоническое среднее precision и recall.
Интерпретация: высокая precision и низкая recall — модель боится ошибаться (более консервативна). Высокая recall и низкая precision — много ложных положительных.
Развертывание и экспорт модели
- Проверка инференса на тестовом изображении:
yolo detect predict model=path/to/best.pt source='path/to/image.jpg'- Экспорт в ONNX для интеграции в приложения и ускорения инференса:
yolo export model=path/to/best.pt format=onnxONNX-файл можно загрузить в приложения, облачные функции или преобразовать в TensorRT для ускоренного инференса на GPU.
Совет: перед деплоем проверьте модель на ассортименте реальных данных, которые будут в продакшене (разный свет, камеры, разрешение).
Советы по улучшению качества модели
- Data augmentation: повороты, сдвиги, изменение яркости/контраста, Mosaic, MixUp.
- Балансировка классов: дополнительные примеры для редких классов.
- Настройка гиперпараметров: learning rate, batch size, weight decay.
- Использование предобученных весов и fine-tuning вместо тренировки с нуля.
- Сложные фоны: добавьте негативные примеры (без объектов) и hard-negative mining.
Короткая эвристика: сначала добейтесь стабильной валидации, затем увеличивайте сложность (augmentation, более глубокая модель).
Когда YOLOv8 может не подойти
- Очень мелкие объекты на большом изображении — понадобится высокая разрешающая способность и специализированные архитетуры.
- Крайне плотные сцены с перекрывающимися объектами — проблемы с точностью боксов; рассмотрите методы сегментации или более тонкую разметку.
- Очень специализированные домены (медицина, спутниковые снимки) — может потребоваться кастомная архитектура и дополнительные предварительные обработки.
Альтернативные подходы
- Detectron2 (Facebook/Meta) — мощная платформа для детекции/сегментации.
- EfficientDet — компромисс между скоростью и точностью.
- SSD/RetinaNet — для задач с ограниченным ресурсом и стабильной производительностью.
Практические чек-листы
Общий чек-лист перед тренировкой:
- Виртуальное окружение и Ultralytics установлены.
- Данные разметки проверены на соответствие формату YOLO.
- config.yaml содержит корректные пути и имена классов.
- Подготовлен validation set и test set.
- Настроен мониторинг обучения (tensorboard/plots).
Роли и ответственность (коротко):
- Data Engineer: сбор и очистка данных, хранение, разметка, разделение.
- ML Engineer: настройка обучения, гиперпараметров, мониторинг.
- DevOps: развёртывание модели, CI/CD, экспорт в ONNX/TensorRT, мониторинг в проде.
Критерии приёмки
- Mean Average Precision (mAP) на test сете соответствует порогу проекта (например, >0.5 mAP).
- Отсутствие регрессий на наборе критичных сценариев (low-light, occlusion).
- Время инференса и потребление ресурсов укладываются в целевые SLA.
- Модель успешно экспортируется в требуемый формат (ONNX/TensorRT).
Минимальный план действий для продакшена (SOP)
- Подготовить production dataset — собрать реальные примеры из продакшена.
- Дообучить модель (fine-tune) на production dataset.
- Тестовый деплой в staging-окружение с логированием предсказаний.
- Запустить A/B тест или shadow-mode для сравнения с текущей системой.
- Экспортировать стабильную версию в ONNX/TensorRT и внедрить в прод.
Критические тесты и приёмочные сценарии
- Тесты на устойчивость: кадры с шумом, различным освещением, частичным перекрытием объектов.
- Тесты на задержку: инференс на целевом железе при пиковых нагрузках.
- Тесты на корректность: сравнение предсказаний с ручной разметкой на выборке.
1-строчный глоссарий
- bbox: ограничивающий прямоугольник вокруг объекта.
- mAP: mean Average Precision — средняя точность по всем классам и порогам IoU.
- IoU: Intersection over Union — метрика перекрытия двух областей.
Безопасность и приватность
Если вы обрабатываете персональные данные (лица, номера и т. п.), соблюдайте правила локального законодательства о защите данных. Анонимизируйте изображения при необходимости и храните доступ к датасетам под контролем ролей.
Быстрые советы по миграции и совместимости
- При переходе между версиями Ultralytics/YOLO проверяйте breaking changes в changelog.
- Экспортируйте модель и прогоняйте интеграционные тесты на целевой платформе (облако или on-prem).
- Для ускорения инференса на NVIDIA используйте TensorRT; на CPU — OpenVINO или ONNX Runtime.
Краткое резюме
YOLOv8 — гибкая и мощная модель для обнаружения объектов в реальном времени. Для качественного результата требуется аккуратная подготовка данных, корректная конфигурация и поэтапная валидация. Следуйте контрольным спискам, используйте data augmentation и мониторинг, а перед продакшеном прогоните приемочные тесты и shadow-deploy.
Важное: начните с небольшой модели и короткого цикла экспериментов, затем масштабируйте: больше данных → более крупная модель → финальный экспорт в ONNX/TensorRT.
Если нужно, могу подготовить шаблон config.yaml, пример скрипта предобработки изображений или автоматизированный pipeline для CI/CD развёртывания модели.