red-lesion-detection编译matconvnet问题记录

MatconNet版本:https://github.com/vlfeat/matconvnet

可编译版本vl_compilenn.m链接

总结:

必须修改

170:opts.continue         = true;

179:opts.debug            = true;

359:flags.mexlink = {'-lmwblas'} ; %这个选项和后续619是等价的,可视情况任选

646:cl_path = fullfile(cc.Location, 'VC', 'Tools', 'MSVC','14.27.29110','bin','Hostx64','x64');

619:flags.mexlink(1)=[];

686:for v = {'5.5', '6.0', '6.5', '7.0', '7.5', '8.0', '8.5', '9.0', '9.5', '10.2'}

可修改可不修改

184:%   '-gencode=arch=compute_20,code=\"sm_20,compute_20\" '...

367:  sprintf('-I"%s"',fullfile(toolboxdir('parallel'),'gpu','extern','include')), ...

运行:vl_compilenn('enableGpu', true, 'cudaMethod', 'nvcc', 'cudaRoot', 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2', 'enableCudnn', true, 'cudnnRoot', 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2')

有时候上述一句也不完全可以搞定,vl_compilenn('enableGpu', true) 和vl_compilenn('enableGpu', true, 'enableCudnn', true)这两个可以交替的运行让前面的编译成功,后续再进行链接

运行:vl_setupnn

在第10轮链接时候,620行删除 flags.base如下

flags.mexlink(1)=[]

args = horzcat({'-outdir', mex_dir}, ...
   flags.mexlink, ...
  {['LDFLAGS=$LDFLAGS ' strjoin(flags.mexlink_ldflags)]}, ...
  {['LDOPTIMFLAGS=$LDOPTIMFLAGS ' strjoin(flags.mexlink_ldoptimflags)]}, ...
  {['LINKLIBS=' strjoin(flags.mexlink_linklibs) ' $LINKLIBS']}, ...
  objs) ;
opts.verbose && fprintf('%s: MEX LINK: %s\n', mfilename, strjoin(args)) ;
mex(args{:})

链接成功

或者直接采用以下两句

flags.mexlink(1)=[]

flags.base=[]

1. 运行dr_setup.m

错误使用 vl_compilenn>check_clpath (第 577 行)
Unable to find cl.exe

出错 vl_compilenn (第 400 行)
    check_clpath(); % check whether cl.exe in path

出错 dr_setup (第 78 行)
        vl_compilenn('EnableGpu',false);

解决办法:

646行替换为

cl_path = fullfile(cc.Location, 'VC', 'Tools', 'MSVC','14.27.29110','bin','Hostx64','x64');

 

2. 编译cuda不存在

>> 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

解决办法:

第608行

for v = {'5.5', '6.0', '6.5', '7.0', '7.5'}

加上自己cuda版本号可后续执行

for v = {'5.5', '6.0', '6.5', '7.0', '7.5', '10.2'}

3. 1.25版本.1,2,错误后紧接着出现5这个错误如下

错误使用 vl_compilenn>nvcc_compile (第 615 行)
Command "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\bin\nvcc" -c -o "C:\Applications\MATLAB
R2020b\toolbox\matconvnet-1.0-beta25\matlab\mex\.build\bits\data.obj" "C:\Applications\MATLAB R2020b\toolbox\matconvnet-1.0-beta25\matlab\src\bits\data.cu"
-DENABLE_GPU -DENABLE_DOUBLE -O -DNDEBUG -D_FORCE_INLINES --std=c++11 -I"C:\Applications\MATLAB R2020b\extern\include" -I"C:\Applications\MATLAB
R2020b\toolbox\distcomp\gpu\extern\include" -gencode=arch=compute_50,code=\"sm_50,compute_50\"  --compiler-options=/MD --compiler-bindir="C:\Program Files
(x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\bin\Hostx64"  failed.

出错 vl_compilenn (第 487 行)
      nvcc_compile(opts, srcs{i}, objfile, flags) ;

解决办法:https://blog.csdn.net/CsdnWujinming/article/details/89221565

说修改debug为:true

4. 按照3中描述修改,报错如下

错误使用 mex
'C:\Applications\MATLAB R2020b\toolbox\matconvnet-1.0-beta25\matlab\mex\vl_nnconv.mexw64' 使用了 '-R2018a' 进行编译并与 '-R2017b' 链接在一起。 有关详细信息,请参阅 MEX 文件
使用了一个 API 进行编译并与另一个 API 链接在一起。

出错 vl_compilenn>mex_link (第 627 行)
mex(args{:}) ;

出错 vl_compilenn (第 500 行)
  mex_link(opts, objs, flags.mex_dir, flags) ;

解决办法:在619行增添

flags.mexlink(1)=[]; % 源文件没有此行,连接错误通过提示将里面的第一个参数删去,可成功链接

之前成功过一次

使用matconvnet-1.0-beta25编译成功

red-lesion-detection编译matconvnet问题记录_第1张图片

5. 但是需要允许cuDnn编译,又出错,于是

170行opts.continue         = true; 采用下方语句编译执行成功

vl_compilenn('enableGpu', true, 'cudaMethod', 'nvcc', 'cudaRoot', 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2', 'enableCudnn', true, 'cudnnRoot', 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2')

乱七八糟的每个固定的解决方案,这次用上面的语句不行

vl_compilenn('enableGpu', true)成功编译

6. 尝试将 SCRIPT vl_nnconv 作为函数执行出错

找找此文提示:https://blog.csdn.net/Dandelion_2/article/details/102893100

重新运行:vl_setupnn

7. 今天运行又出现出错误删掉,重新编译

2020b 取消对 toolboxdir('distcomp') 的支持

  sprintf('-I"%s"',fullfile(toolboxdir('distcomp'),'gpu','extern','include')), ...

替换为

  sprintf('-I"%s"',fullfile(toolboxdir('parallel'),'gpu','extern','include')), ...

你可能感兴趣的:(red-lesion-detection编译matconvnet问题记录)