Deep learning вместе с Caffe и Digits часть 1

4.933 (3)

Как известно, существует много походов для машинного обнаружения и классификации объектов, которые используются для решения задач компьютерного зрения. Однако одним из важнейших факторов всех алгоритмов является точность обнаружения и классификации данных. Многие алгоритмы обнаружения являются неустойчивыми к различным признакам или свойствам изображения, на котором будет происходить поиск объекта. Многие объекты, которые приходится распознавать, могут быть повернутые, искажены или же деформированы.

Применения нейронных сетей, для распознавая объекта, позволяет решить эту проблему. Однако не все сети подходят. К примеру одна из наиболее распространенных моделей нейронной сети является многослойный персептрон. Использования такой модели может привести к сильному увеличению времени и вычислительной сложности процесса обучения.

Для устранения данных недостатков применяется свёрточная нейронная сеть.

Свёрточная нейронная сеть (Convolutional neural network или CNN) — это специальная архитектура искусственных нейронных сетей. Данная сеть была предложена Яном Лекуном.

Но что же такое глубинное обучения (Deep learning) и как оно помогает нам для решения задач распознавания и классификации. Глубинное обучения это некий набор алгоритмов машинного обучения, которые пытаются моделировать абстракции в данных. Различные архитектуры глубинного обучения использовались в различных областях и применяются все чаще и чаще, по сравнению с обычными методами. В большинстве задач компьютерного зрения, в которых были применено глубинное обучение, показало лучший на данный момент результат.

Данная свёрточная сеть (CNN), о которой пойдет дальше речь, нацелена на эффективное распознавания изображения и входит в состав глубокого обучения.   

На рисунке ниже изображена типовая архитектура свёрточной нейронной сети.

neural network

Рисунок 1 — Архитектура свёрточной нейронной сети

Работа CNN в основном обеспечивается несколькими элементами, такими как фильтры и карта признаков. Сама идея работы заключается в построение чередующихся слоев, таких как convolution и subsampling

К преимуществам работы с такой сетью можно отнести то, что данный метод имеет устойчивость к повороту и сдвигу распознаваемого изображения а также имеет удобное распараллеливание вычислений. 
Для работы с CNN разрабртано несколько фреймворков. Одним из таких является  Caffe. Данный фреймворк в свой работе может использовать GPU, что значительно ускоряет процесс вычислений.  
Давайте попытаемся его поставить. Данный фреймворк мы будем использовать в дальнейшем в связке с Digits, о котором мы в дальнейшем поговорим. 
Для начала нам необходимо создать папку куда мы будем все устанавливать и перейдем в эту папку:

mkdir caffe
cd caffe

Теперь нам необходимо скачать сам фреймворк. 

git clone --branch caffe-0.12 https://github.com/NVIDIA/caffe.git

Установим переменную окружения для того что бы digits знал где установлен caffe

 export CAFFE_HOME=<path to caffe dir>/caffe

Также нам понадобятся некотрые зависимости для установки:

sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler libatlas-base-dev
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install python-dev python-pip python-numpy gfortran

переходим в нащу папку, куда мы скачали и устанавливаем зависимости для python 

cd $CAFFE_HOME
for req in $(cat python/requirements.txt); do pip install $req; done

создаем папку в которй мы будем собирать наш фреймворк

 mkdir build
 cd build
 cmake ..

после выполнения команд мы получим информацию о том, что у нас будет использоваться:

Из этой информации нам необходимо следующие моменты:
- CPU_ONLY должно быть off так как нас поддержка GPU является приоритетной задачей без которой мы не сможем идти дальше.

Компоненты из подраздел dependencies должены быть установлены в полном составе. Дальше  у меня начлись "интерсные моменты" smiley, которые были связаны с програмным обеспечением, уже установленным на моем компьютере. 
У меня уже была развернута OpenCV и некоторые из библиотек, и уже было проще. Однако на моменте  установки CUDA возникли  проблемы, приходилось по несколько раз менять  версии различных библиотек.  

На данный момент на моем рабочем компбьютере установлена OS Ubuntu 14.04 и для данной версии кернел дожен быть 3.13 иначе cuda не будет поддерживается. 

 Поддерживаемый версии Вы можете найти на сайте nvidia: http://docs.nvidia.com/cuda/cuda-getting-started-guide-for-linux/#axzz3xyJKp8Z1

Для установки cuDNN берите 3 версию, покрайней мере у меня возникла проблема компиляции  caffe с 4 версией. Изначально я взял 4 версию, и примерно когда прошла треть компиляции появилась непонятная ошибка. После долгих безуспешных поисков я взял 3 версию и компиляция прошла успешно. 
Для установки необходимо скачать архив и скопировать необходимый фалы

tar -zxf cudnn-7.0-linux-x64-v3.0-prod.tgz
cd cuda
sudo cp lib64/* /usr/local/cuda/lib64/
sudo cp include/cudnn.h /usr/local/cuda/include/

После этого все заработало без проблем. Продолжение следует ...

 

Комментарий (0)

Войдите с помощью соцсетей:
или
введите свои данные: