首先,matconvnet是牛津大学视觉组研发的一个深度学习框架(Matconvnet:Convolutional neural network for MATLAB),主要定位实现深度学习中卷积神经网络(CNN),作为一个MATLAB工具箱,简单且高效,主要以matlab为平台开发,直观易懂,是入门CNN的一个很好的工具。在文件中有许多已经训练好的近年来比较有名卷积神经网络实例及优化方法,在官网上还有很多与训练模型(http://www.vlfeat.org/matconvnet/)。可以用于图像分类、检测,分割、人脸识别、文本检测等多个方面,matconvnet的运行版本有两种,cpu和gpu版本,运行环境也有windows和linux区别,在本文中,旨在介绍一下windows下matconvnet的两种版本的配置情况,linux环境下的两种版本的配置会在后续的博文中详细介绍。
主要参考:https://blog.csdn.net/jiejiaodebeiying/article/details/53954019
主要要件:
系统要求:window7/window8/window10(linux版本暂不介绍,其实流程一样,通过脚本编译安装);
编译器:VS2013及以上,需对应matlab版本号(https://cn.mathworks.com/support/sysreq/previous_releases.html);
建议使用VS2015+matlab2013以后的版本,备选:VS2013。本人使用VS2015+matlab2017b。
matlab:matlab2013及以上版本(自行下载安装);
Nvidia CUDA驱动软件(http://www.nvidia.cn/Download/index.aspx?lang=cn);
CUDA安装包(https://developer.nvidia.com/cuda-toolkit);
Cudnn安装包(https://developer.nvidia.com/rdp/cudnn-download );
Matconvnet工具包(可以下载最新的版本,有最新的模型与算法更新,http://www.vlfeat.org/matconvnet/)
一台计算能力2.1以上的电脑(安装驱动之后,可通过>>>gpuDevice()这条matlab语句查看),要求Nvidia GPU(GTX,TiTan等);
CPU配置:
相对简单,按顺序下载安装好matlab、vs;
定位到下载的matconvnet工具箱文件夹,加入到工作路径;
matlab命令行:>>>mex -setup;选择c++编译器(使用vs的编译器)
>>>vl_setupnn
>>>vl_compilenn
依次执行,会有一些编译信息出现,只要编译器与matlab版本对应,一般不会报错。最终会生成一个mex文件夹,编译过程如下:
文件夹mex如下,采用cu编写的源文件,是vs编译生成的动态链接库文件,以后调用的是这些文件(dll文件是后面gpu编译要用到的);
至此,cpu的工具箱编译过程就完成了,随后可以运行example里面的实例,如mnist,cifar10等,以及进一步学习教程文档(MatConvNet.pdf);
下面着重介绍GPU的配置与编译:
相对较复杂,需要严格的版本匹配,更多信息可以参阅Cuda官网(https://developer.nvidia.com/cuda-toolkit)。
首先之前的软硬件条件达到,GPU,VS,Matlab是最基本的。
其次再下载对应GPU的cuda驱动,解压默认安装即可,若下载最新版cuda还会自动更新这个cuda驱动。。
第三步,下载匹配matlab的cuda版本,详见图:
我选择cuda8.0以及matlab2017b,因为据说tensorflow 1.4不支持cuda9.0,且tensorflow1.0版本以上是不支持cuda8.0以下的,所以暂时只能装cuda8.0,这里我为了通用性就选了这个配置。
注意自己电脑的系统,选择对应的cuda版本。
而且cuda8.0对应的cuDNN必须是6.0版的。
cuda8.0,在cuda下载页面,Legacy Releases,找到旧版本下载地址,然后按默认方式下载安装即可。
另外一种可选方式是:matlabR2016a,安装了最新的cuda7.5,以及下载cuda7.5-cudnn-v5.1而不是cuda7.5-cudnn-v6,然后可以成功的编译。可以发现这是对应cudnn版本不匹配问题,可以发现配置环境,发现匹配的版本是多么重要!!!
最后安装cudnn,在matconvnet-1.0-beta20中建一个local文件夹(与example和matlab等同一”级别”),然后把cudnn放进去,如下图所示:
一定不要忘了最后这两步:
1、把cudnn中的bin,lib/x64,include中的文件分别拷贝至 C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v8.0中的bin,lib/x64,include三个子目录下。(这里的路径对应cuda的安装路径)
2、把bin下的cudnn64_4.dll再复制到mex的文件夹下。这一点很重要,否则vl_compilenn即使编译成功,运行时却会出现Invalid 的vl_nnconv.mexw64,可是你一看明明有这个文件啊,并且cpu编译时这个文件也是可以用的,为啥现在就不能了,就是你没有做第二步
最后就可以愉快的编译gpu版本的matconvnet了,重新编译vl_compilenn程序,使用如下脚本:
>>>
vl_compilenn('enableGpu',true,'cudaRoot','C:/ProgramFiles/NVIDIA GPU Computing Toolkit/CUDA/v8.0','cudaMethod','nvcc','enableCudnn','true','cudnnRoot','local/cudnn-rc4')
最后一个参数可以换成绝对路径,在其他版本cudnn文件夹可能显示为cudnn-rc4或者cuda,如:
- % % with cudnn
- vl_compilenn('enableGpu', true, ...
- 'cudaRoot', 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0', ... % 这里填写你的CUDA的安装路径,基本上是这个位置
- 'cudaMethod', 'nvcc', 'enableCudnn', 'true', ...
- 'cudnnRoot', 'C:\Users\matconvnet-1.0-beta23\matconvnet-1.0-beta23\cudnn-8.0-windows10-x64-v5.1\cuda'); % 这里填写你的cuDNN的路径
里面的几个参数应该都能够看懂,这里的cudnnRoot就是查找文件夹local的cudnn-rc4,当然也可以把之前建立的local文件夹设置成别的名字,只不过修改完之后在这里需要将cudnnRoot的名字改成新的文件夹的名称。
这里可能会报一个错:
解决办法,参见博客:https://blog.csdn.net/xueshanchina/article/details/78808159
这里
if strcmp(arch, 'win64') && opts.enableCudnn
两个变量左边是逻辑变量(1 或 0),右边返回变量是(true)
把 && 修改成 & 就可以了,如下:
if strcmp(arch, 'win64') & (opts.enableCudnn)
运行成功!
最后,如何运行gpu版本的example中的示例程序(以mnist手写数字程序为例)
很简单,只需将cnn_mnist.m程序中的opts.train.gpus改成1即可:
到此,windows下matconvnet的cpu与gpu版本的已经配置完成。
心得:
刚开始配置的时候遇到了不少的坑,好在有网上各位大牛们的帮忙,看了很多的博客,于是想做个初步的总结,作为初学者有什么错误或是不明白的地方还希望童鞋们能够多多指点,多多交流,我们共同进步。
还有我上面的环境配置只是window版本的matconvnet配置,在linux版本下的配置还有很多不同,实践了以后我会尽快加上。
以上就是windows下编译Matconvnet的环境配置(CPU和GPU版本)的全文介绍,希望对您学习Windows的使用有所帮助.
安装过程中,如果需要重装cuda,可参考:
https://blog.csdn.net/shuiyuejihua/article/details/78738664
https://blog.csdn.net/u012436149/article/details/53163346