Pull to refresh

Comments 36

UFO just landed and posted this here
Спасибо за статью.
Быстро считает. У меня получалось по 10-20ms на кадр. В то время, когда Faster-RCNN тратил по 100-150.
А что за видеокарта?
1080, так что да, это не очень репредентативно для простых устройств
Понятно, а более быстрые сети в природе существуют? Насколько реально получить такие скорости на видеокарте среднего уровня типа 950?

Упомянуый в статье YOLO можно разогнать вплоть до 100fps.

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

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

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

В DetectNet вычислений на верхнем уровне практически нет, как я понимаю. А для свёрточной сети объём вычислений будет прямо пропорционален площади. Ускорения тут скорее от железа будут зависить. Вроде NVIDIA сделало нативную поддержку ядер 3*3. Но каких-то тестов не от NVIDIA не видел.
Не могу не заметить, что в новый Titan X и Теслы подвезли INT8 инструкции оптимизированные для машинного обучения. Также хочу услышать комментарий автора, относительно них.
На новых не работал. Видел тесты NVIDIA, что они просто разрывают всех по производительности. Но реально не читал про опыт использования. И сам не тестировал.
Тесл еще в продаже нет, только Титан(в P100 поддержки INT8 нет). Еще нагуглил, что Intel Xeon Phi уже поддерживают часть инструкций, запихивая по 8 штук за раз в AVX-512. Видимо будет отчаянная грызня до последней капли крови за нейросети.
То что я видел у интела до сих пор — было на редкость убого. Но по крайней мере они стали это направление направленно развивать — что, конечно, очень хорошо.
А ATI какие нибудь интересные решения для своих железок не предлагает? И у кого из этих производителей больше взаимопонимания с юзерами и разработчиками под GPU?
У NVIDIA. Считайте что они захватили рынок. Нет, какая-то поддержка ATI есть. Но обычно кривая и бажная. В Theano вроде есть, в TensorFlow. Но ATI реагирует на желания пользователей лишь после того как на них прореагирует NVIDIA. Или даже позже.
А так, даже Intel прикрутил для своей IntelPHI какой-то форк Caffe. Но вот стоит ли этим пользоваться? Не думаю.
Спасибо за развернутый ответ. Стало быть, хоть жефорсовые флопсы и дороже радеоновских, зато это какие надо флопсы)
В Torch есть поддержка OpenCL, но оно работает заментно медленее чем CUDA/cuDNN.
спасибо, помогли дилетанту определиться с выбором)
AMD что-то не видно и не слышно. Топовое решение у них S9300 x2, судя по ттх FP32 считает как боженька, а FP64 плохо. Да и ориентируются, судя по сайту на облачные игры. Поддерживает только C++AMP и OpenCL.

У AMD долгов столько, что некогда им заниматься венчурными вложениями в Deep Learning :(

Быстро считает. У меня получалось по 10-20ms на кадр. В то время, когда Faster-RCNN тратил по 100-150.

Чет мне кажется, что Faster тоже полетит, если у него в качестве feature extractor будет использоваться GoogLeNet вместо VGG-16...

Кстати, тут есть любопытный вопрос. Если YOLO заапдейтить верхушку вот таким образом (назвается SSD). То у него качество распознавания раза в 1.2 вырастает. Но этот апдейт, по сути, просто напросто Residual Connection.
Возникает логичный вопрос: где сетки для детектирования на базе полноценного ResNet??? Они должны хорошо работать. Почему никто на базе ResNet не пересобрал Faster-RCNN? Или всё это уже давно сделано в недрах крупных компаний, просто не публикуются результаты?

Чет мне кажется, что Faster тоже полетит, если у него в качестве feature extractor будет использоваться GoogLeNet вместо VGG-16...

Как я понял YOLO на VGG16 всё же даёт ~50 fps. По крайней мере вот эти ребята недавно эксперементировали вроде. А. Вы чуть выше это тоже упомянули. Но 100fps я не видел сам:)
так что не думаю, что Faster прямо таки в 10 раз ускориться. Но раза в 2 может.

Топовый результат в object detection на ImageNet как раз продемонстрирован ResNet, воткнутым в Faster-RCNN
А там опубликована статья? Ссылочкой не поделитесь? Я переодически табличку по VOC2012 отслеживаю — http://host.robots.ox.ac.uk:8080/leaderboard/displaylb.php?cls=mean&challengeid=11&compid=6&submid=8822#KEY_RRR-ResNet152-COCO-MultiScale
Но там по тем сеткам, где архитектура открыта она какая-то мутная. То марковские модели впилят, то какие-то карты фич полу-вручную разгребают.

А чего там публиковать то? Ну воткнули и воткнули, в faster'е же feature extraction впиливается достаточно прямолинейно. А вообще вот, например, статейка про то, как чего-нибудь сильно кастомное приделать к faster'у: https://arxiv.org/pdf/1608.08021.pdf

В изначальной статье про ResNets это обсуждается в Appendix: https://arxiv.org/abs/1512.03385
Как я понял YOLO на VGG16 всё же даёт ~50 fps. По крайней мере вот эти ребята недавно эксперементировали вроде. А. Вы чуть выше это тоже упомянули. Но 100fps я не видел сам:)

С VGG-16 у меня получалось ~90мс на кадр (на 980Ti), а вот при использовании упрощенных фич 100fps он действительно выдает, но детектирует совсем плохо.

Спасибо за обзоры, с помощью чего приводили базу к стандарту описания KITTY?
Ручками не то в C# не то в Python за 10 строчек.
А зачем вы удалили приложение по распознаванию номеров из App Store? Где его можно скачать?
То что там GoogLeNet используется несет какой то смысл или можно любую воткнуть?
Можно любую. Более того, DIGITS можно поверх любой более-менее адекватной современной версии caffe зацепить. Просто перед стартом указать переменную в папку где Caffe.
Конечно, после этого DetectNet и прочие свистелки-перделки перестают работать, но графички потерь и всё такое он кажет.
Спасибо за статью. Я новичок в этой области, и в попытках повторить все шаги автора, наступил на некоторые грабли:
  • Долго разбирался с форматом KITTY. Было не очевидно, что начало координат: левый верхний угол с нулевого индекса. Готовую базу можно посмотреть и проверить через KITTI Object development kit
  • Для новых Pascal видеокарт необходима cuda 8, на 7.5 будет ошибка.

В итоге застрял на самом обучении. По разному изменял параметры сети, график остаётся на нуле. На моей GTX 1060 6Гб памяти, поэтому использовал Batch size 5 и Batch Accumulation 2. В параметрах ClusterDetections: 720, 480, 16, 0.05, 1, 0.02, 10, 1

При этом график обучения выглядит вот так
image

В какую сторону нужно копать, чтобы заставить его обучаться?
Видите, у вас падают loss. Тобишь обучение всё-таки идёт.
Нужно менять эти 4 параметра:
gridbox_cvg_threshold,gridbox_rect_threshold,gridbox_rect_eps,min_height,num_classes
А как — не знаю. Попробуйте порандомить или подумать какие параметры больше подходят под вашу задачу.
Разобрался и заставил ползти график вверх. Похоже, дело было в грязной среде. Решилось всё тем, что я взял nvidia-docker, на нём запустил Digits 5.1, в котором обучение пошло. Стандартный docker образ от nvidia, содержащий digits, не подходит для новых видеокарт. (там cuda 7.5)

Мои шаги для установки digits в docker, быть может кому-то пригодится
Сначала нужно установить nvidia-docker по инструкции: https://github.com/NVIDIA/nvidia-docker/wiki/Installation

Потом запустить контейнер nvidia/cuda:8.0-cudnn5-devel-ubuntu16.04 командой:
sudo nvidia-docker run --name digits -p 5000:5000 -v /media:/media -d -t -i nvidia/cuda:8.0-cudnn5-devel-ubuntu16.04 /bin/bash


Присоединиться к запущенному контейнеру:
sudo nvidia-docker attach digits


Внутри контейнера следовать инструкциям по установке caffe и digits:
https://github.com/NVIDIA/DIGITS/blob/master/docs/BuildCaffe.md
https://github.com/NVIDIA/DIGITS/blob/master/docs/BuildDigits.md

В инструкциях указаны не все пакеты, при возникновение ошибок нужно смотреть и доустанавливать. История не сохранилась, из того что помню:
sudo apt-get install python-setuptools python-bs4

На будущее. Вдруг кому-то понадобиться. Ещё точно такую же ошибку встретил, когда строки в файлах DIGITS разделял не как \n, а как \n\r (Windows-стандаром).
Судя по всему сетка не может спарсить файлы, обучение падает но она об этом молчит.
Sign up to leave a comment.