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

Recommended Posts

Artemtemtem    0

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

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


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

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

 

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


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

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

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


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

А, например, этот смотрели ? https://www.jpjodoin.com/urbantracker/ 

Ну и наш с Nuzhny проект: https://github.com/Smorodov/Multitarget-tracker 

 

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


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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

  • Like 1

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


Ссылка на сообщение
Поделиться на других сайтах
2expres    3
14 часа назад, Artemtemtem сказал:

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

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

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


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

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

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

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

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

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


Ссылка на сообщение
Поделиться на других сайтах
Artemtemtem    0
7 часов назад, 2expres сказал:

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

 

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

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

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

 

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

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

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

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

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

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

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


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

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

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

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

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

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

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


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

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

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

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


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

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

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

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

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

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


Ссылка на сообщение
Поделиться на других сайтах
2expres    3
21 час назад, Artemtemtem сказал:

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

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

12.PNG.4d3c1b88446c20dba07d8e4525768e90.PNG

22.PNG.c696cf5ceddbb7541a31e8f3e6d52ba9.PNG

32.PNG.d7d90717c3026ef1f96aacda6f1240a5.PNG

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


Ссылка на сообщение
Поделиться на других сайтах
Artemtemtem    0
2 часа назад, 2expres сказал:

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

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

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


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

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

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

result_1600.png

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


Ссылка на сообщение
Поделиться на других сайтах
2expres    3
52 минуты назад, Nuzhny сказал:

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

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

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


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

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

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

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

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

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

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

Вот и всё.

 

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

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас


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

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

×