Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Введение
С тех пор, как нейронные сети начали набирать популярность, большинство инженеров стали решать многие из задач ПО в области 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.