Детекция объектов с YOLO: от датасета до запуска
Практика3 минРедакция Innovialabs
Коротко
YOLO-проект — это на 80% работа с данными: соберите кадры из реальных условий, аккуратно разметьте, дообучите готовую модель, проверьте mAP на отложенной выборке и экспортируйте под нужное железо.
Короткий ответ
YOLO (You Only Look Once) — семейство моделей, которые за один проход находят на изображении объекты и рисуют вокруг них рамки с классом и уверенностью. Для бизнес-задачи — каска на рабочем, номер машины, товар на полке — обычно не обучают модель с нуля, а дообучают готовую на своих данных. Путь выглядит так: данные → разметка → обучение → оценка → запуск.
Шаг 1. Сбор изображений
Качество модели определяется тем, насколько данные похожи на реальную эксплуатацию.
- Снимайте с той же камеры и того же ракурса, где модель будет работать.
- Добавьте разное освещение: день, ночь, блики, дождь.
- Включите «сложные» кадры: частично закрытые объекты, толпу, мелкие объекты вдалеке.
- Добавьте кадры без объектов — так модель реже даёт ложные срабатывания.
- Избегайте почти одинаковых кадров подряд из видео: берите каждый N-й кадр.
Шаг 2. Разметка
Каждому объекту рисуется рамка и присваивается класс. Для этого есть инструменты вроде CVAT или Label Studio, которые экспортируют разметку в формат YOLO.
Правила, которые экономят недели:
- Напишите инструкцию для разметчиков: что считать объектом, как размечать частично видимые.
- Рамка должна плотно облегать объект, без лишнего фона.
- Делайте выборочную перепроверку — ошибки разметки напрямую снижают качество.
- Разделите данные на train / val / test заранее, и кадры с одной сцены держите в одной части.
Описание датасета в формате YOLO:
path: datasets/helmets
train: images/train
val: images/val
names:
0: helmet
1: no_helmet
Шаг 3. Обучение
С библиотекой Ultralytics базовое дообучение занимает несколько строк:
from ultralytics import YOLO
model = YOLO("yolov8n.pt") # предобученная маленькая модель
model.train(data="data.yaml", epochs=100, imgsz=640)
metrics = model.val() # оценка на val
model.export(format="onnx") # экспорт для запуска
Выбор размера модели — компромисс: маленькие (n, s) быстрые и подходят для edge-устройств, большие (l, x) точнее, но требуют мощного GPU.
Шаг 4. Оценка: что значит mAP
- Precision — какая доля найденных объектов действительно верна.
- Recall — какую долю реальных объектов модель нашла.
- mAP@0.5 — средняя точность при совпадении рамок на 50% и более.
- mAP@0.5:0.95 — более строгая метрика, усреднённая по разным порогам совпадения.
Смотрите не только на общий mAP, но и на метрики по каждому классу и на ошибки глазами. Для задач безопасности часто важнее recall (не пропустить нарушение), для автоматических штрафов — precision (не наказать зря).
Шаг 5. Запуск
| Вариант | Когда подходит |
|---|---|
| Сервер с GPU | Много камер, нужна точность, есть стабильная сеть |
| Edge-устройство (Jetson и аналоги) | Обработка на месте, мало трафика, приватность |
| CPU / мини-ПК | Мало потоков, маленькая модель, невысокий FPS допустим |
Для ускорения модель экспортируют в ONNX, TensorRT или OpenVINO — в зависимости от железа. Дальше нужен код вокруг модели: чтение RTSP-потока, фильтрация срабатываний по нескольким кадрам, отправка событий в CRM, Telegram или систему учёта.
Частые ошибки
- Обучать на фото из интернета, а запускать на камере с другим ракурсом.
- Оценивать модель на кадрах, очень похожих на обучающие, — метрики завышены.
- Не мониторить модель после запуска: сменилось освещение или камера — качество упало.
- Реагировать на каждое срабатывание без подтверждения на нескольких кадрах.