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

Библиотека сверточных нейронных сетей

Recommended Posts

Посоветуйте пожалуйста библиотеку, реализующую сверточную нейронную сеть на C++ под Visual Studio.

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


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

Я пользовался библиотекой, ссылка на которую есть в первом сообщении топика: http://www.compvision.ru/forum/index.php?showtopic=448&st=0

  • Like 1

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


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

вроде самая крупная eblearn и связанная с изобретателем свёрточных сетей

http://eblearn.cs.nyu.edu:21991/doku.php

Eblearn is an object-oriented C++ library that implements various machine learning models, including energy-based learning, gradient-based learning for machine composed of multiple heterogeneous modules. In particular, the library provides a complete set of tools for building, training, and running convolutional networks.
  • Like 1

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


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

вроде самая крупная eblearn и связанная с изобретателем свёрточных сетей

http://eblearn.cs.nyu.edu:21991/doku.php

Спасибо. Жаль только не нашла простейшего примера, как обучить и протестировать сеть в своем проекте.

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


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

Спасибо. Жаль только не нашла простейшего примера, как обучить и протестировать сеть в своем проекте.

Там есть раздел с туториалами: http://eblearn.cs.nyu.edu:21991/doku.php?id=all_tutorials

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


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

Там есть раздел с туториалами: http://eblearn.cs.nyu.edu:21991/doku.php?id=all_tutorials

Там пример работы с готовыми инструментами с использованием конфигурационного файла. Как именно подключать и использовать библиотеку в своем проекте? Из документации не очень понятно.

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


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

Наполовину реклама ;)

Думаю, что самый шустрый код для обычных процессоров - у меня, а для видеокарт (на CUDA) - у сотрудника российского филиала НВидии (это его хобби-проект).

По крайней мере, код ОНейлла (по второй ссылке в теме) тормознее моего в сотню раз. Код нвидиевца тоже скорее всего будет гарантированно быстрее кода Алекса Крижевского (который писал прогу для Джеффри Хинтона) - из-за доступа к внутрифирменным секретам НВидии.

Так что если кому нужен самый-самый шустряк - обращайтесь с конструктивными предложениями ;)

Ну и нерекламная часть: исходники проги Крижевского на С и Питоне лежат тут http://code.google.com/p/cuda-convnet/

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


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

А можно побольше рекламы? Тоесть: ссылки на код или проект, сравнение по быстродействию и потреблению памяти, таблицы, графики и т.п. Тема же интересная.

  • Like 2

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


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

кстати говоря

матлаб фротэнд сам код на GPU

http://habrahabr.ru/post/190132/

матлаб, много разных архитектур, упор на deep learning.

https://github.com/rasmusbergpalm/DeepLearnToolbox

https://github.com/skaae/DeepLearnToolbox beta на GPU

python+theano с поддержкой GPU, тоже с упором на deep learning.

http://deeplearning.net/tutorial/lenet.html

+еще я не уверен что везде одна и та же архитектура сетей, поэтому тестирование не всегда адекватное.

+еще как каждое решение скейлится на разные размеры задач(особо актуально для GPU т.к. кол-во памяти ограничено)

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


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

Еще один блог с исходниками сверточной сети использующий CUDA: http://nghiaho.com/?m=201307

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


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

2 Nuzhny

Результаты сравнения по скорости собирал 4-2 года назад (потом стало лень) на этой странице (смотреть от где-то от середины и все постскрипты).

Сравнивал с пятью чужими программами (вернее, с опубликованными в печати или в интернете временами расчётов - исходник-то был доступен всего для одной из этих 5 программ). Сравнивал ориентировочно - с учётом прикидок о разнице в быстродействии моего и других процессоров.

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

По потреблению памяти - у меня на копейки больше, т.к. все данные обрабатываемого примера (именно одного текущего примера) и внутренние сигналы/веса сети оптимально раскладываются с учётом выравнивания блоков данных на границу параграфа.

Ну и в коде 1.5 ноу-хау - одно чисто моё (на удивление - почему-то нигде и никем ранее не опубликованное) о самом шустром варианте распараллеливания обучения нейросети (вообще без синхронизаций потоков на уровне операционной системы), второе - об аппроксимированном вычислении нелинейности нейрона (которое опубликовано, но почему-то никто об этом не знает и на практике не применяет). И сейчас реализованы пара канонических вариантов свёрточных сеток (ЛеКуновский и Симардовский), а также другие её клоны (от Эндрю Нг, Свена Бенке) - вернее, из разных слоёв-кубиков можно собирать свой/новый вариант. Также у нейронов можно ставить полиномиальные сумматоры - не на всех слоях свёрточной сети это помогает/полезно, но если помогает - то точность растёт. Я так даже самого Хинтона опроверг - он в прошлом году говорил, что на задаче MNIST на обычном персептроне никто никогда не опустился ниже 1.6% ошибок, а я таки постановкой полиномиальных сумматоров только на вых.слой получил точность лучше (см последний абзац тут) (хотя сам Хинтон в 1986г в двухтомнике PDP описывал формулы обратного распространения ошибки в том числе и для полиномиальных сумматоров - но вот почему-то сам не пользуется сейчас сигма-пи нейронами в своих сетях, может быть, зря).

  • Like 3

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


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

кстати говоря

матлаб фротэнд сам код на GPU

http://habrahabr.ru/post/190132/

матлаб, много разных архитектур, упор на deep learning.

https://github.com/rasmusbergpalm/DeepLearnToolbox

https://github.com/skaae/DeepLearnToolbox beta на GPU

python+theano с поддержкой GPU, тоже с упором на deep learning.

http://deeplearning.net/tutorial/lenet.html

+еще я не уверен что везде одна и та же архитектура сетей, поэтому тестирование не всегда адекватное.

+еще как каждое решение скейлится на разные размеры задач(особо актуально для GPU т.к. кол-во памяти ограничено)

По поводу вот этой ссылки https://github.com/rasmusbergpalm/DeepLearnToolbox

не могу никак найти информацию как создать свою базу такого же формата для обучения и тестирования сети. Может кто-нибудь знает?

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


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

посмотреть формат https://github.com/rasmusbergpalm/DeepLearnToolbox/tree/master/data

думаю просто матрица из чисел(кол-во строк кол-во сэмплов, кол-во столбцов кол-во фич), соответственно надо написать ф-ию, которая ваши данные переводит в матрицу.

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


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

http://www.torch.ch/ (Lua, C++ generator)

Torch является расширением языка Lua и имеет ряд возможностей для создания разных алгоритмов машинного обученния. Удобно создавать новую топологию НС (например, сверточные сети). Есть несколько вариантов оптимизационных алгоритмов для обучения НС. Удобно формировать данные для обучения. Переодически возникают ошибки при создании своих топологий и архитектур.

PS: Гипотетически существует ускорение на CUDA и разрабатывается ПЛИС (пока что это не Open Source и вероятно таким не станет)

PSS: Как я понимаю эта библиотека заменит Eblearn, т.к. часть разработчиков в том числе основной Pierre Sermanet сейчас вроде занимается разработкой CUDA модуля

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


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

Что можно использовать в реальных системах?

Задачи:

1. Внедрение алгорима в фирму которая занимается видео аналитикой. С++ VS Win

Год наза пытался внедрить Eblearn для распознавния автомобильных номеров, но не особо получилось.

Eblearn не особо совместим с виндой, но решил использовать под линуксом и столкнулся с некоторыми осложениями: не все примеры работают, не тривиально конвертировать базу в местный формат (+падает при плохой контрасти), часто падает (ошибки в архитектуре и другие изменения в конфигурационном файле часто приводят к неудаче,иногда случайно падает), красивая визуализация с сайта отображалась не в нужных местах, т.е. как то не стабильно все было. Пробовал немного дебажить и нашел код вполне структурированным и читабельным, но определить почему система иногда падает не смог. Т.е. в итоге у меня была обученная СНС с неплохим качеством, но использовать ее было затруднительно.

На данный момент хочу попробовать классифицировать объекты внутри области вычетания фона и сравнить СНС с "мешком слов". Основных критериев 2: скорость работы и стабильность (24 на 7 всегда работает и нет места, где может упасть).

Можно обучить СНС с помощью cuda-convnet и запрограммировать прямое распространение, но боюсь реализация обучающая СНС может иметь свои хитрости и результаты прямого (моего собственного и из библиотеки) распространения будут отличться.

Есть ли порты cuda-convnet под Win C++?

2. Классфикация объектов полученных с кинекта на роботе. С++ Linux.

  • Like 1

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


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

всем привет, разбираюсь с библиотекой http://conv-net.sourceforge.net/doc/index.html там реализована свёрточная сеть на С++ с использованием opencv.. может кто работал с этой библиотекой. У меня даже xml не может загрузиться вроде бы делаю всё правильно, пробовал загружать mnist.xml и sample.xml результат один

XML Error: no bias found

Error parsing the XML: p at line 29

вылет происходит тут

static void XMLCALL icvXML_EndElementHandler(void *userData, const XML_Char *name)

.....

CHK_POSSIBLE_FAIL( (!(data.isbias & FOUND_VALUE)) && (data.cur_type=="convolution" || data.cur_type=="subsampling"), "no bias found");

.....

ну а потом сообщение о вылете получаем тут

int parse(std::string xml, std::string &creator,

std::string &name,

std::string &info,

std::vector<CvGenericPlane *> &plane,

std::map<std::string,int> &idmap)

........

if ( XML_Parse(parser, xml.c_str(), xml.size(), 1) == XML_STATUS_ERROR )

{

cerr << "Error parsing the XML: " << XML_ErrorString( XML_GetErrorCode(parser) ) << " at line " << XML_GetCurrentLineNumber(parser) << endl;

errcode = 0;

}

......

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


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

по-моему это основная тема про сверточные сети так что напишу тут.

 

попробовал это

https://github.com/sdemyanov/ConvNet

на базе

https://code.google.com/p/cuda-convnet2/

 

по ходу не очень портабельный вариант

пробовал на Matlab R2012a и R2014a И компилятор VS2010 win7 x64, CUDA SDK 6.5, Windows SDK 8.1

матлаб версия не работает на R2012a из-за ф-ии flip, на R2014a ok.

версия 1 ядро cpu работает везде, но надо перекомпилировать prebuild mex файлы из-за разных версий матлаба или компилятора.

параллельная cpu версия не скомпилировалась на матлабе R2012a (использует Openmp), ну

версия с GPU тоже требует рекомпиляции, причем она завязана на Windows SDK 7.0
надо ставить CUDA SDK
и надо править mex_CUDA_win64.xml и vcvars64.bat на версию SDK 7.0A

но в итоге походу этот код только для версий gpu > 3.0

 

и еще тут

https://code.google.com/p/cuda-convnet2/wiki/Compiling

Note: A Kepler-generation GPU with shader model capability 3.5 or greater is required to run this code. This includes the chips GK110 and GK114, which can be found on the GPUs Tesla K20, Tesla K20x, Tesla K40, GeForce Titan, and GeForce GTX 780, among others. Older GPUs, including GK104-based GPUs such as the Tesla K10 and GeForce 680, won't work.

 

так что мне с моей gtx 460 ничего не светит похоже.

 

 

причем скорость
1 CPU< Pure Matlab< Multi CPU        тестировал на E8500 2 ядра.

 

Матлаб версия еще есть в DeepLearningToolbox можно еще попробовать переписать на GPUArray из матлаба с минимальными усилиями.

 

Вообщем резюме таково, что есть смысл ипользовать эту библиотеку только если использовать Multi CPU код с матлаб интерфейсом, т.к. GPU код не портабельный и библиотека еще не очень доработанная.

 

еще тут как они насиловали gtx titan 24 эпох 95 часов на convnet.

от http://kuznech.com/

 

и еще тут рассмотрены подходы

http://habrahabr.ru/post/116625/

http://habrahabr.ru/post/116173/

  • Like 1

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


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

http://benanne.github.io/2014/04/03/faster-convolutions-in-theano.html

неполное сравнение различных реализаций свёрточных сетей, тех что на слуху.

 

 

Еще недавно вышло, еще 1 вариант для использования свёрточных сетей на матлабе.

http://eportal.cityu.edu.hk/bbcswebdav/users/sjren2/~jimmy/vcnn/project.html

Там используются все модные техники: dropout, ReLU, adagrad.

CPU версия использует просто перемножения матриц на матлабе, GPU версия использует самописные CUDA kernels.

 

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

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


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

А кто-нибудь, видел пример использования обученной при помощи cuda-convnet сетки на С++?.

На питоне все это конечно хорошо, но вызывать через питонский API, как то не хочется, да и питон я знаю посредственно.

 

Еще новенький conv-net : https://github.com/xingdi-eric-yuan/conv-net-version-3

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


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

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


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

Удалось найти (правда пришлось самую малость допилить) сверточную нейронную сетку на CUDA, которая не завязана на питон, нормально работает на compute capability 2.0 и компилируется на vs2012. 

Взял отсюда: http://nghiaho.com/?m=201307

Добавил CMake скрипт, исправил ошибки, связанные с сохранением/чтением результатов обучения.

И выложил на GitHub сюда: https://github.com/Smorodov/ConvNN

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


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

Я посмотрел и попробовал caffe но как-то не хватает примеров по использованию обученной сети.

Форматы хранения данных (Блоб)  + гугловские извращения smile.png.

Можно конечно все это перелопатить, но долго это, повременю пока.

Планирую поковырять cuDNN в ближайшем будущем. 

 

Хочу попытаться натаскать сеть на определение пола/возраста/настроения по фоткам. Думаю должно получиться.

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


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

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

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

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

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

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

Войти

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

Войти сейчас


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

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

×