-
Notifications
You must be signed in to change notification settings - Fork 651
Multitarget tracker algorithm
Multitarget tracker является библиотекой реализованных на C++ алгоритмов, предназначенных для построения программ сопровождения множественных объектов.
Multitarget tracker включает в себя следующие группы блоков:
- Детекторы
- Ассоциаторы треков
- Фильтры
- Утилиты (визуализация, триггеры, ... )
Крупноблочно, типовой трекер включает в свой состав:
- детектор, например YOLO. На входе видео, на выходе вектор координат объектов;
- ассоциатор треков, например венгерский алгоритм. На входе вектор координат, на выходе вектор треков;
- фильтр, например фильтр Калмана. На входе вектор треков, на выходе вектор треков после фильтрации;
- методы управления треками (создание, удаление, визуализация ...).
Алгоритм сопровождения объектов (multitarget tracking, multiple objects tracking) представляет собой комбинацию алгоритмов решающих задачу пространственно-временной ассоциации обнаруженных на видео объектов. Обнаружение объектов решается каким-либо детектором произвольной природы: детектор движения, HOG+SVM, HAAR+AdaBoost, глубокие нейронные сети (DNN) и другие. Результатом работы детектора является список объектов, найденных на текущем кадре. Каждый найденный объект (CRegion) характеризуется следующими параметрами:
- описывающий прямоугольник (cv::Rect m_brect или cv::RotatedRect m_rrect);
- тип объекта (std::string m_type);
- коэффициент доверия или вероятность правильного распознавания (float m_confidence).
За сопровождение объектов отвечает класс Ctracker, реализующий в себе весь необходимый функционал. Схематично принцип его работы можно описать так:
- Для впервые задетектированных объектов создаются трэки (CTrack) — структуры, содержащие в себе модель движения объекта, его траекторию и другие характеристики.
- После детектирования объектов на каждом последующем кадре происходит решение задачи ассоциации — сопоставления ранее найденных трэков с задетектированными объектами. При создании матрицы расстояний между объектами и трэками используется не последнее положение трэка, а предсказанное с помощью фильтра Калмана.
- Если для трэка был найден соответствующий объект, то его состояние обновляется: фильтр Калмана корретирует модель движения, запоминаются новые размеры и, при необходимости, визуальные характеристики объекта.
- Если для трэка не нашлось подходящего объекта, то, в зависимости от настроек, он либо обновляет своё состояние с помощью предсказания фильтра Калмана, либо создаёт VOT – visual objects tracker на основе последнего найденного объекта и доискивает себя на кадре сам.
- Если трэк не ассоциировался с объектами заданный интервал времени или вышел за пределы кадра, то он удаляется.