Как реализовать мульти-объектный трекинг в реальном времени?

Реализация мульти-объектного трекинга (MOT — Multi-Object Tracking) в реальном времени представляет собой задачу отслеживания нескольких объектов на видеопотоке, обеспечивая каждому объекту постоянный уникальный идентификатор (ID), даже при частичном исчезновении из кадра, перекрытиях и изменениях внешнего вида. MOT часто используется в видеонаблюдении, автономном вождении, спорте, торговле, анализе поведения.

Полноценная система MOT строится как связка детектора объектов и алгоритма ассоциации между кадрами.

1. Общий пайплайн MOT-системы

  1. Получение видеопотока (камера, видеофайл, RTSP)

  2. Детекция объектов на каждом кадре (детектор)

  3. Сопоставление новых объектов с треками из предыдущего кадра

  4. Обновление треков (позиции, ID, статус)

  5. Обработка исчезнувших / новых объектов

  6. Визуализация или экспорт треков (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 с буфером

Фреймворки:

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)

Реализация мульти-объектного трекинга требует интеграции быстрых детекторов, устойчивых алгоритмов ассоциации и тщательной настройки параметров, чтобы добиться стабильного и производительного трекинга в условиях реального времени.