Jump to content
Compvision.ru

Recommended Posts

Здравствуйте. 
Пишу сейчас детектор движения с трекингом. Схема стандартная. 
1) Вычитание фона 
2) Получение блобов 
3) Трекинг их с помощью, например, фильтра Калмана
Такое решение вроде работает, но хотелось бы чего-нибудь получше. Например, когда 2-ва объекта передвигаются рядом, они слипаются в один. 
Есть сейчас какие-нибудь более перспективные схемы? Что-то более современное для того, чтобы более четко разделять объекты на видео?
Я думал использовать плотный оптический поток, чтобы более четко разделять объекты. 
Посмотрел пример tvl1_optical_flow в opencv_3.2. Как-то не очень. 
Есть какие-нибудь идеи?

Share this post


Link to post
Share on other sites

Здесь смотрели ? 

 

Share this post


Link to post
Share on other sites

Да, смотрел. И исходники эти https://bitbucket.org/nuzhny007/feintrack запускал. Пробовал разные параметры. 
Работает данный детектор как я понял по старой схеме с вычитанием фона и так далее. Решение это не лучше того, что у меня есть.
Я еще думал использовать лукаса-канаду, чтобы по точкам понять, что хотя объекты, например, рядом, но точки двигались не синхронно и сделать вывод, что это разные объекты. Но точки "слетают" с объектов. 
Я просто подумал, что на передовом крае науки сейчас есть что-нибудь новенькое. 

Share this post


Link to post
Share on other sites

Спасибо за ссылки. 
Urban Tracker - красивое видео у них на страничке, конечно, только на их примере у меня не так хорошо работает. Другое видео подсунуть без вылета у меня так и не получилось.
Multitarget-tracker - попробовал, не совсем то, что я хочу
Самая главная для меня проблема - это когда, например, несколько машин в плотном потоке едут рядом и на всех трекерах, что я смотрел, все несколько превращаются в один слипшийся объект.

Share this post


Link to post
Share on other sites

Для меня эта проблема тоже явная. Чаще всего балансировка идёт между скоростью и качеством работы. И всегда скорость приоритетнее.

1. Мой Feintrack - это довольно старый детектор, ещё до появления OpenCV начат. Он ориентирован на работу на слабых процессорах, использовался ещё на Пентиум 4, умеет детектировать оставленные предметы. Но под твои требования не подходит.

2. UrbanTracker - хорошо, отличный подход, объединить неустойчивое вычитание фона и достаточно устойчивые точки. Никак руки до него не дойдут.

4. В Multitarget-tracker самый лучший режим - это включённый Лукаса-Канаде и KCF. Режим не идеальный, но жутко медленный на практике.

Там же я экспериментировал с комбинацией: детектор лиц (Хааром) + детектор движения с вычитанием фона. Получилось неплохо! Детектор срабатывает не всегда, но достаточно часто. Получается не терять лица, даже когда они поворачиваются в профиль на несколько секунд и другими системами теряются (тем же dlib).

Была надежда на GM-PHD, но она не оправдалась.

Вот. Теперь о перспективных вещах.

1. Я уже убедился, что нормально работать получится только зная тип объектов, которые планируется детектировать. То есть автомобили, пешеходы, лица, животные - всё что угодно. Но детектор должен понимать, что это один объект. Ладно ещё машины вдали, едущие параллельно. Но когда они в пробке и вплотную друг к другу? А ещё серые и в пасмурную погоду?  Мне кажется, что там только распознавание по типу объекта поможет.

Далее люди крупным планом. У них руки, ноги, само тело - всё совершает постоянные движения в разные стороны. Как добиться того, чтобы на том же вокзале они не разделялись на кусочки и не сливались в одно? Я так и не добился от детектора нормальной работы, надо их (людей) распознавать.

Этот путь хороший, правильный, но медленный и будет работать только через N лет, когда мощности подтянутся. Чтобы мог детектор движения работать на 20 видеоканалах FullHD на одном сервере. Или по Тегре в каждую камеру и распознавать на них, а не на компьютере.

2. Второй путь - это сегментация всего кадра на регионы. И наложение этой сегментации на маску переднего плана.

Вот этот подход мне кажется намного более перспективным. Он быстрее будет распознавания и сработает с любыми объектами, даже неизвестными. Не обязательно даже делать сегментацию какой-то очень точной. Я сейчас посматриваю в сторону суперпикселей, их сравнения и объединения. Возможно, что в ближайшем будущем что-то появится и в Multitarget-tracker'е, если руки дойдут.

 

Это моё личное видение перспектив детектора движения.

  • Like 1

Share this post


Link to post
Share on other sites
14 часа назад, Artemtemtem сказал:

несколько машин в плотном потоке едут рядом и на всех трекерах, что я смотрел, все несколько превращаются в один слипшийся объект.

Можете выслать несколько кадров из видео для того чтобы я  мог посмотреть, как они будут сегментироваться моей программой. Результатами, если интересно могу поделиться.

Share this post


Link to post
Share on other sites
12 minutes ago, mrgloom said:

А кто нибудь пробовал трекеры на нейросетях типа

1. Я не пробовал, потому что практически всегда программа должна работать на ноутбуках и компах, где видеокарты не будет. А на CPU медленно.

2. В это теме всё таки не трекеры обсуждаются, а детекторы, в состав которых может входить Multitarget tracker, а по ссылке Singletarget tracker наподобие KCF или TLD. На практике это будет ну слишком медленно отслеживать сотни, а то и тысячи объектов.

3. Если говорить о нейросетях, то частью детектора может быть такой подход: Social LSTM. Вот его мне попробовать интересно.

Share this post


Link to post
Share on other sites
7 часов назад, 2expres сказал:

Можете выслать несколько кадров из видео для того чтобы я  мог посмотреть, как они будут сегментироваться моей программой. Результатами, если интересно могу поделиться.

 

9 часов назад, Nuzhny сказал:

Второй путь - это сегментация всего кадра на регионы. И наложение этой сегментации на маску переднего плана.

Сегментация на маску переднего плана возможный вариант. Только скорее всего, чтобы объединять это все в цельные объекты, нужно при это анализировать видео. Как сегменты меняются на следующих кадрах и так далее. 

 

9 часов назад, Nuzhny сказал:

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

Т.е. прикручивать обучалку? Получается, чтобы мне сделать, например, детектор движения автотранспорта, мне нужны обучалки для легковушек, автобусов, троллейбусов, грузовиков, маршруток и т.д. Не уверен, как это можно сделать.

vlcsnap-2017-07-04-18h40m40s306.png

vlcsnap-2017-07-04-18h40m57s399.png

vlcsnap-2017-07-04-18h41m31s884.png

Share this post


Link to post
Share on other sites
12 minutes ago, Artemtemtem said:

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

Нет, думаю, что в такой формулировке можно обойтись и без этого (хотя не помешает). Я больше занимался универсальным детектором, который для всего. А это и, например, такие видео как отсюда: https://github.com/utkarshtandon/GMCP-Tracker-Python-Implementation/tree/master/www

Там можно посмотреть parkinglot.mp4, petsvideolarge.mp4, tudcrossing.mp4. Желательно знать, сколько людей идёт, не путать их.

Если видео с вокзала, например как с PETS2007, то надо ещё определять оставленные сумки и чемоданы. Алгоритм вычитания фона на таких видео видит всё больше непрерывное поле с каким-то движением.

Кстати, я с содроганием вспоминаю ночные видео с автомобилями, где включённые фары портят всю картину своим конусом света. А для низковисящих камер ещё и засвечивать иногда могут.

Share this post


Link to post
Share on other sites

1. KCF сейчас топ трекер?

2. Если такие датасеты в публичном доступе как в пейпере social lstm?

Share this post


Link to post
Share on other sites
15 minutes ago, mrgloom said:

1. KCF сейчас топ трекер?

2. Если такие датасеты в публичном доступе как в пейпере social lstm?

1. Нет и никогда им не был. У него другие достоинства. Он быстрый! И может достаточно корректно определить факт пропажи объекта. Также видел проект, где KCF в качестве short-term tracker'а успешно заменил Лукаса-Канаде в составе TLD. И стало только лучше во всех отношениях. Думаю, что топ-трекеры надо искать на VOT.

2. Специально не искал, но должны подойти классические PETS или https://motchallenge.net/

Share this post


Link to post
Share on other sites
21 час назад, Artemtemtem сказал:

Сегментация на маску переднего плана возможный вариант. Только скорее всего, чтобы объединять это все в цельные объекты, нужно при это анализировать видео. Как сегменты меняются на следующих кадрах и так далее.

Я провел сегментацию своей программой. Время сегментации одного кадра 30 мс. Поможет ли это вам для разделения объектов?

12.PNG.4d3c1b88446c20dba07d8e4525768e90.PNG

22.PNG.c696cf5ceddbb7541a31e8f3e6d52ba9.PNG

32.PNG.d7d90717c3026ef1f96aacda6f1240a5.PNG

Share this post


Link to post
Share on other sites
2 часа назад, 2expres сказал:

Я провел сегментацию своей программой. Время сегментации одного кадра 30 мс. Поможет ли это вам для разделения объектов?

Спасибо. Не уверен пока. Лучше я попробую как-нибудь через те же суперпиксели. 

Share this post


Link to post
Share on other sites
19 minutes ago, Artemtemtem said:

Спасибо. Не уверен пока. Лучше я попробую как-нибудь через те же суперпиксели. 

Будет как-то так:

result_1600.png

Share this post


Link to post
Share on other sites
52 минуты назад, Nuzhny сказал:

Будет как-то так

Какой критерий выбора суперпикселей? В данном случае я вижу приблизительно 300 пикселей в 1 суперпикселе, на всем изображении ~1800 суперпикселей. Это будет сильно сокращать вычисления. И еще мне интересно время разбивки данного изображения на суперпиксели?

Share this post


Link to post
Share on other sites

Суперпикселей ровно 1600, данное значение задаётся изначально, т.к. они расположены на регулярной сетке.

Почему я выбрал столько.

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

1. Размер машины вдали около 20х16 пикселей.

2. Размер картинки 1024х576.

3. Примерное число суперпикселей N получаем из выражения: N = (1024 / 20) * (576 / 16) ~= 1800. Я взял 1600.

Вот и всё.

 

Понятно, что первоначально надо иметь представление, какого размера в пикселях должная быть самая маленькая машина. Но это вполне можно сделать при первоначальной настройке, когда вешается камера. Или автоматически: на какое-то время включить распознавалку автомобилей, чтобы набрать статистики.

По скорости работы скажу завтра. Но я взял первый попавшийся код с гитхаба с классической реализацией SLIC. А реализаций есть много.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Recently Browsing   0 members

    No registered users viewing this page.

×