DL实战(3):cfNet- Matlab配置

参考教程:https://www.jianshu.com/p/bd5f49f900a3

一、安装MatConvNet

下载地址:http://www.vlfeat.org/matconvnet/
解压后添加路径到matlab,

cd D:\MATLAB2016b\toolbox\matconvnet-1.0-beta25 %解压路径
addpath matlab

测试:

>> vl_compilenn

报错:

错误使用 vl_compilenn>check_compability (line
535)
Unsupported VS C++ compiler, ver >=14.0
required (VS 2015).

出错 vl_compilenn (line 197)
check_compability(arch);

解决:

安装高版本的C++编译器,参考:
https://blog.csdn.net/rong_toa/article/details/79002711
设置环境变量,添加到matlab环境中:
http://blog.sina.com.cn/s/blog_167bbdec10102x113.html

再测试报错

>> vl_compilenn
'cl.exe' 不是内部或外部命令,也不是可运行的程序 
或批处理文件。 
错误使用 vl_compilenn>check_clpath (line 656)
Unable to find cl.exe

出错 vl_compilenn (line 426)
    cl_path = fileparts(check_clpath()); % check
    whether cl.exe in path

解决:

1、使用VS2017的C++编译器
其实我之前电脑有装VS2017的,但是matlab2016b和matlab2017a有个bug就是不能识别这个编译器,根据版本下载对应的补丁(https://ww2.mathworks.cn/support/bugreports/1487958?s_tid=mwa_osa_a)到matlab安装路径(在matlab中运行matlabroot语句可查看)中,将压缩包中对应的文件覆盖到安装路径对应的路径上。运行mex -setup修改默认编译器:

mex -setup

2、在我的电脑搜索cl.exe,我的cl.exe是在

D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\SDK\ScopeCppSDK\VC\bin

将其复制到MatConvNet的解压路径下即可。

再测试还报错

>> vl_compilenn
使用 'Microsoft Visual C++ 2017' 编译。
错误使用 mex
data.cpp
c1xx: fatal error C1060: 编译器的堆空间不足

百度谷歌了一天多,都无解,卒。生无可恋之时,抱着侥幸心理解压了之后下载的VITAL代码,发现里面也配送matconvnet工具箱,运行里面compile_matconvnet.m代码,出现警告: 名称不存在或不是目录,这个不管。然后再运行matconvnet下子文件夹matlab中的vl_compilenn.m,神了奇,竟然编译成功了:

>> cd D:\Tracking\backup\Vital_release-master\Vital_release-master\matconvnet
>> addpath matlab
>> vl_compilenn %CPU
Starting parallel pool (parpool) using the 'local' profile ... 
使用 'Microsoft Visual C++ 2017' 编译。
MEX 已成功完成。

至于GPU的编译依旧是困难重重啊

%把cudnn放在当前路径下的local里面,与matlab文件夹同级
>>addpath(genpath('当前路径')) 
>>vl_compilenn('enableGpu',true,'cudaRoot','C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v7.5', 'cudaMethod' ,'nvcc', 'enableCudnn','true', 'cudnnRoot','local/cuda') %GPU

报错

nvcc fatal   : nvcc cannot find a supported version of Microsoft Visual Studio. Only the versions 2010, 2012, and 2013 are supported

解决:忘了查了百度谷歌多久了,无意间看到一个方法,结合自己的实际情况,我大胆地尝试了一下:
直接打开VS2013 x64 兼容工具命令提示

cd c:\

"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\bin\nvcc" -c "D:\Tracking\backup\Vital_release-master\Vital_release-master\matconvnet\matlab\src\vl_imreadjpeg.cu" -DNDEBUG -DENABLE_GPU -DENABLE_CUDNN -Ilocal/cuda -D__SSSE3__ -I"D:\MATLAB2016b\extern\include" -I"D:\MATLAB2016b\toolbox\distcomp\gpu\extern\include" -Xcompiler /MD -o "D:\Tracking\backup\Vital_release-master\Vital_release-master\matconvnet\matlab\mex\.build\vl_imreadjpeg.obj"

注:上面这么长的一段其实我在matlab下断点中得到的,在vl_compilenn.m中的nvcc_compile函数里面打印输出nvcc_cmd这个变量,然后改一下xxx.cu文件所在的路径(打印输出的是相对路径,改为绝对路径)。
然后我一个个.cu文件就这样在VS2013 x64 兼容工具命令提示进行编译。总体是顺利的,除了nnpooling_cudnn.cu和nnconv_cudnn.cu外,对于这2个后来我把cudnn换成V4和V2也就好了。
对于后缀是.cpp的文件,直接在matlab运行就行(注释掉以下这一句代码

nvcc_compile(opts, srcs{i}, toobj(bld_dir,srcs{i}), flags.nvcc) ;

建议mex_compile和mex_link分开编译。如果不成功,就mex-setup换一个C++编译器,好像有的地方我用的是VS2012有的是VS2013。这样就大功告成了。
测试运行

>> vl_test_nnlayers

PS:偷懒快捷的方法

感谢这个博客的作者,http://blog.sina.com.cn/s/blog_679e13290102v6o8.html
直接用作者编译好的(windows-CPU)matconvnet-1.0-beta7(链接:http://pan.baidu.com/s/1o62thOI 密码:pqij),用VS2012的c++编译器(作者是VS2010),我也编译成功了!实在太感人了!
ps:vs2017找不到MFC解决方案:
https://jingyan.baidu.com/article/77b8dc7f8bdf216174eab689.html
下面这个是我经过上面重重困难编译成功的,大家可以试试能不能直接拿去用,就是先下载vital的代码,然后解压放在里面matlab文件夹里面,与src、xtest文件夹同级。祝好!
链接:https://pan.baidu.com/s/1LKUbdW4svhYRBDtedj1K4g 密码:4uza

猜你喜欢

转载自blog.csdn.net/weixin_38493025/article/details/80700774