Перейти к содержимому
Compvision.ru

Recommended Posts

Спасибо!

В обоих программах указан минимальный размер детектируемого объекта. Видимо, он больше дальнего нарушителя.

Multitarget-tracker использует для трекинга фильтр Кальмана, который надо настраивать, чтобы он лучше "прилипал" к объекту.

У feintrack'а стоит ещё период отсеивания ложных сработок. Т.е. если объект детектировался менее какого-то времени, то он не выводится. Похоже, что именно поэтому первый нарушитель определился так поздно.

У обоих детекторов много настроек, которые касаются конкретных ситуаций. Видимо, их надо вынески в файл-конфигурации для удобства задания параметров.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Понемногу развивается Multitarget-tracker.

Добавляются разные параметры и алгоритмы как трекинга, так и вычитания фона. И встаёт вопрос о создании полноценных тестов именно для детектора движения, как целого. Такие хорошие тесты есть у bgslibrary для сегментации, есть для одиночного трекинга - VOT Challenge. На них удобно ориентироваться и проверять свои алгоритмы.

А есть что-нибудь для детекторов движения?

Я так понимаю, что нужен датасет из видео и аннотация в виде треков объектов на каждом из них. И код для тестирования.

Можно для начала было бы написать к тем же PETS скрипт на Питоне, который будет запускать Multitarget-tracker. Тот в свою очередь сохранять свои треки, а скрипт сравнивать, анализировать и делать отчёт. Но меня как-то ломает этим заниматься. Кто-нибудь знает готовые решения?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

VOTR имеет скрипт на питоне, правда там для трекинга одной цели, как я понимаю.

Вот для нескольких целей: https://github.com/glisanti/CLEAR-MOT

И чедендж: https://motchallenge.net

 

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

О, спасибо!

Похоже, что MOT challenge как раз то, что нужно. Попробую интегрироваться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ещё анонс новинок в Multitarget-tracker.

Раньше он был отличной иллюстрацией работы трекинга с помощью Венгерского алгоритма и фильтра Кальмана. Работа в качестве детектора движения была больше иллюстрацией возможностей трекинга. Теперь он становится всё более полноценным детектором.

1. Алгоритмы вычитания фона: встроенный Vibe от BeS, MOG и GMG из opencv_contrib.

2. Матчинг треков и объектов: Венгерский алгоритм или алгоритм поиска паросочетаний в двудольном графе. У Венгерского алгоритма сложность O(n^3), поэтому его есть смысл использовать только при числе объектов не более 200-300.

3. Фильтр Кальмана по координатам или по координатам и размеру объектов.

4. Сомнительная часть: можно использовать локальный трекинг на основе потока Лукаса-Канаде. Он дополняет перечисленные выше алгоритмы, работает на соседних кадрах, позволяя исправлять ошибки работы фильтра Кальмана или неправильное назначение при матчинге. Траектории становятся более гладкими, но замедляется работа.

Вот такой получился конструктор.

 

Теперь текущие проблемы и направления развития.

1. Альтернатива фильтру Кальмана, линейному во всяком случае. У меня есть несколько достаточно критических кейсов, когда линейности недостаточно:

- Летит в поле зрения птица (практически материальная точка), её траектория близка к прямой, но представляет собой небольшие волны: вверх-вниз-вверх-вниз. Залетает она за дерево, фильтр Кальмана ведёт её по прямой, соответствующей последней волне. Если повезёт, то она вылетит из-за дерева в правильной точке и трекер её поймает. Не повезёт - птица летит всё также прямо, а фильтр Кальмана, потерявший цель на гребне последней волны, уйдёт в небо, птица не затрекается.

- Едет автомобиль по прямой, потом начинает поворачивать по плавной дуге, посередине пропадает на секунду, фильтр Кальмана уходит по касательной, а машина продолжает поворачивать по дуге.

Есть ли алгоритмы/модели, которые позволяют строить сложные нелинейные траектории? Например, запомнить волновой характер движения птицы и воспроизвести его несколько секунд, когда она скрывается за деревом. Также понять, что машина стала поворачивать, понять, что прямая закончилась и началось движение по дуге с каким-то радиусом. Тут фокус в том, что я не требую определить начало манёвра, что сложно. Мне надо строить модель движения, когда оно уже некоторое время продолжается.

2. Распознавание объекта по его траектории движения.

Тут проблематика такого плана. Объекты очень редко детектятся целиком, часто не выделяются ноги-руки пешеходов, автомобили тоже кусочками или вообще детектируются не они, а их тень на асфальте (грязный серый автомобиль на сером асфальте, да ещё и в плохую погоду - сложная вещь для вычитания фона). Хочется делать следующее: когда камера с высоты снимает городскую панораму. Опустим саму картинку и возьмём исключительно треки объектов. Можно ли, скажем, по 2-5 секундам наблюдения определить, что это трек автомобиля, человека или птица полетела? Казалось бы надо собрать датасет с траекториями, обучить классификатор и распознавать. Но какой классификатор, какие признаки? Для меня эта задача новая, не очень понятно в какую сторону копать.

HMM, которые используют в распознавании речи? Или трейдинговые алгоритмы? Временные ряды? Буду признателен за пинок в правильную сторону.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
4 hours ago, Nuzhny said:

HMM, которые используют в распознавании речи?

Вроде-бы HMM уже "того"...deep learning их сместил. Может LSTM'ами попробовать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Нелинейный Кальман, это фильтр частиц. А вообще с птицами случай сложный. Если одна птица влетела в дерево, а другая вылетела, или две ? Может тут и не нужно держать трек ? Разпознавалку птиц можно сделать по скорости изменения конфигурации объекта, то есть птица машет крыльями меняется ее силуэт, меняется он довольно часто (зависит от вида птицы конечно), можно фиксировать флюктуации яркости объекта (изменение гистограммы яркостей во времени) .

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 hour ago, BeS said:

Вроде-бы HMM уже "того"...deep learning их сместил. Может LSTM'ами попробовать?

LSTM - это хорошее направление. Случайно не знаешь пару подходящих статей, с которых можно начать?

33 minutes ago, Smorodov said:

Нелинейный Кальман, это фильтр частиц. А вообще с птицами случай сложный. Если одна птица влетела в дерево, а другая вылетела, или две ? Может тут и не нужно держать трек ? Разпознавалку птиц можно сделать по скорости изменения конфигурации объекта, то есть птица машет крыльями меняется ее силуэт, меняется он довольно часто (зависит от вида птицы конечно), можно фиксировать флюктуации яркости объекта (изменение гистограммы яркостей во времени) .

Фильтр частиц, на первый взгляд, не очень подходит. В чём плюс Кальмана - ему не важен сам объект, он хранит исключительно модель движения. Поэтому использовать его легко и просто. А фильтр частиц уже должен знать, как сравнивать объект с изображением на следующем кадре. Разве нет? И в этом случае весь реалтайм сразу исчезнет: когда 200 объектов на кадре, скажем, 4К начнут применять свой particle filter. Мне бы получить что-то типа уравнения.

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

Например, в этой статье: https://habrahabr.ru/company/ods/blog/323730/

Последние разделы: Визуализация и Сравнение с ARIMA моделью. Там строятся модели, которая на пару месяцев вперёд предсказывает данные. Не уверен, что они подойдут для трекинга: сезонность, день/ночь и всё такое - этого в трекинге нет. Может, есть аналогичный инструмент для построения модели движения наблюдаемых объектов?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Можно посмотреть здесь: http://programming-by-demonstration.org/sourcecodes.php, здесь не напрямую конечно, но в качестве источника вдохновения может подойти.

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
47 minutes ago, Smorodov said:

Можно посмотреть здесь: http://programming-by-demonstration.org/sourcecodes.php, здесь не напрямую конечно, но в качестве источника вдохновения может подойти.

О, похоже на искомое направление.

P.S. Кстати, только что обнаружил OpenGM - такое ощущение, что на его базе можно было сделать паросочетания лучше. Но пока меня не тянет снова в это влезать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Про фильтры Кальмана:

1. Обнаружил в opencv_contrib Unscented Kalman filter и Augmented Unscented Kalman filter. У кого-нибудь есть опыт использования?

2. Также существует Square-root cubature Kalman filter (SCKF) - этого зверя кто-нибудь пробовал использовать?

Приветствуются отзывы, ссылки на проекты - всё что угодно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Продолжу задавать вопросы.

Есть такая штука, как Gaussian Mixture Probability Hypothesis Density for Visual People Tracking. Даже исходники есть: https://github.com/blefaudeux/gmphd

Кто-нибудь применял или имеет мнение об этой штуке? Как она для трекинга в детекторе движения? Стоит смотреть и разбираться?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Похоже на это:

 

 

и это, судя по картинками в конце pdf-ки это именно оно и есть.

http://www.robots.ox.ac.uk/ActiveVision/Publications/benfold_reid_cvpr2011/benfold_reid_cvpr2011.html

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

То есть разобраться и потестить стоит? Эх, ладно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я как то запускал исходники этого метода, на МАТЛАБ по моему, что то там далеко от реалтайма то было, насколько помню.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Еще похожий трекер: http://www.milanton.de/dctracking/ 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Трекеры на Малабе я точно пробовать не буду - слишком долго переписывать. Могу какие-нибудь исходники на С++ заинтегрировать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
On 09.06.2017 at 5:55 PM, Nuzhny said:

Есть такая штука, как Gaussian Mixture Probability Hypothesis Density for Visual People Tracking. Даже исходники есть: https://github.com/blefaudeux/gmphd

Что-то не очень понятно, как конкретно применять эту штуку. В связке Детектор-Венгерский-Кальман она какое место занимает? Замена связки Венгерский-Кальман? Вроде, нет. Просто Кальману? Тоже как-то не очень. В ветке gmphd добавил функцию-пример GMPHDTracker, в которой к детектору прикрутил тестовый фильтр из пример и.. как-то непонятно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Мне кажется это и есть трекер,

Цитата
GMPHD filter can track the number and positions at the most time

На сколько я понимаю, этот GMPHD должен делать примерно то же что и фильтр Кальмана с венгерским алгоритмом. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Автор кода GM-PHD мне ответил:

Quote

Hi Sergey,
sorry for the delay, super busy right now. GMPHD and Hungrian+Kalman do not serve the same purpose if I'm not mistaken, since GMPHD does not handle the association problem. They're complimentary though, because GMPHD handles probabilistic noise (which is not the case for Hungrian, if I'm not mistaken again). In terms of questions that the algorithms answer, I would describe them (+KF), as:

  • my detectors give noisy measurements, not just in terms of metrics but also detection rate, which means that I have false positive and misses. GMPHD will try to solve the question : "how many targets do I really have there, and where are they, given those noisy inputs ?" It doesn't say how they associate with a previous measurement though, but it handles targets disappearing momentarily, targets spawning new targets, and false detections
  • I get reasonable detection over time, but don't know how to match them with another. Then my understanding is that it's something that Hungrian will solve
  • I get noisy measurements, in terms of metrics, for the same random variable. What's its real trajectory, and foreseeable future ? That's what the Kalman solves

In a nutshell (I don't have too much time unfortunately), it looks like GMPHD could be useful indeed, as a first step in your pipeline to try to clean up false detections, and the rest of the pipeline can stay the same

То есть GM-PHD не заменяет Кальмана+Венгерский, а используется перед ними, чтобы убрать лишний шум (лишние регионы после вычитания фона). Попробую так его и заиспользовать.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

И как результат?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Непонятный результат.

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

Возможно, я неправильно выставил какие-то значения или ещё что-то. Мне эта тема ещё интересна, но сейчас времени совсем нет. Если интересно посмотреть на код, то он у меня лежит вот в этой ветке: пример в функции GMPHDTracker.

Чувствую, что надо набрать видео с ground truth и проводить полноценное тестирование, а не на глаз, как сейчас.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Продолжу рассказ. Собрать всё получилось, но, как мне показалось, на практике применить такую штуку не так и просто. И вряд ли сильно полезно.

Вот видео со снегом

Видно плохо, но видно, что снежинки могут "сбить" bounding box (а по факту модель из Гауссианов) с автомобиля или пешехода. Когда два пешехода или автомобиля рядом, то модель поначалу на них создаётся одна и она начинает "танцевать" где-то между ними. Понятно, что всё это подбирается и решается правильными порогами, но я на этом исследование темы временно закончу.

Во-первых, мне не очевидны плюсы с точки зрения точности.

Во-вторых, сам метод отбирает время у трекинга, который ещё будет идти после. На видео я его не включал, это только вычитание фона и его результат фильтруется GM-PHD.

Не уверен, что сделанное надо вливать в основную ветку MultitargetTracker'а, это как Smorodov скажет. Если интересно, то оформлю получше и сделаю дополнительной опцией.

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Посмотрел видео, для снега как то стремно, поддержу что не нужно добавлять это в основную ветку, по крайней мере пока с параметрами не будет определенности. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×