Компьютерное зрение
Object Tracking: SORT, DeepSORT, ByteTrack
Amazon Go магазины работают без кассиров - камеры отслеживают каждого покупателя и каждый товар одновременно. 100+ человек, 1000+ товаров, 30 FPS. Один ID switch - неправильный чек. Это не задача детекции: задача трекинга. SORT появился в 2016, ByteTrack в 2022 - и разрыв между ними в загроможденных сценах составляет 15% точности.
- Amazon Go: MOT с 300+ камерами для checkout-free shopping без единого кассира
- Tesla Autopilot: SORT-подобный трекинг в 8 камерах одновременно при 36 мс latency на кадр
- Waymo: трекинг пешеходов, велосипедистов, авто из 29 LiDAR + камера fusion на 40 000 ч/день данных
- Спортивная аналитика: ByteTrack для игроков на футбольном поле - статистика передвижений и тепловые карты
Предварительные знания
- Object detection: YOLO/DETR, bounding box, confidence score, IoU
- Венгерский алгоритм: оптимальное назначение по матрице стоимости за O(n³)
- Фильтр Калмана: предсказание и коррекция состояния по зашумлённым измерениям
- Cosine similarity и эмбеддинги признаков (для re-ID в DeepSORT)
SORT, DeepSORT, ByteTrack: эволюция tracking-by-detection
В 2016 году Alex Bewley с соавторами опубликовал SORT (Simple Online and Realtime Tracking) на ICIP. Работа доказала, что простая связка из фильтра Калмана и венгерского алгоритма по IoU даёт почти SOTA-качество трекинга на скорости в сотни кадров в секунду - без единой нейросети в самом трекере. Слабое место - перекрытия: после долгого occlusion SORT путал идентификаторы. В 2017 году Nicolai Wojke, Alex Bewley и Dietrich Paulus выпустили DeepSORT, добавив глубокий appearance-эмбеддинг (re-ID) и каскадный матчинг, что резко снизило число ID switch. В 2021 году Yifu Zhang с соавторами предложили ByteTrack (опубликован на ECCV 2022): ключевая идея - не выбрасывать низкодостоверные детекции, а на втором этапе ассоциировать их с потерянными треками. Это вернуло объекты, частично скрытые в толпе, и вывело ByteTrack в лидеры бенчмарков MOT17, MOT20 и DanceTrack при минимальной сложности.
SORT: трекинг за 20 строк кода
2016 год. Tesla Autopilot обрабатывал 8 камер одновременно при 36 мс на кадр. Детектор нашёл объекты. Вопрос: какой bbox кадра N соответствует bbox кадра N-1? Это задача трекинга. SORT (Simple Online and Realtime Tracking) решает её за 260 мкс на кадр - в 100 раз быстрее детектора.
**SORT = Kalman Filter + Hungarian Algorithm.** Kalman предсказывает позицию объекта в следующем кадре на основе текущей скорости. Hungarian Algorithm сопоставляет предсказанные позиции с детекциями текущего кадра по матрице IoU (Intersection over Union). Треки без совпадений за N кадров удаляются. Новые детекции без совпадений становятся новыми треками.
**Kalman State Vector.** SORT представляет каждый трек вектором состояния [x, y, s, r, dx, dy, ds], где x,y - центр bbox, s - площадь, r - aspect ratio, dx,dy,ds - скорости. Kalman предсказывает [x',y',s',r'] в следующем кадре. Это работает идеально для равномерного движения и даёт сбои при резких поворотах.
Что делает Hungarian Algorithm в пайплайне SORT?
DeepSORT: re-ID эмбеддинги против ID switch
SORT теряет трек при перекрытии: объект A заслоняет объект B на 30 кадров, затем выходит - SORT выдаёт два новых ID вместо восстановления исходных. DeepSORT добавляет appearance embedding: компактный вектор (128 dim) описывает внешность объекта. Даже после длинного перекрытия re-ID матч восстанавливает трек.
**Каскадный матчинг.** DeepSORT использует двухэтапное сопоставление: сначала сопоставляет активные треки (time_since_update == 0) с детекциями через appearance + IoU, затем оставшиеся потерянные треки - только через IoU. Это важно: appearance модель менее надёжна для треков без недавних обновлений.
Какую конкретную проблему SORT решает DeepSORT с помощью appearance embeddings?
ByteTrack: используем все детекции, даже плохие
SORT и DeepSORT отбрасывают детекции с confidence < 0.5. В загроможденных сценах (стадион, перекрёсток) объект в толпе может давать confidence 0.3 - и трекер теряет его. ByteTrack (2022) переворачивает логику: сначала матчинг высокодостоверных детекций, затем попытка ассоциировать потерянные треки с низкодостоверными детекциями.
**ByteTrack HOTA метрика.** MOTA (традиционная) штрафует ID switch жёстко. HOTA (Higher Order Tracking Accuracy) балансирует detection accuracy и association accuracy. ByteTrack на DanceTrack (задача трекинга танцоров с перекрытиями): HOTA 47.7 против 45.7 у DeepSORT+ - без appearance модели. Причина:低confidence детекции содержат реальные объекты, которые DeepSORT полностью игнорирует.
Почему ByteTrack использует низкодостоверные детекции на втором этапе, но не на первом?
Multi-Object Tracking: системные решения
Waymo ежедневно обрабатывает 40 000 часов сенсорных данных от роботакси. Трекинг пешеходов, велосипедистов, автомобилей - одновременно, при 10 FPS LiDAR + 30 FPS камера. На таком масштабе архитектурные решения важнее выбора алгоритма.
**Transformer-based tracking.** TrackFormer (2021) и MOTR объединяют детекцию и трекинг в один трансформер: track query - обучаемый вектор, который 'отслеживает' объект через кадры через cross-attention. Нет Kalman, нет Hungarian - всё заменяет attention. На MOT17: 74.1 MOTA у MOTR vs 76.5 у ByteTrack, но MOTR проще масштабируется на новые камеры без перебора гиперпараметров.
Лучший детектор = лучший трекер
Точность детектора важна, но трекер добавляет ID consistency. ByteTrack с YOLOv8 при confidence=0.5 обгоняет DeepSORT с тем же детектором на 15% HOTA за счёт low-confidence ассоциации - детектор одинаковый, алгоритм трекинга разный.
Метрика MOTA штрафует ID switch так же, как пропущенный объект. В сценах с перекрытиями ID switch доминирует в ошибках - поэтому алгоритм ассоциации критичнее threshold детектора.
Почему в продакшн MOT системах часто заводят отдельный трекер на каждый класс объектов?
Ключевые идеи
- SORT: Kalman предсказывает позицию, Hungarian сопоставляет предсказания и детекции по IoU - 260 мкс/кадр
- DeepSORT: appearance embedding (128-dim re-ID) восстанавливает ID после длинных перекрытий
- ByteTrack: двухэтапный матчинг - сначала high-conf детекции, затем low-conf для потерянных треков
- Multi-class: отдельный трекер на класс - пешеход не может стать автомобилем
- HOTA метрика: балансирует detection accuracy и association accuracy лучше MOTA
Связанные темы
Трекинг строится на детекции и ведёт к системам понимания видео.
- Object Detection: YOLO, SSD — YOLO - стандартный источник bbox детекций для MOT пайплайна
- Video Understanding — Трекинг идентифицирует объекты; Video Understanding строит действия поверх треков
- Self-Supervised Vision — Re-ID embeddings DeepSORT обучаются через contrastive self-supervised learning
Вопросы для размышления
- SORT использует только IoU для матчинга. В каких сценариях это принципиально ломается даже при идеальном детекторе?
- ByteTrack не использует appearance features. Как это влияет на tradeoff между точностью и скоростью по сравнению с DeepSORT?
- MOTR и TrackFormer объединяют детекцию и трекинг в один transformer. Какие практические проблемы остаются нерешёнными?
Связанные уроки
- cv-14 — Video Understanding даёт детекцию по кадрам, на которой строится трекинг
- cv-06 — YOLO детектор - стандартный источник bbox для SORT и ByteTrack
- cv-16 — Re-ID эмбеддинги DeepSORT улучшаются через Self-Supervised обучение
- dsp-06 — Kalman фильтр в SORT - классический алгоритм теории ЦОС для сглаживания сигналов
- prob-04-bayes