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

BeS

Пользователи
  • Количество публикаций

    349
  • Зарегистрирован

  • Посещение

  • Days Won

    43

Все публикации пользователя BeS

  1. В top посмотреть на число создаваемых потоков с этими опциями выставлеными в 4 и в 1?
  2. Скорей всего в фмультиках у вас тупо не будут находиться, т.к. при мультяшной стилизации обобщающей способности всяких каскадов не хватит для детектирования.
  3. Нейрон тут как и в классических сетях - просто сумматор. Только суммирует он не скаляры, а каналы, а вместо скалярных весов у него 2D свертки. Да, размер выхода сверточного слоя не зависит от числа входных каналов. Зависит от интерпретации. Можно сказать, что мы каждый канал сворачиваем двумерной сверткой, а потом получаем карту признаков, пописксельно суммируя получившиеся свертки, а можно говорить, что мы стопку каналов сворачиваем с 3D объемом. У вас картинка не полная, должно быть 96 цветных сверток. Это первый слой AlexNet'а, у него на вход приходит RGB а на выходе 96 карт признаков. Поэтому получаем 96 3D сверток, или 3*96 = 288 2D сверток. Да. Это и имеется в виду.
  4. OpenCV + OpenGL нужно ли?

    ACV - это библиотека заоптимизированных по самое немогу примитивов с совместимым с opencv интерфейсом (концепция такая, что просто поменяв инклюды, можно значительно разогнать свое приложение использующее opencv). Про OpenGL это не о том...у OpenCV отрисовка вся на CPU работает, поэтому на мобильных гаджетах opencv'ная отрисовка может занимать существенное время, и тут лучше использовать GLES для написания быстрого GUI.
  5. А в чем смысл 4D сверток в caffe? Там ведь 4-я ось вдоль бача направлена... Не совсем так: у нас есть сверточный слой с, например, 5 нейронами, где каждый нейрон генерирует один из выходных каналов. На вход пускай подается 3-х канальная картинка. Каждый входной канал соединен с каждым нейроном сверточного слоя и каждая свзяь имеет вес в виде ядра свертки, каждый нейрон на вход получает все входные каналы свернутые со своими ядрами и просто их суммирует. Т.о. получаем, что в нашем модельном примере всего будет 3*5 = 15 различных ядер свертки на сверточном слое. Любопытно, а там реализован проход только по сверточным слоям, или нелинейные активации, ректификация, пулинги и тд и тп тоже реализованы?)
  6. Как вариант, можно еще попробовать туже фишку, что исопльзуется в FCN...там вроде бы в одном из кейсов учат upsample слой на выходе, который картинку скейлит до нужного размера...но в простейшем случае они просто биллинейную интерполяцию делают.
  7. А где там свертка всех каналов с одним ядром? Там просто свертки с объемом делаются, т.е. для получения одного канала (выход одного нейрона сверточного слоя) все каналы с прошлого слоя сворачиваются каждый со своим ядром, а потом результаты суммируются. Когда все свертки одинаковые - это вырожденный случай, при хорошей инициализации сети и отсутствии избыточности архитектуры такие случаи должны редко встречаться. Есть 2 способа подать инпут: 1) Нормировать каналы путем вычитания среднего, где среднее по каждому каналу считается независимо. 2) Вообще никак не нормировать входные данные. Впринципе оба варианта имеют право на жизнь, тем более, что сейчас в основном все тренируются с Batch Normalization, которая учится автоматом нормализовать данные.
  8. Потому, что MinGW(который вовсе не компилятор, а маленькая виртуальная машина с набором утилит для компиляции) код компилирует не в "честный" бинарник, а в P-код своей виртуальной машины, аналогично тому, как это делает cygwin. Для сборки CUDA кода из под cygwin (был у меня проблемный научный пакет со сложным конфигуратором кода, который работал только в *nix среде) я когда-то использовал трюк с пробрасыванием в эту виртуальную среду нормального компилятора (по моему я тогда использовал Intel компилятор, который умеет с CUDA коллаборироваться) и сборкой кода в обычный бинарник.
  9. Всем привет, Решил попробовать пистаь к caffe кастомные слои не на C++, а при помощи имеющего PythonLayer из стандартного caffe. Пишу простой сэмпл: 1) так выглядит sample.prototxt 2) так выглядит собственно код Python-слоя (должен тупо пропихивать блоб с данными дальше без изменения) 3) так выглядит код, который запускает сетку Какое поведение наблюдается при запуске сети: 1) Отключаю пулинг слой, сеть работает корректно. После forward pass я могу с выхода кастомного слоя забрать картинку в первозданном виде. 2) Отключаю python-слой а в качестве bootm для Python-слоя задаю просто data. Все работает корректно и на выходе получаю картинку вдвое меньшую, чем подавал на вход. 3) Запускаю сеть в которой сначала идет мой кастомный слой, а его выход идет на пулинг. Сеть не работает, ругаясь на невалидный блоб на входе пулинга: Может кто-то сталкивался с таким и сумел пофиксить?
  10. Всем привет, А у кого какие мысли, почему сверточные сетки, предтренированные на ImageNet так хорошо работают на большом спектре задач? Например, если взять ObjectDetection, то state of the art алгоритмы, такие как RCNN, SSD, etc. используют VGG16 предтренированную на ImageNet, затем файнтюнят на милипизерных базах PASCAL и получают одни из лучших результатов, например, на KITTI датасетах для детектирования машин/людей при том, что в ImageNet + PASCAL изображений людей дай бог тысяч 20 наберется...хотя по канонам надо брать много миллионов картинок, чтобы DL начал сходиться... Да и вообще большая часть статей по DL сейчас начинаются с того, что "давайте возьмемсеть, предтренированную на ImageNet"
  11. Американская компания, купила белорусский стартап за российские рубли...вот это поворот :-) p.s. а по сабжу: детектирование фронтального лица - довольно простая задача, и успешно решается каскадными классификаторами.
  12. Всем привет, А кто-то сталкивался с тем, что при тренировке сеток на GPU появляется рябь на экране? Оно конечно вполне ожидаемо, когда тренировка бежит на основном GPU (раньше бывало что экран вообще гас), но рябь появляется даже тогда, когда тренирова бегает на дополнительной карте, никак не связанной с монитором. БП вроде тоже не слабый (1300W). Может кто знает, как пофиксить?
  13. У меня на однородном фоне видно вертикальную рябь в приложениях, явно не использующих GPU (в терминале, emacs etc.). Ну и мне кажется, что прикладной софт должен биндиться на master карту, а slave вообще своей жизнью жить должна...
  14. Всем привет, А может кто-то сталкивался с исчерпывающим описанием процесса обучения рекурентных сетей (конкретно интересует обучение LSTM'а)? Собственно имеются два вопроса по этому поводу: 1) PBTT подразумевает, что ошибка считается в виде суммы ошибок для всей цепочки LSTM'ов, и не понятно, откуда брать эталонный выход для промежуточных моментов времени, или все таки процесс тренировки там подразумевает, что в момент обуения мы полностью контролируем клеточное состояние в каждый момент времени? 2) Кто-нибудь расписывал руками производные для LSTM'а? А то chain rule расписывать там как-то совсем не радостно.
  15. Опечаталася) BPTT(backpropagation through time) - обобщение метода обратного распространения ошибки для случая систем с динамикой по времени (по факту там тупо идет суммирование ошибок по времени). Посты Карпати я видел, но там как-то больше практических примеров, чем теории, а в книге у Бенджио рассматривается только простейший случай рекурентных сетей
  16. Всем привет, А кто-то пользовался Slice-слоями в кафе? Не совсем понятен механизм того, как он нарезает картинку... Опытным путем было установлено, что при исопльзовании его вот так: Можно порезать блоб MxNxC на два размерами Mx[0:20]xC и Mx[20:N]xC соответственно. Т.е. вертикальными линиями. При этом логично было-бы предположить, что axis: -3 должно позволять резать картинку по вертикали, но что-то как-то оно с ошибками падает, типа такой:
  17. Еще один трюк для снижения внутриклассовой вариативности. Типа ущербной версии DPM'а :-) Например, если мы распознаем машины и у нас есть фильтры находящие колеса и при этом мы знаем, что машина в кадре стоит на земле, то нам не надо применять эти фильтры там, где должна быть крыша автомобиля.
  18. А на практике как оно работает? Пригодно для запуска в real time на каких-нибудь ARM'ах?
  19. Вобщем оказалось, что я на вход сети подавал не корректный блоб: caffe не проверяет размерность блоба, который к нему пришел, а я вместо 4-х мерного, отдавал 3-х мерный, в итоге срезы непонятно как ходили по памяти. Добавил к блобу еще одну ось и все побежало как надо.
  20. Вышла OpenCV 3.1

    А зачем урезанная VS, когда есть QT Creator?
  21. Забавно, при тренировке, кстати htop оптимистично показывает, что виртуально он 2 терабайта зарезервировал :-)
  22. А вот это странно, по идее по батчу требования к памяти должны расти линейно...
  23. Тэкс, из первых наблюдений: тренировка сетки из файла segnet_solver.prototxt с размером мини-батча равным одному, отжирает ~5Gb видеопамяти, т.ч. с батчем >1 на моей карточке оно не запускается. При запуске скрипта compute_bn_statistic.py с натренированной сеткой зажирает ~4Gb памяти. Но это судя по всему я гонял максимально возможную сетку, там наверняка можно менять число сверточных/разверточных слоев.
  24. Сейчас попробую скачать...класть датасеты в разархивированном виде в репозиторий - это конечно гениальное решение :-( А что у вас за задача такая, что критично максимальное потребление памяти?
  25. Что-то там не понятно какой датасет качать. Зашел на их FTP, а там картинок гигабайт 6...О_О
×