Jump to content
Compvision.ru
Sign in to follow this  
_me_

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

Recommended Posts

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

Share this post


Link to post
Share on other sites

вроде самая крупная 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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

  • Like 2

Share this post


Link to post
Share on other sites

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

матлаб фротэнд сам код на 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 т.к. кол-во памяти ограничено)

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

2 Nuzhny

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

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

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

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

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

  • Like 3

Share this post


Link to post
Share on other sites

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

матлаб фротэнд сам код на 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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

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

Задачи:

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

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

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

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

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

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

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

  • Like 1

Share this post


Link to post
Share on other sites

всем привет, разбираюсь с библиотекой 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;

}

......

Share this post


Link to post
Share on other sites

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

 

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

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

Share this post


Link to post
Share on other sites

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.

 

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

Share this post


Link to post
Share on other sites

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

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

 

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

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

 

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

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

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×