Как реализовать мульти-объектный трекинг в реальном времени?
Реализация мульти-объектного трекинга (MOT — Multi-Object Tracking) в реальном времени представляет собой задачу отслеживания нескольких объектов на видеопотоке, обеспечивая каждому объекту постоянный уникальный идентификатор (ID), даже при частичном исчезновении из кадра, перекрытиях и изменениях внешнего вида. MOT часто используется в видеонаблюдении, автономном вождении, спорте, торговле, анализе поведения.
Полноценная система MOT строится как связка детектора объектов и алгоритма ассоциации между кадрами.
1. Общий пайплайн MOT-системы
-
Получение видеопотока (камера, видеофайл, RTSP)
-
Детекция объектов на каждом кадре (детектор)
-
Сопоставление новых объектов с треками из предыдущего кадра
-
Обновление треков (позиции, ID, статус)
-
Обработка исчезнувших / новых объектов
-
Визуализация или экспорт треков (ID + bbox + timestamp)
2. Детекторы объектов в MOT
MOT-система требует frame-wise детектора объектов, запускаемого на каждом кадре:
Популярные модели:
-
YOLOv5 / YOLOv8 (подходят для реального времени)
-
YOLO-NAS (более точные версии)
-
NanoDet, PP-YOLOE, RT-DETR (для скорости)
-
CenterNet, EfficientDet
-
Модифицированные SSD, Faster R-CNN (медленнее)
Детектор должен обеспечивать:
-
Достаточную точность
-
Поддерживаемый FPS на нужном устройстве (от 15 fps и выше)
-
Отсутствие ложных срабатываний (важно для ассоциации треков)
3. Алгоритмы трекинга
Алгоритмы ассоциации треков бывают двух основных типов: tracking-by-detection и tracking-by-regression.
A. SORT (Simple Online and Realtime Tracking)
-
Использует Kalman фильтр для предсказания положения bbox
-
Использует Hungarian Algorithm для сопоставления по IoU
-
Быстрый, простой, CPU-friendly
-
Не использует appearance features
B. Deep SORT
-
Расширение SORT
-
Использует вектор признаков (ReID features) для улучшения ассоциации
-
Более устойчив к перекрытиям и исчезновениям
-
Использует pre-trained CNN для извлечения appearance векторов
-
Медленнее, требует GPU
C. ByteTrack (YOLOX)
-
Простой и эффективный
-
Ассоциирует сначала объекты с высоким confidence, затем — с низким
-
Нет ReID, но высокая точность
-
Очень популярен в 2023–2025
D. BoT-SORT
-
Улучшение Deep SORT с помощью ReID + Kalman + ByteTrack logic
-
Наиболее устойчив к перегрузкам сцены
-
Высокая точность на MOTChallenge
E. OC-SORT (2022)
-
Использует оптический поток (опционально)
-
Более гладкие треки
-
Подходит для спортивного видео, движущихся камер
4. Идентификация объектов (Re-ID)
Чтобы сохранить ID объекта после частичного исчезновения из кадра, используется Re-identification (ReID):
-
Вектор признаков appearance (128–512 float значений)
-
Сравнивается косинусным расстоянием
-
Используется в Deep SORT, BoT-SORT
ReID модели:
-
OSNet
-
FastReID
-
MGN (Multi-Granularity Network)
-
Lightweight модели на MobileNet
5. Фильтрация и сглаживание (Kalman Filter)
Kalman-фильтр используется для:
-
Предсказания положения объекта, даже если он не детектируется временно
-
Сглаживания шума
-
Экстраполяции движения при временных пропусках
Вход: позиция bbox
Выход: предсказанная позиция на следующий кадр
Параметры:
-
Матрицы ошибок (Q, R)
-
Скорость / ускорение объекта
-
Модель движения (constant velocity, constant acceleration)
6. Ассоциация объектов между кадрами
Часто используется Hungarian Algorithm (решение задачи сопоставления):
-
Строится матрица расстояний между текущими детекциями и предыдущими треками
-
Критерии: IoU, косинусное расстояние ReID, евклидова метрика
-
Выбирается минимальный общий cost
Может использоваться также:
-
Гибридный подход (appearance + motion)
-
Threshold по confidence и по IoU
7. Реализация в реальном времени
Способы ускорения:
-
Детекция через кадр (frame skipping) или с меньшим разрешением
-
Параллельная обработка: отдельный поток для детекции, трекинга, визуализации
-
Использование ускоренных библиотек: TensorRT, TFLite, OpenVINO
-
Преобработка (resize, normalization) с помощью NumPy/Numba/OpenCV на C++ backend
-
Минимизация времени IO: прямой захват из cv2.VideoCapture, gstreamer, RTSP с буфером
Фреймворки:
- Norfair
- ByteTrack
- BoT-SORT
- Deep SORT (ZQPei)
- MMTracking от OpenMMLab
8. Обработка событий и логики
После получения треков (ID + bbox), можно добавить:
-
Подсчет уникальных объектов (set of IDs)
-
События входа/выхода в зону (ROI)
-
Расчёт траектории, скорости
-
Кластеризация маршрутов
-
Уведомления при определённых действиях (например, loitering, задержка)
9. Работа с нестабильным видео
Проблемы:
-
Размытие при движении
-
Пропущенные кадры
-
Изменение освещения
-
Движущаяся камера
Решения:
-
Использование стабилизации (OpenCV: videostab)
-
Трекинг по ключевым точкам (KLT, optical flow)
-
Использование моделей со встроенным контекстом (например, OC-SORT)
-
Использование TTA (test-time augmentation)
10. Пример минимальной реализации (SORT + YOLOv5)
import cv2
from sort import Sort # внешняя библиотека SORT
from yolov5 import YOLOv5 # библиотека-интерфейс или самодельная
tracker = Sort()
detector = YOLOv5("yolov5s.pt", device="cuda")
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
if not ret: break
detections = detector.predict(frame)
bboxes = \[\[x1, y1, x2, y2, conf\] for x1, y1, x2, y2, conf, cls in detections if conf > 0.3\]
tracks = tracker.update(np.array(bboxes))
for x1, y1, x2, y2, track_id in tracks:
cv2.rectangle(frame, (int(x1), int(y1)), (int(x2), int(y2)), (0,255,0), 2)
cv2.putText(frame, f'ID {int(track_id)}', (int(x1), int(y1)-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,255,0), 2)
cv2.imshow("Tracking", frame)
if cv2.waitKey(1) & 0xFF == 27: break
11. Реализация на Edge-устройствах
На устройствах типа Jetson Nano, Coral, Raspberry Pi:
-
Использовать модели типа YOLOv5n, YOLOv8n, NanoDet
-
Квантизация до TFLite/ONNX/INT8
-
Оптимизация инференса (использовать TensorRT, NPU delegate)
-
Вести трекинг на CPU, ReID — опционально
-
Разделить pipeline по потокам
12. Форматы и сохранение треков
-
CSV: frame, ID, x1, y1, x2, y2
-
JSON (COCO-tracks style)
-
MOTChallenge .txt формат
-
Отправка через MQTT/WebSocket
-
Запись видео с overlay (cv2.VideoWriter)
13. Расширения и вариации
-
3D трекинг (если есть глубина): Multi-view или Lidar+RGB
-
Multi-camera tracking (MCT): ReID + геометрия
-
Взаимодействие с зонами (ROI, пересечение линии)
-
Трекинг по семантике (на уровне класса)
-
Heatmaps по маршрутам
14. Метрики оценки трекинга
Для оценки качества трекинга:
-
MOTA (Multiple Object Tracking Accuracy)
-
IDF1 (ID F1-score)
-
**FP, FN, ID Switches
** - **ID Precision/Recall
**
Используются бенчмарки:
-
MOTChallenge
-
BDD100K MOT
-
TAO (Tracking Any Object)
Реализация мульти-объектного трекинга требует интеграции быстрых детекторов, устойчивых алгоритмов ассоциации и тщательной настройки параметров, чтобы добиться стабильного и производительного трекинга в условиях реального времени.