- PVSM.RU - https://www.pvsm.ru -

Отдам библиотеку в хорошие руки

Давным давно, в 2008 году, когда я работал над своей диссертацией меня заинтересовала тема применения сверточных нейронных сетей для задач распознавания изображений. На тот момент они еще не были так популярны как сейчас и попытка найти готовые библиотеки ни к чему не привела — нашлась только реализация на Lush (языке созданном автором сверточных сетей, Яном ЛеКуном). Тогда я подумал, что можно было бы их реализовать на Матлабе используя Neural Network Toolbox. Но столкнулся с невозможностью реализации разделяемых весов в рамках этого тулбокса. И тогда было принято решение написать собственную реализацию.

Первоначально она была сделана на чистом матлабе. Чуть позже я реализовал функции прямого и обратного распространения на CUDA. Эта версия лежит на Matlabcentral [1] и до сих пор имеет по 162 закачки в месяц.
Это, кстати, была первая в интернете версия сверточных сетей на CUDA.
image

Используя эту реализацию я написал пост Применение нейросетей в распознавании изображений [2].

Поняв что интерес к теме очень большой, я решил переписать библиотеку и сделать ее полностью на C++/CUDA оставив поддержку Матлаба как фронтенда. Так появилась CudaCnn [3]. Эту разработку я уже, по сути, вел в свободное от работы время. Позже я поменял работу и мои возможности вести open source разработку стали очень ограниченными.

С момента начала работы над библиотекой тема сверточных нейронных сетей и deep learning стала очень популярной. Особый всплеск популярности произошел после того как команда Джефри Хинтона, используя свою реализацию сверточных сетей на CUDA (написанную Алексом Крыжевским) победила с большим отрывом от конкурентов в конкурсе Large Scale Visual Recognition Challenge. Сейчас Google использует эту технологию для поиска по картинкам.

Сейчас моя библиотека хостится на bigbucket [4], страницу с описанием посещает порядка 130 человек в месяц:
image
что конечно-же совсем немного для какого-нибудь блога, но для весьма специализированной библиотеки рассчитанной на узкий круг исследователей не так уж и мало. Кстати, основная масса посещений из Штатов и Китая. Кроме того, мне периодически пишут пользователи с просьбой что-нибудь добавить или исправить и у меня даже не всегда есть время им ответить.

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

  • Возможность работы на CPU и GPU (CUDA)
  • Кросс-платформенная (на основе CMake), в т.ч. компилируется под ARM с некоторыми ограничениями
  • Методы обучения: стохастический градиент, стохастический Левенберг-Марквардт
  • Слои: convolutional, pooling, fully connected
  • Активационные функции: тангенциальная, линейная, тангенциальная с нормализованной дисперсией
  • Произвольный размер и форма ядер свертки (в других реализациях есть ограничения)
  • Наличие фронт-энда для Matlab

Также есть вещи над которыми еще стоило бы поработать. В частности, код для CPU не оптимизирован по скорости, CUDA код тоже есть куда развивать, не помешала бы doxygen документация.

Как я уже отметил выше, у меня на данный момент не осталось ни времени ни возможностей для поддержки библиотеки, поэтому если кого-то заинтересует участие в ее развитии, я готов оказать всяческую помощь. Думаю это может быть полезным для тех, кому хотелось бы поучаствовать в open source проекте, плюс получить опыт в области Machine learning, применить технологии deep learning для своих задач, получить опыт CUDA разработки.

Кто заинтересовался, пишите мне в ЛС.

Автор: intelligenceAgent

Источник [5]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/open-source/40968

Ссылки в тексте:

[1] Matlabcentral: http://www.mathworks.com/matlabcentral/fileexchange/24291-cnn-convolutional-neural-network-class

[2] Применение нейросетей в распознавании изображений: http://habrahabr.ru/post/74326/

[3] CudaCnn: https://sites.google.com/site/mihailsirotenko/projects/cuda-cnn

[4] хостится на bigbucket: https://bitbucket.org/intelligenceagent/cudacnn-public/wiki/Home

[5] Источник: http://habrahabr.ru/post/190132/