一、安装(可见大神windows下编译Matconvnet的方法(CPU和GPU))
1.(本人)安装matlab2015b、Visual Studio 2015
2.官网Home - MatConvNet下载matconvnet工具包,我的名字是matconvnet-1.0-beta25,然后解压文件到 matconvnet-1.0-beta25中, 然后按照官网安装需要的gcc,CUDA等
3.CUDA + cudnn(这两个也可以没有,CPU only)
4.编译安装
编译前,Matlab应该已经绑定C++编译器了。否则,会出错。Windows下安装Visual Studio即可,Linux下有自带的GCC
先进行CPU版本的编译。在Matlab中打开Matconvnet工具包,使得当前目录窗口显示Matconvnet文件夹里面的子目录。
在Matlab中输入mex -setup,绑定C++编译器
输入mex -setup C++
打开Matlab,将工作路径切换到…/matconvnet-1.0-beta25
在Matlab中执行命令: addpath matlab。添加搜索路径。
在Matlab中执行命令:vl_compilenn。编译工具箱。
在Matlab中执行命令:vl_setupnn。设置工具箱。
至此,工具箱已经安装完毕。
测试
在matlab中执行命令:vl_testnn。
由此完成CPU 下matconvnet的编译。
编译完之后会多了一个mex文件夹,在matlab文件夹下面。
这里的mex文件夹下就是以后要调用的程序,有
编译完之后应该有除了cudnn64_4.dll外的mexw64文件,可以看出,这些文件主要是vl_conv,vl_imreadjpeg等。这些文件是由cuda C写的,并不是由MATLAB语言写的,格式是 xx.cu。然后通过mex将这些.cu文件编译成可以由MATLAB调用的函数,也就是说mexw64就相当于MATLAB的函数文件xx.m一样了。你可以看看MATLAB下面的vl_nnconv.m,可以看到文件里面全部都是注释,这样的话,调用时咋运行的啊。哈哈,原来要先编译,编译好了多了mex文件,调用时是调用mexw64文件啊。这里的cudnn64_4.dll是后面用gpu编译时用到的。
matconvnet配置GPU
第一步:需要安装cuda、VS2015,cuda默认路径,注意cuda版本和GPU要匹配
cuda下载地址:https://developer.nvidia.com/cuda-downloads
第二步:下载cudnn,在matconvnet文件夹下建一个local文件夹,然后把cudnn放进去 (我改了文件名称为cudnn-rc4)
第三步: 建一个local文件夹,然后把cudnn-rc4放进去,再复制到matconvnet目录下。
第四步:把bin下的cudnn64_4.dll再复制到mex的文件夹下。这一点很重要,否则vl_compilenn即使编译成功,运行时却会出现Invalid 的vl_nnconv.mexw64,可是你一看明明有这个文件啊,并且cpu编译时这个文件也是可以用的,为啥现在就不能了,就是你没有做第二步。
第五步:先看看vl_compilenn写了啥,打开vl_compilenn.m,运行,等待编译结束
在vl_compilenn中已经对opts的enableGpu等属性进行了初始化。
这是稍微修改后的,这里改不改我这样的都无所谓的,这是因为,你看看下面有vl_argparse(opts,varargin),这个就是把外面的传入的参数再对opts进行赋值。
第六步:复制以下code到matlab命令窗,更改相应路径和文件夹名称,运行,等待编译结束。
vl_compilenn('enableGpu',true,'cudaRoot','C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v7.5','cudaMethod' ,'nvcc','enableCudnn','true','cudnnRoot','local/cudnn-rc4')
第七步:找到cnn_cifar后,然后修改opts.gpus。更改选项,opts.train.gpus= [1]; 表示用GPU,[ ] 表示用CPU,千万别[0]