Jump to content
Compvision.ru
APXANGEL

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

Recommended Posts

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
2 hours ago, APXANGEL said:

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

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

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

 

heatmap_cumulative.png

Share this post


Link to post
Share on other sites
4 hours ago, Smorodov said:

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

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

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

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

 

heatmap_cumulative.png

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

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

Share this post


Link to post
Share on other sites

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

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

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

 

Share this post


Link to post
Share on other sites
39 minutes ago, Smorodov said:

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

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

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

 

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites
3 hours ago, Smorodov said:

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

 

Share this post


Link to post
Share on other sites
6 hours ago, Smorodov said:

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

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

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

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

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

 

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

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

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

Share this post


Link to post
Share on other sites
10 hours ago, mrgloom said:

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

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

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

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
14 minutes ago, iskees said:

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
4 hours ago, Smorodov said:

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

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

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

Share this post


Link to post
Share on other sites

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

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.

×