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

Поиск объектов с помощью нейросети

Recommended Posts

Всем привет, хотелось бы освоить поиск предметов в кадре с помощью нейронных сетей, т.е. не то что на кадре есть объект / нет объекта, а получить его координаты, так вроде обнаружение людей в робомобилях работает к примеру. Как я понимаю, тут лучше всего копать в сторону свёрточных. До этого с нейронными сетями дело вообще не имел. Может кто подсказать что читать на эту тему, желательно на русском?

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


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

На русском ничего. Курить в сторону RCNN etc.

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


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

Мда, отсутствие материала на русском, прям плачевно, а сколько обычно по времени занимает обработка одного изображения с использованием этой штуки на обычном компьютере на CPU и на GPU?

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


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

Мда, отсутствие материала на русском, прям плачевно, а сколько обычно по времени занимает обработка одного изображения с использованием этой штуки на обычном компьютере на CPU и на GPU?

На CPU не пробовал, но на Titan X почти в реалтайме пашет.

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


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

Вообще было бы интересно почитать про то как работают такие штуки (тот же deepLab ), может кто в теме статейку напишет.

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


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

Детектор пешеходов: http://mmlab.ie.cuhk.edu.hk/projects/TA-CNN/

  • Like 1

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


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

Надеюсь я ошибаюсь, но я правильно понимаю, что системы поиска объектов в кадре на основе свёрточных нейронных сетей сначала строят некий образ (шаблон) искомого предмета, а потом ищут его в кадре с помощью тупого перебора масштабов и поворотов?

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


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

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

Нейронки могут сами справляться с поворотами, и небольшими вариациями масштаба если Вы их этому обучите см. прикрепленную картинку.

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

В любом случае это не реалтайм. У меня уходит от нескольких секунд на небольшие картинки до пары минут на большие. 

 

heatmap_cumulative.png

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


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

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

Нейронки могут сами справляться с поворотами, и небольшими вариациями масштаба если Вы их этому обучите см. прикрепленную картинку.

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

В любом случае это не реалтайм. У меня уходит от нескольких секунд на небольшие картинки до пары минут на большие. 

 

heatmap_cumulative.png

Faster-RCNN у меня работает ~100ms на кадр 1280x720

p.s. а у вас на картинке - это что-то вроде Selective Search поверх feature map'ки ?

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


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

Да нет, у меня свертка сетью сразу дает распределение вероятностей объектов.

Для фиксированного масштаба объектов картинка 1024х1024 считается 0.2 - 0.3 секунды.

Дальше просто поиск макимумов и non-max suppression. В общем, сплошной брутфорс :)

 

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


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

Да нет, у меня свертка сетью сразу дает распределение вероятностей объектов.

Т.е. на выходе не полносвязанная сетка, а что-то типа feature map, как в томже RCNN?

Ну для брутфорса выглядит очень даже не плохо)

 

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


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

Ну feature map для меня как-то не очень однозначный термин, но может быть и так. 

Для каждой точки изображения выдается выход с soft max слоя, архитектура сети аналогична LeNet.

Вот тут почитайте: http://cs231n.github.io/convolutional-networks/#convert 

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


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

Ну feature map для меня как-то не очень однозначный термин, но может быть и так. 

Для каждой точки изображения выдается выход с soft max слоя, архитектура сети аналогична LeNet.

Вот тут почитайте: http://cs231n.github.io/convolutional-networks/#convert 

Любопытно. А видях нету? В динамике было бы интересно посмотреть как ваша сетка работает.

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


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

Да она молча работает :) нету динамики.

Бегут строчки, 5 штук в секунду. От 2 сек для чего то типа 800х600, до 2 мин для изображений типа 3000х4000.

А потом результат выдает.

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


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

А нет на эту тему туториала какого? Ну там с с++ кодом, комментами, почему так, а не иначе. Ну т.е., чтоб вся настройка, программирование, обучающие выборки и т.п. для поиска какого-то объекта были собраны и можно было бы просто запустить, поиграться параметрами?

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


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

Скачайте CAFFE, torch или theano, поиграйте, обучите какую нибудь сетку, поменяйте параметры, почитайте мануалы.

Лучше начинать это все под Ubuntu, под Win задолбаетесь.

CAFFE выделил не просто так, я думаю для начала этот фреймворк оптимален. И да, там есть пример использования на CPP. Далее можете посмотреть RCNN, он построен на базе CAFFE.

Начнете чувствовать что происходит с сетью при изменении параметров, сможете сворганить на ней детектор.

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

 

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


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

Скачайте CAFFE, torch или theano, поиграйте, обучите какую нибудь сетку, поменяйте параметры, почитайте мануалы.

Лучше начинать это все под Ubuntu, под Win задолбаетесь.

CAFFE выделил не просто так, я думаю для начала этот фреймворк оптимален. И да, там есть пример использования на CPP. Далее можете посмотреть RCNN, он построен на базе CAFFE.

Начнете чувствовать что происходит с сетью при изменении параметров, сможете сворганить на ней детектор.

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

 

Ну, кстати, Бенджио вовсю пишет книгу по Deep Learning'у и черновики уже вполне читабельны. Правда там только теория, без практических примеров.

з.ы. а вообще лучшая книга для старта - это пожалуй "Нейронные сети: полный курс" Хайкина, там даже слегонца рекурентные сети затрагиваются.

з.з.ы. а с практическими примерами да, совсем беда, особенно не радует наличие 100500 различных фреймворков...

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


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

Насколько я понимаю сейчас нет примера для caffe для обычного sliding window detection, а есть только с selective search(который в RCNN).

https://github.com/BVLC/caffe/issues/197

Overfeat вроде как умеет и object detection.

 

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


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

Насколько я понимаю сейчас нет примера для caffe для обычного sliding window detection, а есть только с selective search(который в RCNN).

https://github.com/BVLC/caffe/issues/197

Overfeat вроде как умеет и object detection.

 

А в чем проблема взять какого-нибудь виолу джонса для генерации пропозалов и потом прогонять сетку для найденых гипотез?

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


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

Как я понял вы обсуждаете обычное скользящее окно в котором классификатор это нейронная сеть, а мне казалось что придумали какой-то метод использования сетей для сегментации изображения, а потом уже сегменты классифицируются(или одновременно как то). В демонстрации  deepLab  все выглядело именно так.

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


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

Как я понял вы обсуждаете обычное скользящее окно в котором классификатор это нейронная сеть, а мне казалось что придумали какой-то метод использования сетей для сегментации изображения, а потом уже сегменты классифицируются(или одновременно как то). В демонстрации  deepLab  все выглядело именно так.

Сети осуществляющие семантическую сегментацию (DeepLab, DeconvNet, SegNet etc.) - это отдельный класс сетей, который обычно рассматривают независимо от задачи детектирования объектов. Там как такового генератора гипотез, типа скользящего окна или Selective Search, вообще нету, вместо этого там полносвязанные слои сворачивают в свертку и выход сети интерпретируют как картинку. И обучают так, чтобы в выходной картинке каждый пиксель маркировался лэйблами известных ему классов. И мне кажется, что сетка Smorodov'а как раз делает что-то похожее на DeepLab)

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


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

Так и есть, только учится сетка точно так же как и в примере MNIST :)  или других классических примерах - на вырезанных сэмплах.

Лень мне попиксельную разметку делать и есть ряд других преимуществ, как и недостатков, впрочем.

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


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

Так и есть, только учится сетка точно так же как и в примере MNIST :)  или других классических примерах - на вырезанных сэмплах.

Лень мне попиксельную разметку делать и есть ряд других преимуществ, как и недостатков, впрочем.

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

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


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

Так и есть, по 2М сэмплов каждого класса. 

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


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

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

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

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

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

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

Войти

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

Войти сейчас


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

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

×