深度学习入门级框架MatConvNet环境配置(Ubuntu14.04+Cuda7.5+Cudnn5+Matlab2014a)

深度学习入门级框架MatConvNet环境配置(Ubuntu14.04+Cuda7.5+Cudnn5+Matlab2014a)

最近深度学习开始入门,用到了深度学习框架MatConvNet。MatConvNet是一个基于matlab的简易入门级框架,可以帮助快速构建深度学习网络,而且支持GPU加速计算(只需一行代码”opts.train.gpus = 1”就可以搞定!完全不用去在意它是如何实现的)
网上没有太多中文资料,只好自己看官网http://www.vlfeat.org/matconvnet/教程和manual。由于没有任何经验,也遇到了不少问题。在这里记录并解决一下,以期能够帮到大家。推荐大家有问题可以去官网查看或者去Github主页上提问。

一、相关软件下载

(一)硬件配置:GeForce GTX 980 Ti
(二)本机系统:Ubuntu14.04,Matlab2014a(Windows版安装教程参考http://blog.csdn.net/zhjm07054115/article/details/49964597
(三)Cuda下载:https://developer.nvidia.com/cuda-downloads,本人使用Cuda7.5,建议离线下载到百度云,再下会快一点。
(四)Cudnn下载:https://developer.nvidia.com/cudnn,本人使用Cudnn5。建议下载cuDNN v5 Library for Linux。很好的GPU加速运行库,亲测速度飙升。可以离线下载到百度云,再下会快一点(可能需要注册Nvidia账号)
(五)MatConvNet下载:https://github.com/vlfeat/matconvnet

二、安装步骤

(一)安装Cuda

建议下载.deb,直接双击安装就好了。

sudo dpkg -i cuda-repo-ubuntu1404-7-5-local_7.5-18_amd64.deb
sudo apt-get update
sudo apt-get install cuda

接着配置环境变量,打开文件.profile(只对当前用户生效):

sudo gedit ~/.profile

在文件的末尾添加如下几行:

export CUDA_HOME=/usr/local/cuda-7.5 
export LD_LIBRARY_PATH=${CUDA_HOME}/lib64 
PATH=${CUDA_HOME}/bin:${PATH} 
export PATH

接着重启电脑,配置生效,安装完毕。

如果已装cuda,可在matlab里使用命令gpuDevice获取toolkit版本信息。

详细步骤可参考http://www.th7.cn/system/lin/201505/105807.shtml

(二)安装MatConvNet

下载后解压到某路径即可,如/usr/local/MATLAB/R2014a/toolbox/matconvnet-master。

tar  zxvf  cudnn-7.5-linux-x64-v5.0-rc.tgz  -C /usr/local/MATLAB/R2014a/toolbox/matconvnet-master

可能需要修改文件夹权限,允许读取和修改。

sudo  chmod -R 777 /usr/local/MATLAB/R2014a/toolbox/matconvnet-master

(三)安装Cudnn

下载cuDNN v5 Library for Linux,建议先在MatConvNet里新建一个文件夹/usr/local/MATLAB/R2014a/toolbox/matconvnet-master/local,并将其解压在local目录下。最终路径为/usr/local/MATLAB/R2014a/toolbox/matconvnet-master/local/cudnn5,cudnn5下包括include和lib64两个文件夹。
(注意:Cudnn解压后文件夹名为cuda,为了方便以后区别,改名为cudnn5。解压到其他目录或者更改其他文件夹命名也是可以的,只需要在下面的编译代码里面改一下路径即可)

(四)编译MatConvNet

(1)安装gcc和g++编译器
编译时需要nvcc编译器和gcc、g++编译器。安装cuda时安装了nvcc编译器,gcc、g++如果以前没有安装的话,需要自己安装。我使用的是gcc4.7、g++4.7。

sudo apt-get  install gcc-4.7
sudo apt-get  install g++-4.7

如果有多个版本的gcc和g++,可通过如下代码来设置优先级。(我安装的时候,不支持gcc4.8、g++4.8,所以我装了两个版本)

sudo update-alternatives --config gcc
sudo update-alternatives --config g++

(2)编译对应的模式
首先运行/matlab/xtest/vlsetupnn.m,在matlab里面添加有关路径。然后就可以开始编译。
总共有CPU、GPU、GPU(with cuDNN support)三种模式,第一次使用前或者更改模式后需要编译对应的模式。

1,CPU模式
速度最慢,为传统的CPU计算方式。EnableImreadJpeg的意思是支持批量读入jpg文件。

vl_compilenn('EnableImreadJpeg','true')

2,GPU
速度一般,正常的GPU计算方式。

vl_compilenn('enableGpu',true)

3,GPU(with cuDNN support)
速度最快,推荐使用这种,可以省不少时间。

vl_compilenn('enableGpu',true,'cudaRoot','/usr/local/cuda-7.5','cudaMethod','nvcc','enableCudnn',true,'cudnnRoot','local/cudnn5')

三、测试

可使用如下代码测试

 % setup MtConvNet in MATLAB
run matlab/vl_setupnn
% download a pre-trained CNN from the web
urlwrite('http://www.vlfeat.org/sandbox-matconvnet/models/imagenet-vgg-f.mat', ...
 'imagenet-vgg-f.mat') ;
net = load('imagenet-vgg-f.mat') ;

% obtain and preprocess an image
im = imread('peppers.png') ;
im_ = single(im) ; % note: 255 range
im_ = imresize(im_, net.normalization.imageSize(1:2)) ;  %resize为224*224大小的矩阵
im_ = im_ - net.normalization.averageImage ;  %averageImage代表ImageNet统计到的图像均值信息,为224*224*3的矩阵<pre 

% run the CNN
res = vl_simplenn(net, im_) ;

% show the classification result
scores = squeeze(gather(res(end).x)) ;
[bestScore, best] = max(scores) ;
figure(1) ; clf ; imagesc(im) ;
title(sprintf('%s (%d), score %.3f',...
net.classes.description{best}, best, bestScore)) ;

也可以直接运行/example/里面的代码进行测试。

Final advice: MatConvNet使用matlab语言,非常容易入门。但如果大家想进一步发展,首先你最好要有个能支持cuda的GPU,否则纯CPU是很慢的,尤其是处理图像的问题。(参考:http://www.aiweibang.com/yuedu/37190766.html)

Theano(基于Python), http://deeplearning.net/tutorial/系列教材就是基于Theano工具的。它的最大优点是支持自动符号求导,避免了初学者很害怕的BP推导,有很多扩展包,比如keras等,支持各类模型。其实列举这一个就够了。因为,如果仔细的话,你会在这个网站看到无数的深度学习相关工作链接,足够慢慢扩展到深度学习的所有前沿研究和工具了。

Torch (https://github.com/torch/torch7/wiki/Cheatsheet),基于lua编程语言(类matlab)。用的人非常多,因此很多常见模块的实现都很全面。

DeepLearnToolbox (https://github.com/rasmusbergpalm/DeepLearnToolbox),基于matlab。代码逻辑清楚,适合跟着代码学习深度学习的每个细节。

Caffe (http://caffe.berkeleyvision.org/),纯c++,科学研究中很多学者常用的工具,文档也很齐全。做物体检测相关任务的话,非常推荐!

Cuda-convnet2 (https://code.google.com/p/cuda-convnet2/),效率高,支持单机多卡。ImageNet2012年冠军Alex的作品!不过代码有点抽象难改,而且只支持GPU并且是特定的几款GPU(也就是说是Alex大神是做过特定GPU优化的)。做简单的分类、回归问题推荐!不支持RNN。

Cxxnet (https://github.com/dmlc/cxxnet),纯c++。优点:支持多机多卡训练,适合公司级的部署。

你可能感兴趣的:(ubuntu,深度学习,GPU加速,matconvnet)