К содержимому
MoranaLabs.
Инженерные гайды5 мин чтения0 просмотров

Трекинг объектов в видеопотоке: ByteTrack, BoT-SORT и почему ID скачут 

Трекинг объектов в видеопотоке: ByteTrack, BoT-SORT и почему ID скачут на реальном железе. Разбираем, как Re-ID убивает FPS, откуда берутся фантомы в аналитике и почему красивые демо-видео лгут.

0xReality

MOTA 75% на датасете MOT17 выглядит шикарно на бумаге. Берете этот проверенный конфиг, раскатываете в реальном супермаркете с потолочными RTSP-камерами на 15 FPS, и ваши ID switches улетают с допустимых двухсот до четырех тысяч за час. Трекинг сломан. Аналитика трафика мертва.

«Но ведь tracking-by-detection давно решенная задача, берем YOLO, прикручиваем ByteTrack и в прод!» — скажет типичный разработчик, перечитавший туториалов. Нет. Не решенная. Трекинг объектов в видеопотоке: ByteTrack, BoT-SORT и почему ID скачут — это не тема для легковесного скрипта на коленке. Это суровая инженерия для ритейла и систем безопасности, где люди постоянно перекрывают друг друга.

Скептик возразит: зачем усложнять пайплайн, если старый добрый SORT с фильтром Калмана и венгерским алгоритмом по пересечению площадей отлично справляется? Потому что SORT работает, только пока объекты идут строго по прямой, а фреймрейт стабильно держится на уровне тридцати кадров в секунду.

Посмотрите на реальный магазин. Человек идет вдоль стеллажа и резко останавливается взять товар. Его скорость падает до нуля. Фильтр Калмана, ожидающий линейного движения, проецирует будущий бокс на полметра вперед. Когда покупатель снова начинает движение, его реальная детекция и предсказание фильтра просто не пересекаются в пространстве. Пересечение равно нулю. Венгерский алгоритм разводит руками. Трек разорван.

Добавьте сюда низкую частоту кадров. Службы безопасности не гоняют по сети несжатое видео при шестидесяти кадрах. Это всегда жесткая компрессия и 10-15 FPS. За десятую долю секунды между кадрами быстрый объект смещается так, что пересечение прямоугольников исчезает.

«Тогда берем DeepSORT! Там же эмбеддинги, они все склеят!» — злорадно парирует оппонент.

Берем. И получаем падение пропускной способности системы втрое. DeepSORT прогоняет кроп каждого найденного бокса через тяжелую Re-ID нейросеть для извлечения визуальных признаков. Десять человек в кадре — десять дополнительных прогонов условного OSNet или ResNet поверх работы детектора. Вы скажете, что батчинг спасет ситуацию. Батчинг действительно повышает пропускную способность, но он неизбежно растит latency. Для реалтайм-системы безопасности, где счет идет на миллисекунды, это смерти подобно. На edge-устройствах вы просто задыхаетесь от нехватки ресурсов, а стоимость обработки каждого кадра улетает в космос.

Здесь на сцену выходит ByteTrack. Это потрясающая в своей простоте алгоритмическая идея: не выкидывать детекции с низким порогом уверенности, которые обычно отсекаются алгоритмом NMS. Система вытаскивает их со дна и пытается сматчить с уже существующими активными треками.

def match_bytetrack(tracks, detections):
    # Уверенные детекции матчатся первыми
    high_det = [d for d in detections if d.score > 0.6]
    matches_a, un_tracks, _ = match_iou(tracks, high_det, iou_thresh=0.2)
    
    # Спасаем потерянные треки детекциями с низким скором
    low_det = [d for d in detections if 0.1 < d.score <= 0.6]
    matches_b, _, _ = match_iou(un_tracks, low_det, iou_thresh=0.5)
    
    return matches_a + matches_b

Это работает исключительно быстро. Почему? Потому что это снова чистая геометрия и координаты. Никаких медленных эмбеддингов.

Но почему тогда айдишники скачут как ненормальные? Откуда берутся эти фантомные покупатели в аналитике? Окклюзии и банальное дрожание рамок от детектора. Если человек скрылся за массивной колонной на три секунды, фильтр состояний теряет актуальное предсказание. Для ByteTrack без модуля Re-ID этот человек после выхода из-за препятствия — абсолютно чистый лист. Система выдает новый ID.

Когда мы в MoranaLabs катили аналитику сложных траекторий для крупного торгового центра, мы поначалу поверили агрессивным порогам ByteTrack. В плотной толпе у эскалатора система начала плодить фрагментированные треки с такой скоростью, что счетчик уникальных посетителей выкручивался на тысячи. Пришлось выкинуть розовые очки и переписывать логику ассоциации.


Трекинг объектов в видеопотоке: BoT-SORT и цена за метрики

«Значит, все-таки возвращаемся к тяжелым моделям экстракции признаков?» — вздыхает скептик. Да, но теперь с умом.

BoT-SORT объединяет лучшие практики индустрии: компенсацию движения камеры, прокачанный алгоритм Калмана и опциональный Re-ID модуль. Если камера на столбе дрожит от ветра, глобальная компенсация движения спасает IoU-матчинг, корректируя смещение всего фона. Если злоумышленник зашел за припаркованное авто, эмбеддинги позволяют склеить разорванный трек на выходе.

Но это всегда честный трейд-офф. Включаете Re-ID модель — неминуемо режете FPS. Пытаетесь затюнить пороги косинусного расстояния под конкретную сцену — тратите долгие дни на подбор гиперпараметров под меняющееся освещение и углы обзора. На плотной толпе, где люди перекрыты на восемьдесят процентов, поплывет даже мощный BoT-SORT. Алгоритм просто не соберет достаточно полезных фичей для сравнения: эмбеддинг красной куртки ничем не поможет, если в кадре торчит только плечо или голова. Сличать не с чем. Срабатывает порог отсечения, и мы снова получаем разрыв.

«Но на демо-роликах на GitHub все трекается монолитно!» — это последний аргумент защиты.

Демо-ролики рендерят для инвесторов и сбора звездочек в репозиториях. Вы должны верить только метрикам. Показатель MOTA продемонстрирует вам общую температуру по палате. Эта метрика суммирует ложные срабатывания, пропуски и переключения идентификаторов, а затем делит на общее число объектов. Проблема в том, что MOTA в основном отражает качество самого детектора. У вас может быть роскошный показатель под восемьдесят процентов, при этом система сгенерирует десятки коротких, оборванных треков на одного человека, идущего по коридору.

Для ритейл-аналитики, где критически важен полный путь клиента от двери до кассовой зоны, всегда смотрите на IDF1. Эта метрика вычисляет гармоническое среднее между точностью и полнотой идентификации. Она замеряет, какую долю времени трекер правильно и непрерывно присваивал один и тот же идентификатор истинному объекту. Если IDF1 падает ниже шестидесяти процентов — вы не трекаете толпу, вы просто генерируете случайные числа в базе данных.

Стройте пайплайн от задачи. Измеряйте жестко. На глаз все всегда выглядит приемлемо, ровно до тех пор, пока бизнес не попытается принять финансовое решение на основе этих галлюцинирующих цифр.

  • #BoT-SORT
  • #ByteTrack
  • #Computer Vision
  • #Object Tracking
ПоделитьсяTelegramX
рассылка

Новые статьи — на почту

Лонгриды про ML в проде, edge и компьютерное зрение — сразу после выхода.

Канал в Telegram: morana.log

Без спама. Нажимая «Подписаться», соглашаетесь с обработкой персональных данных

бесплатный pdf-гайд

Edge AI или облако: когда тащить нейросеть на железо

Признаки, фреймворк выбора и прикидка экономии — короткий PDF-гайд на почту.

PDF · 5 страниц · без спама. Нажимая «Получить», соглашаетесь с обработкой персональных данных

Читать дальше
— заявка

Опишите задачу  ответим как инженеры. 

Оставьте имя и Telegram — остальное обсудим. Без брифов на 40 слайдов и звонков по три раза.

Отвечаем за пару часовотвечает инженер, а не отдел продажNDA по запросу

Сюда напишем — это быстрее всего

Или сразу написать в Telegram

Без спама и звонков-роботов. Нажимая кнопку, вы соглашаетесь с политикой конфиденциальности и обработкой персональных данных.