Введение
С тех пор, как нейронные сети начали набирать популярность, большинство инженеров стали решать многие из задач ПО в области Public Safety методами deep learning. Несмотря на то что у нейросетей нет конкурентов в вопросах обнаружения (detection) и распознавания (identification) объектов, всё же они не могут похвастаться способностью анализировать и рассуждать, а лишь создают закономерности, которые не всегда можно понять или интерпретировать.
Мы придерживаемся такого мнения: для трекинга нескольких объектов более эффективными будут интерпретируемые и предсказуемые подходы, такие как, например, метод вероятностной ассоциации данных (probabilistic data association approach).
О точности трекинга и преимуществах выбранного нами подхода наглядно (подробнее в посте):




Сравнение популярного трекера Re3 (слева) и нашего компонента AcurusTrack (справа)
Дисклеймер: этот пост не претендует на почетный статус “средства от всех бед в Public Safety Software”. Мы также не заявляем, что изобрели что-либо новое. Мы лишь приводим примеры некоторых популярных подходов к решению задачи мультитрекинга, анализируем их и предлагаем собственную практическую реализацию.
Целиком проект лежит на GitHub.
О задаче трекинга
В области Public Safety важно знать, где и какие объекты находятся в каждый момент исследуемого видео. Классические алгоритмы распознавания не всегда могут обеспечить нас необходимой информацией (в силу плохих условий съемки, недостаточной освещенности, отсутствия объекта идентификации и т.п.). Классические же алгоритмы трекинга и даже трекеры, основанные на нейронных сетях, не справляются с задачей.
Основными сложностями, с которым сталкиваются алгоритмы трекинга, являются окклюзии (трекер легко может "соскочить" на другой объект во время окклюзии или же сбиться), изменение масштаба, поворот объекта, изменение уровня освещения, размытость и т.д.
Классические подходы
Большинство имеющихся алгоритмов трекинга рассматривает задачу трекинга единственного объекта на видео, снятом статической камерой. В случае трекинга сразу нескольких объектов на видео, снятом движущейся камерой, появляются дополнительные трудности.
Существует множество алгоритмов трекинга, таких как:
- трекеры, основанные на корелляционных фильтрах (такой, например, используется в популярной библиотеке dlib);
- трекеры, работающие с графами (первый, второй);
- трекеры, использующие нейросети — один из самых эффективных (исходя из нашего опыта).
Подробное сравнение корреляционных подходов и трекера, основанного на рекуррентных нейронных сетях, вы можете найти в этой статье.
Тем не менее, все вышеперечисленные трекеры (кроме нейросетевых) практически не справляются с масштабированием, окклюзиями, поворотом объектов. А даже если справляются — не всегда показывают удовлетворительные результаты. Алгоритмы на основе нейронных сетей, в основном, решают задачу отслеживания отдельного объекта, не уделяя внимания взаимодействию объектов и другим возможным вариантам.
Постановка задачи
Рассмотрим задачу трекинга N объектов на видео, снятом движущейся камерой. Обозначим рассматриваемые кадры F_1, ..., F_N. На каждом из этих фреймов есть детекшны (detections) D_1,...,D_k, k<=N. Задачей является присваивание каждом детекшну индекса i=1,...,N, то есть присваивание некоторой идентификации (id).
Прежде всего, мы переходим от отдельных детекшнов к коротким треклетам, предварительно обработав имеющуюся мету, основываясь на некоторой метрике схожести. Например, в случае работы с лицами, это может быть iou — intersection over union — детекшенов на k и k-1 фреймах; в случае работы с телом человека это может быть сумма разностей координат соответствующих частей тела. Таким образом, мы получаем предварительную инициализацию, представление, с которым и будем дальше работать.
Вспомогательная визуализация

Вспомогательная визуализация
Прежде чем описать используемый алгоритм, рассмотрим введенную нами визуализацию, призванную облегчить тестирование алгоритма, дебаг, и анализ его работы. Мы хотим внедрить в рассмотрение временную зависимость, для чего отрисовываем координаты детекшнов следующим образом: на оси OY откладываем y координаты объектов, а на оси OХ — координаты x, но с учетом номера кадра, который мы рассматриваем. Таким образом, объект с координатами (x, y), рассматриваемый на i-м кадре, будет отображен на рисунке в точке (i∗img_w+x, y), где img_w — ширина изображения.

Примеры визуализаций, получаемых на произвольных видео (на оси OX указаны номера фреймов)
Для повышения качества работы любых алгоритмов трекинга на видео, снятом движущейся камерой, мы используем компонент перехода к неподвижной системе координат EvenVizion, про который мы писали ранее.
После перехода к неподвижным координатам перед нами стоит классическая задача мультитрекинга. Особо привлекательными методами мы считаем представителе�� такого направления, как ассоциация данных (data association).
Вдохновением для нас являлась статья, описывающая алгоритм трекинга, основанный на методе Монте-Карло для марковских цепей (MCMC).
Для довольно простых случаев хорошо отрабатывает текущая (упрощенная) версия. Если же вы заинтересованы в использовании полной версии, не стесняйтесь написать нам.
Основные преимущества выбранного нами подхода:
- мы встраиваем знания о качестве вспомогательных компонентов глубокого обучения, используемых для получения меты, через параметры;
- мы работаем с объектами произвольной природы, не используя идентификацию, поэтому не привязаны, например, к лицам. Мы можем работать с объектами, сильно схожими внешне (этот случай при наличии окклюзий не покрывается классическими алгоритмами трекинга);
- в нашем подходе используется анализ реалистичности движений объектов, основанный на физической интерпретации движения (с помощью фильтра Калмана: один, два);
- предоставляется возможность параллелизации процессинга видео;
- алгоритм обеспечивает возможность использования cpu после получения метаданных.
Соберем последовательность шагов, описанных выше:
- для начала получаем детекшны на имеющемся видео;
- затем переходим к неподвижной системе координат с помощью компонента EvenVizion;
- после этого производим предварительную обработку видео для детекции объектов;
- наконец, запускаем сам алгоритм.
Сценарии применения AcurusTrack
Мы выделили следующие варианты использования данного компонента, явно показывающие его преимущества и возможности:
- сложное движение нескольких объектов, перекрывающих друг друга

- люди в медицинских масках

- люди в одинаковой одежде с полностью закрытыми масками лицами

- люди в униформе с закрытыми лицами

- анализ посетителей в людных местах

Возможные улучшения
Для последующих версий AcurusTrack мы видим применение таких улучшений, как:
- обработка ситуаций долгого исчезновения объекта из кадра: в данном проекте никак не учитывается долгосрочная связка, здесь нужно использовать точечную идентификацию;
- обработка сложных типов движений с помощью замены фильтра Калмана.
Выводы
Сейчас большую роль в развитии ПО в области общественной безопасности играют технологии computer vision. Основными задачами такого ПО являются распознавание и слежение за объектами, последняя из которых представляется более сложной, т.к. условия съемки часто бывают неблагоприятными.
Компонент AcurusTrack нацелен на устранение этих сложностей, делая одновременный трекинг сразу многих объектов максимально точным и предсказуемым, при этом не полагаясь исключительно на нейросети.
Это достигается благодаря использованию ассоциации данных, вероятностного ИИ, а также физической модели движений объекта (присущих объекту в реальном мире).
Кроме того, вы можете сами изучить и запустить наш проект — он находится в открытом доступе на GitHub.