在windows上Matlab 编译MatConvNet

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在windows上Matlab 编译MatConvNet相关的知识,希望对你有一定的参考价值。

windows 10 64 bits

matlab 2015b/2016a

MatConvNet 1.0-beta20 或者从github 下载GIT repository

CUDA GPU Computing ToolKit 7.5

cudnn-rc4/cudnn-rc5

都按照官网http://www.vlfeat.org/matconvnet/

配置好了之后,

编译命令

vl_compilenn(‘enableGpu‘, true, ...
    ‘cudaRoot‘,‘C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v7.5‘,...
    ‘cudaMethod‘, ‘nvcc‘, ...
    ‘enableCudnn‘, true, ...
    ‘cudnnRoot‘, ‘local\\cudnn-rc4‘,...
    ‘verbose‘,‘2‘,...
    ‘debug‘,‘1‘);

  

主要遇到两个问题

1.找不到’cudnn.h’,这个是cudnnRoot路径配置问题,官网的意思是在MatConvNet目录下新建local文件夹,之后把cudnn放到local文件夹下,打开local\\cudnn-rc4应该看到三个文件夹include,bin,lib,编译时要在MatConvNet目录下进行,先输入addpath matlab加入matlab文件路径。提示,直接nvidia官网下载的cudnn解压后应该是多出一级中间目录cuda,比如cudnn\\cuda\\,在编译时可以把cudnn路径写成"local\\cudnn-rc4\\cuda",或者手动把中间目录缩减

技术分享

2.编译vl_compilenn出错

原代码

if opts.enableCudnn
  flags.cc{end+1} = ‘-DENABLE_CUDNN‘ ;
  flags.cc{end+1} = [‘-I‘ opts.cudnnIncludeDir ] ;
end

 文件路径出错,在报错信息里-I后跟cudnnIcludeDir路径没有加双引号 

修改后,一开始很盲目,看了mathworks上的回答采取认真看出错信息,仔细点应该能发现问题

if opts.enableCudnn
  flags.cc{end+1} = ‘-DENABLE_CUDNN‘ ;
  flags.cc{end+1} = [‘-I"‘ opts.cudnnIncludeDir ‘"‘] ;%http://cn.mathworks.com/matlabcentral/answers/264961-having-problem-in-matconvnet-to-compiling-the-cudnn-support "opts.cudnnIncludeDir"
end

github上最新版本已经修复这个问题

3.nvcc 编译MatConvNet\\matlab\\src\\bits\\impl\\nnbilinearsampler_cudnn.cu报错 在250行左右 undefined "backward" identifier

因为在

template<typename type, bool backwardData, bool backwardGrid>
static vl::Error
forward_backward

  函数中缺少backward的定义,仿照前面的

template<typename type>
__global__ void grid_backward_kernel

  函数中的方式在函数开始部分添加

  bool backward = backwardData;//added here for cudnn compile  with undefined ‘backward‘ identifier

 发现backward或者backwardData只是一个bool 型的值作为一个选项 

 

4.编译MatConvNet\\matlab\\src\\bits\\impl\\nnbilinearsampler_cudnn.cu出错,第24行

#warning "bilinearsampler_cudnn.cu will be disabled as it requires CUDNN v5 or higher."

 报,无效的预编译指令“warning” 

原来,gcc,C# 中有#warning指令,MSVC C\\C++中没有#warning 指令,可以用#pragma message "warning ..."代替

 

以上是关于在windows上Matlab 编译MatConvNet的主要内容,如果未能解决你的问题,请参考以下文章

matconv-GPU 编译问题

在windows上Matlab 编译MatConvNet

如何在 Windows 上安装编译器? (对于 Matlab 程序)

我可以在 Windows 上使用 MATLAB 将一些 .m 编译成可以在 Linux 上运行的二进制文件吗?

在 64 位 Windows 7 机器上使用 GCC 作为 MATLAB 2014a 的默认 MEX 编译器

在 Linux/OSX 上从 C 程序运行 matlab 编译的 dll 库