Обучение нейросети YOLO для распознавания объектов в OpenCV

Современные технологии машинного обучения позволяют создавать эффективные системы компьютерного зрения. В данной статье рассмотрены основы обучения нейросети семейства YOLO (You Only Look Once), которая является одной из самых популярных моделей для реального времени распознавания объектов.

"Обучение своей модели для OpenCV сегодня чаще всего подразумевает обучение нейросети семейства YOLO, так как она быстрее и точнее всего работает в реальном времени."

1. Сбор данных (Dataset)

Эффективное обучение требует наличие качественного набора данных. Количество примеров зависит от сложности задачи:

  • Минимум 100–300 изображений на каждый новый объект.
  • Разнообразие условий освещения, углов съемки и фонов.

2. Разметка (Annotation)

Для обучения требуется пометить объекты на изображениях. Используются следующие инструменты:

  • Roboflow — онлайн-инструмент для разметки.
  • CVAT — профессиональная платформа для разметки.

Экспортированные данные должны быть в формате YOLO, где каждое изображение сопровождается текстовым файлом с нормализованными координатами:

[class_id, x_center, y_center, width, height]
*Все значения — числа от 0 до 1.*

3. Структура проекта

Данные должны быть организованы по следующей структуре:

/dataset
  /train
    /images (фото для обучения)
    /labels (текстовые файлы разметки)
  /val
    /images (фото для проверки точности)
    /labels (разметка для проверки)
  data.yaml (файл с настройками путей и именами классов)

Пример содержимого файла data.yaml:

train: ../train/images
val: ../val/images
nc: 2
names: ['drone', 'smoke']

4. Обучение модели

Обучение лучше проводить на видеокарте (NVIDIA) или в Google Colab. Пример кода для запуска обучения:

from ultralytics import YOLO

# Загружаем предобученную модель
model = YOLO('yolov8n.pt')

# Запускаем обучение на вашем датасете
results = model.train(
  data='data.yaml',
  epochs=100,
  imgsz=640,
  device=0
)

5. Интеграция в проект

После завершения обучения в папке runs/detect/train/weights/ появится файл best.pt. Это и есть ваша "умная" модель.

Чтобы использовать её в вашем sentinax.py, замените одну строку в config.json:

"vision": {
  "yolo_model": "runs/detect/train/weights/best.pt",
  "confidence_threshold": 0.5
}

Математика обучения

1. Функция потерь (Loss Function)

В процессе обучения модель пытается минимизировать ошибку. Для детекции используется составная функция:

L = λboxLbox + λclsLcls + λobjLobj
  • Lbox: Ошибка точности рамки.
  • Lcls: Ошибка классификации.
  • Lobj: Ошибка наличия объекта.
2. Метрика IoU (Intersection over Union)

Чтобы понять, насколько хорошо модель предсказала рамку, используется формула:

IoU = Area of Overlap / Area of Union

Если IoU > 0.5, считается, что объект найден успешно.

Советы для новичка

  • Не обучайте на CPU — это займет дни. Используйте бесплатный Google Colab.
  • Аугментация помогает создать больше данных без ручной работы.
  • Начните с малого: попробуйте обучить модель распознавать один предмет.

Хотите, я помогу составить структуру data.yaml или скрипт для автоматического сбора скриншотов с камеры для датасета?