参考:MATLAB安装MatConvNet笔记 - 知乎
安装过程:
1. 安装依赖项
确保一下软件和依赖已经被安装并设置为最新版本:
- MATLAB
- CUDA toolkit(如果您要使用GPU加速)
- cuDNN(如果您要使用GPU加速)
- Microsoft Visual Studio(我的是2015)
2.配置编译器
在Matlab中输入mex -setup,绑定C++编译器
mex -setup
3. 下载并配置MatConvNet
在MatConvNet的GitHub页面上下载最新的稳定版本, matconvnet下载地址:Home - MatConvNet 。 下载的matconvnet深度学习工具包,我这里用的是最新版本matconvnet-1.0-beta25,下载后解压放到“E:\XYL\matlab2014b”路径下。
4.编译CPU版
matlab中切换到matconvnet-1.0-beta25的路径下:
(1)编译CPU版:
addpath matlab
vl_compilenn
vl_testnn
(2)编译GPU版-第一种方法,我没试过
这种方法应该不用把cudnn的文件夹拷贝到matconvnet文件夹中:
vl_compilenn('enableGpu',true,'cudaRoot','C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2','cudaMethod' ,'nvcc','enableCudnn','true','cudnnRoot','C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA')
参考:https://zhuanlan.zhihu.com/p/138587666
(2)编译GPU版-第二种方法
在matconvnet的安装目录下新建一个文件夹local/cudnn,将下载的cudnn放进去:
注:因为我之前就配好了CUDA环境,所以cudnn文件放在C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.2路径下,因此我将bin、include和lib三个文件夹拷进去即可
cudnn文件夹位置
将cudnn文件放入matconvnet-1.0-beta25local/cudnn下
执行以下命令:
addpath matlab # 添加到路径中
vl_compilenn('enableGpu', true);
vl_testnn('gpu', true); # 测试
显示编译成功了:
E:\XYL\matlab2014b\matconvnet-1.0-beta25\matlab中还会多出一个mex文件夹
问题记录:
1.Matlab 未找到支持的编译器或 SDK
使用
mex -setup
配置编译器时,报错:Matlab 未找到支持的编译器或 SDK
这是因为我的是matlab2014和VS2015,win10的64位系统。matlab2014的bin/win64/mexopts文件夹中最高支持的VS编译器是2013,不想重新安装VS的同学,就只能找高版本中的mexopts文件夹对应的VS版本支持.xml文件
第一种解决办法:
这是因为:
VS版本不要高于matlab能支持的最高VS版本(这个可以在R2019a/bin/win64/mexopts文件夹下可以看到),否则要在mexopts中补充相应版本的几个VS的xml文件。文件下载链接见:GitHub - tzslg/mexopts: mexopts,matlab,visual studio(最高仅支持VS2019 xml文件,所以VS版本不要下载太高)
第二种解决办法:
我也是用的matlab2014和VS2015,win7的64位系统。方法如下:
1.下载附件mexopts.rar(从10楼下载的,见下方的附件)
2.找到你电脑matlab的安装路径:D:\Program Files\MATLAB\R2015b\bin\win64\mexopts (你的安装路径可能会不同,找到bin文件夹就好)
2.解压以后,msvcpp2015.xml和msvc2015.xml两个文件,拷到第2步里的mexopts文件夹下就完成了。
(你会看到mexopts文件夹下已经有很多类似的文件,只是版本是2015之前的:
msvcpp2008.xml和msvc2008.xml——支持vs2008
msvcpp2010.xml msvc2010.xml——支持vs2010
msvcpp2012.xml和msvc2012.xml——支持vs2012
msvcpp2013.xml和msvc2013.xml——支持vs2013
)
参考:
附件链接https://www.ilovematlab.cn/forum.php?mod=redirect&goto=findpost&ptid=298097&pid=3062307
附件在CSDN上也有:
参考:
2.编译cuda不存在
在使用命令
vl_compilenn('enableGpu',true)
编译的时候
报错:
>> vl_compilenn('enableGpu',true)
错误使用 vl_compilenn>search_cuda_devkit (第 636 行)
Could not find a valid NVCC executable\n
出错 vl_compilenn (第 256 行)
if isempty(opts.cudaRoot), opts.cudaRoot = search_cuda_devkit(opts) ; end
解决办法:
vl_compilenn.m 的 第699行
for v = {'5.5', '6.0', '6.5', '7.0', '7.5'}
加上自己cuda版本号可后续执行,我的cuda版本是10.2
for v = {'5.5', '6.0', '6.5', '7.0', '7.5', '10.2'}
参考:red-lesion-detection编译matconvnet问题记录 | 码农家园
3.nvcc fatal : '-DNDEBUG': expected a number
nvcc fatal : '-DNDEBUG': expected a number
错误使用 vl_compilenn>nvcc_compile (line 615)
Command "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\nvcc" -c -o
"E:\matconvnet\matlab\mex\.build\bits\data.obj"
"E:\matconvnet\matlab\src\bits\data.cu" -DENABLE_GPU
-DENABLE_DOUBLE -O -DNDEBUG -D_FORCE_INLINES --std=c++11 -I"D:\Softwares\MATLAB\extern\include"
-I"D:\Softwares\MATLAB\toolbox\distcomp\gpu\extern\include" -gencode=arch=compute_75,code=\"sm_75,compute_75\" --compiler-options=/MD
--compiler-bindir="D:\Softwares\VisualStudio\VC\Tools\MSVC\14.16.27023\bin\Hostx64" failed.
出错 vl_compilenn (line 487)
nvcc_compile(opts, srcs{i}, objfile, flags) ;
将vl_compilenn.m,将606行的nvcc_compile函数改为:
% --------------------------------------------------------------------
function nvcc_compile(opts, src, tgt, flags)
% --------------------------------------------------------------------
mybase=flags.base;
mybase(3)={'-O3'};
if check_deps(opts, tgt, src), return ; end
nvcc_path = fullfile(opts.cudaRoot, 'bin', 'nvcc');
nvcc_cmd = sprintf('"%s" -c -o "%s" "%s" %s ', ...
nvcc_path, tgt, src, ...
strjoin(horzcat(mybase,flags.nvcc)));
opts.verbose && fprintf('%s: NVCC CC: %s\n', mfilename, nvcc_cmd) ;
status = system(nvcc_cmd);
if status, error('Command %s failed.', nvcc_cmd); end;
主要修改为mybase=flags.base; 、mybase(3)={'-O3'}; 和 strjoin(horzcat(mybase,flags.nvcc))); 这三行。