Разработка системы детекции объектов на изображениях (Object Detection)
Сталкивались с тем, что готовая модель детекции не справляется с вашими объектами? Мы разрабатываем кастомные системы object detection под ключ: от сбора датасета до деплоя на edge-устройства. За 5+ лет мы реализовали проекты для ритейла, производства и безопасности. В этой статье разберём, как выбрать архитектуру, настроить fine-tuning и добиться real-time производительности. Типичные задачи — счёт товаров на полке, контроль брака на конвейере, распознавание автомобилей на парковке. Часто клиенты приходят с запросом «научите нейросеть находить дефекты» или «посчитайте количество продуктов». Мы помогаем сформулировать ТЗ, подобрать оптимальную модель и внедрить решение.
Как выбрать детектор под задачу?
YOLOv8/YOLO11 — оптимальный выбор для большинства задач. Ultralytics-имплементация с хорошей документацией, активной поддержкой, встроенным экспортом в TensorRT/ONNX. Для стандартных сценариев (1–20 классов, real-time) — это стартовая точка.
RT-DETR (Real-Time Detection Transformer) — transformer-based детектор, лучшее качество при сопоставимой скорости с YOLOv8. Архитектура на основе DETR с ускорением за счёт query selection. Рекомендуем, когда нужно максимальное mAP и нет жёстких требований к latency (74 FPS на T4).
Grounding DINO — open-vocabulary детекция: находит объекты по текстовому описанию без дообучения. Полезен для прототипирования и задач с редкими категориями или частой сменой номенклатуры. Не требуется собирать датасет — достаточно сформулировать запрос.
| Модель | [email protected] COCO | FPS (T4) | Параметры |
|---|---|---|---|
| YOLOv8n | 52.9 | 320 | 3.2M |
| YOLOv8l | 64.9 | 87 | 43.7M |
| YOLO11m | 64.0 | 183 | 20.1M |
| RT-DETR-L | 65.6 | 74 | 32M |
Почему fine-tuning на кастомных данных критичен?
Предобученные на COCO детекторы умеют распознавать 80 классов. Если ваши объекты не входят в этот список — fine-tuning необходим. Даже если классы есть, домен может отличаться (ночные кадры, специфические ракурсы), что снижает качество. Fine-tuning адаптирует модель под вашу доменную область.
from ultralytics import YOLO model = YOLO('yolov8l.pt') results = model.train( data='dataset.yaml', epochs=100, imgsz=640, batch=16, optimizer='AdamW', lr0=0.001, lrf=0.01, weight_decay=0.0005, augment=True, degrees=10.0, mosaic=1.0, device=0 ) Структура dataset.yaml:
path: /data/myproject train: images/train val: images/val test: images/test nc: 5 names: ['cat', 'dog', 'car', 'person', 'bicycle'] Аугментация для детекции
Детекция требует специфичной аугментации — трансформации должны корректно применяться к bounding boxes:
- Mosaic — склейка 4 изображений в одно, увеличивает разнообразие контекстов
- MixUp — смешивание двух изображений с весами
- Copy-Paste — вырезание объектов и вставка в новый контекст
- Random crop с сохранением объектов в кадре
- Albumentations: HorizontalFlip, RandomBrightnessContrast, GaussNoise
Метрики и постобработка
- [email protected] — mean Average Precision при IoU threshold 0.5
- [email protected]:0.95 — более строгий: среднее mAP при IoU от 0.5 до 0.95 с шагом 0.05
- Precision / Recall при конкретном confidence threshold
- FPS / latency — для real-time систем
Выбор confidence threshold: ROC-like кривая precision-recall, выбор порога в зависимости от допустимого баланса для конкретного применения.
Non-Maximum Suppression удаляет дублирующие детекции. Параметры: IoU threshold (0.45–0.7), confidence threshold (0.25–0.5). Для плотно расположенных объектов применяется Soft-NMS или Class-Agnostic NMS.
Деплой на целевое устройство
TensorRT engine для NVIDIA GPU: экспорт из Ultralytics одной командой model.export(format='engine'). ONNX для CPU-деплоя. Для Raspberry Pi / Jetson: YOLO11n в TFLite / ONNX Runtime.
| Задача | Срок |
|---|---|
| Детекция 1–5 классов, достаточно данных | 1–3 недели |
| Детекция 20+ классов, сбор данных | 4–7 недель |
| Детекция в сложных условиях (ночь, туман) | 6–10 недель |
Типичные ошибки и как их избежать
- Мало данных на один класс — приводит к низкой recall. Решение: собрать минимум 500 изображений на класс.
- Переобучение при избытке пустых кадров. Решение: балансировать пустые и содержащие объекты изображения.
- Неправильная аугментация: например, обрезка, убирающая объект. Решение: настраивать RandomCrop с сохранением объекта.
- Игнорирование постпроцессинга: NMS с высоким порогом может удалить правильные детекции. Решение: подбирать порог на валидационной выборке.
Процесс работы над проектом
- Анализ задачи и сбор требований: какие объекты, условия съёмки, требования по FPS.
- Сбор и разметка датасета: с использованием CVAT или Label Studio. Минимум 1000 изображений.
- Выбор архитектуры и обучение baseline. Итеративное улучшение с аугментацией и оптимизацией гиперпараметров.
- Тестирование на реальных данных: оценка mAP, precision, recall, FPS.
- Деплой: экспорт в TensorRT/ONNX/TFLite, интеграция в вашу систему.
- Поддержка после внедрения: мониторинг качества, дообучение при появлении новых классов.
Что входит в работу
- Техническая документация по архитектуре и инструкции по использованию.
- Обучение вашей команды работе с моделью.
- Исходный код и конфигурации обучения.
- Доступ к серверу с обученной моделью (опционально).
- Гарантия на результат: если через месяц качество падает, мы бесплатно дообучаем.
Свяжитесь с нами, чтобы обсудить ваш проект. Получите консультацию по выбору модели и оценке сроков — расскажем, как быстро достичь нужного качества детекции.







