Обучение YOLOv8 на кастомных данных

Зачем использовать YOLOv8
YOLOv8 — это современная реализация семейства You Only Look Once от Ultralytics. Она выполняет детекцию, сегментацию, оценку поз и классификацию в реальном времени. Подойдёт как для быстрых прототипов (POC), так и для интеграции в продукт при условии правильной подготовки данных и оптимизации.
Ключевые преимущества:
- Низкая задержка для реального времени.
- Поддержка различных задач (detect, segment, classify).
- Предобученные веса и удобная CLI-интеграция.
Важно: выбор варианта модели (yolov8n/s/l/x) — компромисс между скоростью и точностью.
Уровни зрелости применения (Maturity levels)
- POC: yolov8n, небольшое количество эпох, 1–10 классов.
- Прототип: yolov8s, расширенная аугментация и валидация по k-fold.
- Продакшен: yolov8l/x, внимательная работа с датасетом, финетюнинг и оптимизация экспорта (ONNX, TensorRT).
1. Настройка Python‑окружения
Пошаговая установка окружения для разработки:
- Создайте директорию проекта и виртуальное окружение:
mkdir yolov8project
cd yolov8project
python -m venv env- Активируйте виртуальное окружение:
# On Windows
env/Scripts/activate
# On Linux / macOS
source env/bin/activate- Установите Ultralytics через pip:
pip install ultralytics- Проверьте работу предобученной модели (детекция изображения/видео). Примеры команд:
# image detection
yolo task=detect mode=predict model=yolov8n.pt source="path/to/image.png"
# video detection
yolo task=detect mode=predict model=yolov8n.pt source="path/to/video.mp4"Если всё прошло успешно, результаты появятся в папке runs/detect/exp внутри директории проекта.
Совет: используйте отдельный environment для каждого проекта и фиксируйте зависимостями в requirements.txt.
2. Подготовка кастомного датасета
Подготовка данных включает сбор, аннотирование и разбиение на train/val/test.
Сбор данных
Соберите разнообразные изображения, отражающие реальную вариативность сцен: освещение, ракурсы, occlusion. Источники: собственные фото, Flickr, OpenImages, Kaggle. Для примера в этой статье использовался набор изображений по безопасности на стройплощадке (Kaggle).
Совет по локализации: если в изображениях есть люди, убедитесь в соблюдении локального законодательства и требовании к согласиям для обработки изображений.
Аннотирование
Инструменты: LabelImg, CVAT, Roboflow.
- LabelImg: прост для bounding‑box аннотаций (VOC/Yolo форматы).
- CVAT: удобен для командной работы и сложных задач (instance tracking, segmentation).
- Roboflow: автоматизация, предобработка и экспорт в нужный формат.
Форматы: YOLO TXT (x_center y_center width height, нормированные), COCO JSON (рекомендуется для сегментации/сложных проектов).
Разбиение данных
Рекомендуемые доли:
- Большие датасеты: train 70% / val+test 30% (например 70/20/10).
- Малые датасеты: train 80% / val 20% или использование k-fold.
Можно использовать утилиту split-folders для случайного разбиения на train/val/test.
3. Конфигурация для собственного датасета
Создайте файл config.yaml с путями и классами. Пример структуры:
path: (dataset directory path)
train: (train dataset folder path)
test: (test dataset folder path)
valid: (validation dataset folder path)
# Classes
nc: 5 # replace based on your dataset's number of classes
# Class names
# replace all class names with your own classes' names
names: ['class1', 'class2', 'class3', 'class4', 'class5']Правильно указывайте абсолютные или относительные пути. Ошибка в путях — частая причина «не видит данных» при запуске обучения.
Совет: храните конфигурацию в репозитории проекта и версионируйте её вместе с метаданными аннотаций.
4. Обучение YOLOv8 на кастомных данных
Стандартная команда для обучения:
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, track, benchmark).
- model: предобученные веса (yolov8n/s/l/x) или путь к своим весам.
- epochs: количество эпох; для POC 10–30, для финального обучения — 50–200+ в зависимости от данных.
- imgsz: размер входного изображения (кратный 32).
Рекомендации по гиперпараметрам:
- batch size выбирайте по доступной VRAM (следите за OOM).
- lr: начальная скорость обучения по умолчанию подходит для большинства задач, но будьте готовы уменьшать при шумной обучающей выборке.
- augmentation: активируйте аугментации (flip, mosaic, hsv) для повышения обобщающей способности.
Время обучения зависит от размера датасета, числа классов, выбранной модели и аппаратной платформы.
5. Инференс и сохранение весов
После успешного обучения выполните инференс с новыми весами:
yolo task=detect mode=predict model="runs/train/weights/best.pt" source="image.png"Сохранившиеся веса обычно находятся в runs/train/exp/weights/best.pt. Результаты инференса — в runs/detect/exp.
Экспорт модели в формат для деплоя (пример ONNX):
yolo export model=path/to/best.pt format=onnxПоддерживаемые форматы: ONNX, TorchScript, CoreML, TensorRT (через ONNX->TensorRT). Выбор зависит от целевой платформы (сервер, мобильное устройство, edge‑устройство).
6. Оценка качества модели
Команда валидации:
yolo val model=yolov8n.pt data=path/to/config.yaml batch=1 imgsz=640Ключевые метрики:
- Precision: доля правильно предсказанных объектов среди всех предсказанных.
- Recall: доля обнаруженных объектов среди всех объектов разметки.
- F1 score: гармоническое среднее precision и recall.
Совет: смотрите PR curves и per‑class AP для выявления проблем по классам.
7. Деплой и эксплуатация
Базовый инференс из командной строки:
yolo detect predict model=path/to/best.pt source='path/to/image.jpg'После экспорта в ONNX загрузите модель в приложение или SSR/Serverless‑функцию. Для реального времени на сервере используйте TensorRT или OpenVINO для ускорения.
Совет по CI/CD: автоматизируйте проверку качества (val) при обновлении данных или конфигурации, и откатывайте модель при падении ключевых метрик.
Когда подход не сработает (Counterexamples / ограничения)
- Очень малая выборка (<100 изображений) для большого числа классов — модель не обобщит.
- Сильно доминирующий класс (imbalance) — высокая precision на доминирующем классе и низкая на редких.
- Критически важная точность локализации (миллиметровая точность) — детекции могут быть недостаточно точны без дополнительной пост‑обработки.
Альтернативные подходы: Faster R-CNN для задач, где важна точность более чем скорость; Mask R-CNN для точной сегментации.
Методология быстрого POC (минимальная reproducible процедура)
- Сбор 200–1000 изображений, 2–5 классов.
- Аннотирование bounding boxes (YOLO формат).
- Разделение 80/20 train/val.
- Обучение yolov8n 20–50 эпох, imgsz=640.
- Быстрая валидация и анализ per‑class AP.
- Экспорт лучших весов и пробный деплой на одной машине.
Role‑based чек‑листы
- Data Engineer:
- Собрать метаданные и проверить баланс классов.
- Подготовить структуру каталога для data.yaml.
- Аннотаторы:
- Проверить консистентность имен классов.
- Выполнить QA аннотаций (случайная выборка 5–10%).
- ML Инженер:
- Настроить обучение, логирование (TensorBoard/Weights & Biases).
- Запустить валидацию и сохранить best.pt.
- DevOps:
- Настроить контейнер с CUDA/ONNX Runtime.
- Организовать автоматические тесты инференса.
Критерии приёмки
- AP (mAP@0.5) превышает порог, определённый бизнес‑требованием.
- Precision и Recall по ключевым классам находятся в приемлемых пределах.
- Система работает в заданном SLA по задержке (latency) и пропускной способности (throughput).
Отладка — часто встречаемые ошибки и как их лечить
- “No such file or directory” при запуске train: проверьте пути в config.yaml.
- OOM (out of memory): уменьшите batch size, уменьшите imgsz или используйте gradient accumulation.
- Нулевая метрика по одному классу: проверьте аннотации (label mismatch, пустые bounding boxes).
- Переобучение: уменьшите epochs, добавьте аугментации или соберите больше данных.
Конфиденциальность и соответствие требованиям (GDPR и локальные законы)
Если изображения содержат людей или личную информацию:
- Анонимизируйте лица или получите согласие субъектов.
- Храните данные в зашифрованном виде и логируйте доступ.
- Документируйте срок хранения данных и цель обработки.
Короткая методика тестов принятия (Test cases)
- Инференс одного изображения возвращает bounding boxes в json/папке с картинками.
- Валидация запускается без ошибок и выводит метрики.
- Экспорт ONNX загружается в целевой runtime и выполняет инференс.
Decision flowchart
flowchart TD
A[Начало: есть ли размеченные данные?] -->|Нет| B[Собрать и аннотировать данные]
A -->|Да| C[Подготовить config.yaml]
C --> D[Запустить обучение]
D --> E{Метрики удовлетворяют требованиям?}
E -->|Да| F[Экспорт и деплой]
E -->|Нет| G[Проанализировать: больше данных / аугментация / балансировка]
G --> DКраткое резюме
- YOLOv8 — гибкая модель для детекции и сегментации, подходящая для POC и продакшена.
- Ключ к успеху — качественные и репрезентативные аннотации, корректная конфигурация и мониторинг качества при деплое.
- Экспорт в ONNX и оптимизации (TensorRT, OpenVINO) позволяют добиться требуемой производительности в проде.
Важно: начните с небольшого POC (yolov8n), отладьте pipeline данных и метрики, затем масштабируйте модель и автоматизируйте CI/CD для модели.
1‑строчная глоссарий
- AP / mAP: Average Precision — усреднённая точность.
- IOU: Intersection over Union — мера пересечения предсказанного и истинного бокса.
- Epoch: проход по всему датасету во время обучения.
Похожие материалы
Сохранить вложения Gmail в Google Drive
Как скрыть значок Windows Defender в трее
Как поддерживать точное время в Windows 7
Виджет Entertainment в Windows 11 — включение и использование
Проводник Windows зависает — как исправить