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

в 5:39, , рубрики: CUDA, deep learning, gpgpu, open source, искусственный интеллект, нейросети, метки: , , , ,

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

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

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

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

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

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

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

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

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

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

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

Автор: intelligenceAgent

Источник

Поделиться

* - обязательные к заполнению поля