Самообучающийся трекер объектов: как отслеживать цель в изменчивых условиях сцены
Специалисты по компьютерному зрению не один десяток лет бьются над трекингом объектов. Они перепробовали многое: от старой-доброй оценки движения оптическим потоком до сетей-трансформеров.
Есть один подход к трекингу, широко известный на западе, но о котором мало пишут по-русски: Incremental Visual Tracker (IVT). Это трекер объектов на основе модифицированного метода главных компонент: он самообучается на ходу и адаптируется к изменчивым условиям.
Давайте исследуем физиологию этого трекера, чем он интересен и где его можно применить - а затем изучим проблемы его реализации и нюансы использования. Под катом ссылка на репозиторий и много математики.
Всем, кто интересуется исключительно реализацией, предъявляю C++-код. Есть также прототип на Python. Лицензии нету, делать можно что угодно.
О трекинге вкратце
Трекинг - это задача отслеживания объекта в сцене. Решается она путем предсказания местоположения объекта на последующем кадре с учетом динамики его движения. Трекинг применяется во многих задачах видеоаналитики среди которых наиболее выделяются подсчет посетителей, анализ поведения (например, животных на ферме или мышей в лабиринте), анализ траектории авто для вычисления средней скорости, отслеживание лица для определения лучшего кадра, подходящего для идентификации. Всего сценариев использования, естественно, гораздо больше.
Для интересующихся данной темой рекомендую подробную статью с примерами.
IVT трекер относится к классу так называемых appearance-based трекеров. Идея appearance-based подхода состоит в том, чтобы создать или обучить признаковое описание целевого объекта на начальном кадре и отслеживать его перемещение с помощью этого описания на последующих кадрах. Например, мы можем представить объект цветовой гистограммой и в дальнейшем искать регион с наиболее похожим цветовым распределением. Или обучить нейросеть представлять объект вектором эмбеддингов в евклидовом пространстве с тем свойством, что похожие объекты в этом пространстве будут находиться рядом, в то время как непохожие объекты далеко. Это был намек на DeepSORT. Альтернативный подход к трекингу, неформально - detection-based, не предполагает использования “внешнего вида” объекта и основывается исключительно на отслеживании его координат. Преимущество же кодирования “внешнего вида” объекта заключается в том, что эта информация вкупе с координатами объекта улучшает качество трекинга. Визуально разницу между detection-моделью и appearance-моделью можно увидеть на видео ниже.
Далее мы рассмотрим все составляющие IVT трекера, сперва по отдельности, затем соединив все вместе.
Компактное представление объекта
Вместо того, чтобы работать с изображением объекта напрямую, как с набором независимых пикселей, разумнее описать его неким набором признаков, характеризующих этот объект. Так мы уменьшим размерность оставив только самую релевантную информацию об объекте. В качестве признакового описания объекта может быть использовано не только цветовое распределение, пример которого был приведен выше, но и его контур, текстура или более абстрактные признаки, такие как вектор эмбеддингов или базис главных компонент.
Мы будем представлять объект в (под)пространстве малой размерности - собственном базисе. Он же базис главных компонент, он же eigenbasis. Этот базис содержит бóльшую часть всей релевантной информации об объекте несмотря на то, что его размерность гораздо ниже исходной. Моделировать этот базис мы будем с помощью метода главных компонент (principal component analysis) используя первые
Кратко напомню, что суть метода главных компонент состоит в том, чтобы найти для исходных данных такую систему координатных осей (главных компонент), которая давала бы наибольшую дисперсию расстояний между проекциями на эту систему. Проецируя исходный вектор данных
На рисунках ниже приведены примеры уменьшения размерности.
Рис. 1. Визуализация уменьшения размерности в двумерном пространстве. Исходные данные представляют собой массив векторов
Весь аппарат, проиллюстрированный на рисунках 1 и 2 для двумерного случая будет также справедлив для пространства любой размерности. Так как исходными данными в нашем случае является одноканальное изображение объекта
Ранее мы говорили, что appearance-based подход предполагает отслеживание объекта на последующих кадрах с помощью признакового описания объекта. Каким же образом признаковое описание в пространстве главных компонент может быть использовано нами для отслеживания объекта? Механизм для этого прост - мы должны найти участок кадра
Если рассматривать собственный базис через вероятностный подход, то мы можем определить вероятность того, что объект принадлежит данному базису. Эта вероятность обратно пропорциональна расстоянию от спроецированного объекта до центра базиса
Чтобы лучше понять, как это будет выглядеть, попробуем представить проекцию на базис в качестве корреляционной функции
Задача трекинга в общем виде сложна и подвержена многим ошибкам связанных как с факторами окружения, так и с поведением самого объекта. К первым относятся изменение освещения, движение камеры и всевозможные перекрытия цели другими объектами. Ко вторым относятся изменение позиции и очертания объекта. Для того, чтобы устранить влияние этих факторов или минимизировать их последствия наше признаковое описание (базис главных компонент) не должно быть постоянным, а должно уметь адаптироваться к изменениям. И IVT трекер умеет это делать.
Трюк с адаптацией базиса является ключевой особенностью трекера, что, в свое время, позволило ему выделиться среди других трекеров. Основной вклад авторов данного трекера состоит в том, что они разработали эффективную процедуру обновления базиса главных компонент по мере накопления изменений в кадре. Эту процедуру они назвали Incremental PCA. Таким образом, вместо однократного обучения базиса в начале трекинга мы способны периодически обновлять этот базис по мере движения.
Инкрементное обучение - эффективное обновление базиса главных компонент
Здесь и в дальнейшем будут использованы только основные математические выкладки, необходимые для понимания происходящего. Все, кто интересуются теорией и доказательствами, могут ознакомиться с ними в оригинальной статье [1].
Задача обновления базиса описывается следующим образом. Дана матрица собственных векторов
Тривиальное решение с переобучением базиса при каждом поступлении новых данных или даже при при поступлении новых
Предлагаемый авторами метод инкрементного обучения/обновления собственного базиса, основанный на последовательном Методе Карунена-Лоэва (Sequential Karhunen-Loeve) [4], умеет обновлять базис используя только последние
Итак, мы поняли, что целевой объект будет представляться через базис главных компонент и что это базис будет периодически обновляться для того, чтобы адаптироваться к изменениям. Перейдем теперь к формальной постановки задачи.
Формальная постановка задачи трекинга
Мы будем рассматривать задачу трекинга в рамках стохастического марковского процесса, лежащего в основе движения объекта. Будем считать, что мы владеем априорным знанием того, где находится объект в начальном кадре. Это априорное знание можно получить с помощью нейросетевого детектора. В процессе движения мы наблюдаем данные
Положение объекта в момент времени
Наблюдаемой величиной
Графическая модель марковского процесса проиллюстрирована ниже.
Итак, нам дано начальное положение объекта
Опуская лишние зависимости (пользуясь марковским свойством) и отсекая нормировочный коэффициент получаем
что искомая вероятность пропорциональна произведению двух множителей. Первый множитель это модель движения или “где будет находиться объект в момент времени
Теперь мы обладаем знанием о местоположении объекта в момент времени
Все готово к тому, чтобы записать общую рекурсивную формулу для произвольного шага
Можно заметить, насколько элегантно в краткой формуле записывается решение нашей задачи. По сути, в выражении
Модель движения (dynamical model)
Модель движения задает закон, которому подчиняется движение объекта, то есть переход
Геометрически, переход от предыдущего состояния в следующий будет образовывать облако четырехугольников вокруг предыдущего состояния. Новое местоположение объекта, согласно нашей модели, должно оказаться в одном из четырехугольников. В каком именно - решит модель наблюдения.
Модель наблюдения (observation model)
Каждое новое наблюдение
В этом выражении
Наглядно расстояния
Рис. 7. Расстояние, пропорциональное
Полезной находкой авторов оказалось использование робастной функции
Сэмплирование - как вычислить произвольное распределение
Единственное, на чем мы пока не заостряли внимания, это на том, какую форму должно иметь распределение
Поскольку теперь распределение
Алгоритм CONDENSATION использует технику сэмплирования с учетом динамики движения объекта для генерации выборки из
Упрощенно, схему CONDENSATION можно представить в следующем виде:
Генерируем случайную выборку
из распределения . Каждому элементу выборки присваиваем вес
, равный . Нормализуем выборку
для удовлетворения условия . Вычисляем необходимые статистики, например
мат. ожидание
моменты
наиболее вероятное состояние объекта
Нам интересен последний случай. Данные статистики асимптотически несмещенные.
Переходим к следующему такту
и повторяем процедуру с первого шага принимая за (см. первый шаг) выборку .
Таким образом, несмотря на то, что мы не в состоянии численно выразить распределение
Соединяем все вместе
Наконец, мы владеем всей необходимой информацией и можем записать полную схему работы трекера:
Используя детектор объектов (нейросетевой или статистический, не имеет значения) определяем местоположение объекта на начальном кадре
. Задаем всем частицам значение начальной позиции объекта с равным весом . Задаем пустой базис
со средним значением равным изображению объекта на начальном кадре. Двигаемся к следующему кадру
. Генерируем новые частицы/возможные местоположения в соответствии с динамической моделью . Для каждой частицы
извлекаем соответствующий кроп из текущего кадра и вычисляем ее вес в соответствии с моделью наблюдения . Сохраняем частицу с наибольшим весом. После того, как будет накоплено
кадров осуществляем инкрементное обучение базиса и среднего . Возвращаемся к шагу 3.
Особенности реализации и эксперименты
Для тестирования трекера была разработана демка на C++, в основе которой лежит код Matlab от авторов оригинальной статьи.
В реальных задачах мы сталкиваемся с физическими ограничениями. Во-первых, мы ограничены железом, ввиду чего мы не можем аппроксимировать распределение
Для сокращения времени вычислений мы не будем использовать параметры поворота и сдвига для состояния
Имея в качестве начальной конфигурации трекера размер окна 32 на 32 мы получаем от 125 до 8 кадров в секунду на стареньком Intel Core i7 4700HQ 2.4 Мгц при количестве частиц от 100 до 1000 соответственно. Другие параметры не сильно сказываются на производительности. Подробный тренд представлен на рисунках ниже.
На видео ниже приведены некоторые примеры работы трекера на сценах различной сложности, как удачные так и неудачные.
Стоит отметить, что, конечно, векторы коэффициентов в базисе главных компонент не являются настолько выразительными признаками как признаки аппроксимированные глубокой нейросетью. При тестировании трекера это дает о себе знать. Например, нередко возникает ситуация когда состояние может “перескочить” на другой объект, посчитав его за целевой (см. отслеживание северного оленя на видео выше). Другая проблема связана с тем, что объекты с примитивной текстурой, без ярко выраженных визуальных признаков, плохо моделируются базисом. Следствием этого является то, что модель наблюдения не может дать особого предпочтения для какой-то из гипотез и состояние не может зацепиться за конкретный объект, а начинает случайно блуждать по сцене (см. отслеживание Усейна Болта на видео выше).
Так же, что характерно для всех аналогичных трекеров того времени, для работы в конкретных условиях его нужно настраивать. Но по опыту можно сказать, что настройки по умолчанию (их можно подсмотреть в репозитории) покрывают бóльшую часть сценариев и всю настройку можно свести к подгонке модели движения.
Подводя практический итог можно сказать, что трекер хорошо справляется с отслеживанием объектов сложной текстуры на краткосрочных и среднесрочных треках, таких как лица, транспортные средства. При наблюдении за объектом на длинных временных дистанциях велик риск упустить истинное положение объекта и начать отслеживать не то, что нужно. При частичном перекрытии объекта трекер способен удерживать позицию, но при сильном перекрытии теряет объект из виду.
Несомненным преимуществом трекера является то, что нам не обязательно иметь предобученный базис, как этого требует, например, DeepSORT, хотя никто не запрещает предварительно обучить базис на целевом объекте и использовать его в качестве начального, вместо пустого (см. шаг 2 общего алгоритма).
Заключение
Несмотря на то, что этот трекер уже не современный и с появлением нейросетевых моделей постепенно отходит на второй план, это все же интересный пример использования метода главных компонент, который полезно рассмотреть как минимум в образовательных целях и как максимум применить его в тех случаях, когда нейросетевая обработка слишком дорога или когда требуется высокая частота обработки кадров. Идею же инкрементного обучения можно подхватить при реализации других CV-алгоритмов.
Надеюсь материал оказался не слишком нагруженным и каждый нашел в нем для себя что-то полезное.
Ссылки
D. Ross, J. Lim, R. S. Lin, M. H. Yang. Incremental Learning for Robust Visual Tracking. 2008.
M. J. Black and A. D. Jepson. Eigentracking: Robust matching and tracking of articulated objects using view-based representation. 1996.
M. Isard and A. Blake. Contour tracking by stochastic propagation of conditional density. 1996.
A. Levy and M. Lindenbaum. Sequential Karhunen-Loeve basis extraction and its application to images. 2000.