MatConvNet是实现深度学习中卷积神经网络(CNN)的MATLAB工具箱,简单且高效,在文件中有许多已经训练好的近年来比较有名卷积神经网络实例及优化方法,可以用于图像分类、分割、人脸识别、文本检测等多个方面,matconvnet的运行版本有两种,cpu和gpu版本,本文主要记录笔者在配置的过程中遇到的坑,也给大家提供一份详细的配置过程。
一.准备工作:
1.需要的软件:
(1)matconvnet深度学习工具包(我这里用的是最新版本matconvnet-1.0-beta25,这里在最后配置GPU的时候会出现一个代码错误,更改方法会在文章末给出) matconvnet下载地址:http://www.vlfeat.org/matconvnet/
(2)matlab2016a(win64)
(3)vs2015(这里推荐用VS2015及以上版本,matconvnet在配置时需要用c++编译器,好多人遇到的问题主要是VSc++编译器的问题,笔者在这里遇到了大坑弄了好久,之前我试过VS2010与MATLAB自带的mcc编译器最后在配置GPU编译的时候都出现了未知的问题)
注:这里必须要先安装MATLAB再安装VS,否则在MATLAB里mex -setup命令关系不到VS的c++编译器
(4)在安装cuda 9.1之前要先安装上自己显卡最新的官方驱动,驱动下载链接:https://www.geforce.cn/drivers
(5)cuda9.1(matconvnet要求显卡要是INVIDA的,要满足compute compability>2.0,而且不同的显卡对cuda
的要求不同,我们这里用的是GTX1050显卡,所以要用cuda9.1)
官网下载:https://developer.nvidia.com/cuda-toolkit
(6)cuda 对应的v9.1版本的cudnn(下载cuda9.1对应cudnn)
2.环境:win10(win10版本不要太旧不然安装NVIDA显卡驱动时会提示对应版本错误)
二:matconvnet环境配置(重点)
matconvnet的应用有两个版本,cpu和gpu版本,gpu版本要比cpu版本速度更快,这里将介绍两种版本的环境配置方法。
1.cpu版本的配置:
cpu版本的配置很简单,只需要两行命令(依次在matlab中运行下面两个命令即可)
(1)mex -setup
这个命令是来寻找vs编译器的命令,因为matconvnet的文件中的方法的实现是封装在cuda c程序中的(matlab文件夹下的src文件里的.cu文件),所以需要链接c++编译器。
刚开始会有选择编译器的阶段,如果有编译器,MATLAB会识别出来并列出,照着选就行。
成功后会出现如下结果:
(2)运行vl_compilenn 程序(matlab文件夹下)
成功后即可运行matconvnet中example里面的一些示例程序了,出现如下界面代表成功了:
(3)在命令行窗口输入vl_testnn命令,测试非CPU模式,会出现下面的内容。说明CPU编译测试成功
2.配置GPU版本
(1)安装cuda,正常安装即可,没有特殊的要求,这里建议安装到默认路径,不要改变,防止之后填写环境变量的时候出现差错.
(2)设置环境变量:安装完毕后,在计算机上点右键,打开属性->高级系统设置->环境变量,可以看到系统中多了CUDA_PATH和CUDA_PATH_V9_1两个环境变量,接下来,还要在系统中添加以下几个环境变量:
如果是默认的CUDA安装路径,添加的路径分别是下面这样的:
CUDA_PATH
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.1
CUDA_PATH_V9_1
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.1
CUDA_SDK_PATH
C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.1
CUDA_LIB_PATH
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.1\lib\x64
CUDA_BIN_PATH
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.1\bin
CUDA_SDK_BIN_PATH
C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.1\bin\win64
CUDA_SDK_LIB_PATH
C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.1\common\lib\x64
(以上路径为可选添加)
然后,在系统变量 PATH 的末尾添加:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.1\lib\x64;(可选)
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.1\bin;(可选)
C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.1\common\lib\x64;(必须添加)
C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.1\bin\win64; (必须添加)
并不清楚时哪些环境变量起作用,为了不出错误建议都配置上
(3)在matconvnet-1.0-beta25(建议重命名文件夹改为matconvnet)中建一个local文件夹(与example和matlab等同一”级别”),然后把下载的cudnn放进去,如下图所示:
然后将图中COPYING下面的cudnn64_4.dll用cudnn中bin文件夹下的cudnn64_7.dll替换。 (不同的cudnn版本不一样,我的是cudnn9.1)
(4)
把cudnn中的bin,lib/x64,include中的文件分别拷贝至
C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v9.1中的bin,lib/x64,include三个子目录下。(这里的路径对应cuda的安装路径)
(5)将nvcc路径加入环境变量中:
MW_NVCC_PATH:C:\ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v9.1\bin\nvcc.exe
(6)重新编译vl_compilenn程序:
vl_compilenn('enableGpu',true,'cudaRoot','C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v9.1','cudaMethod','nvcc','enableCudnn','true','cudnnRoot','local/cudnn')
(7)若此处显示错误
if strcmp(arch, 'win64') && opts.enableCudnn
要求&&符号前后都是逻辑值
这是因为1.25版本的MatConvNet中的vl_compilenn.m文件中在506行增加了这样的判断,所以在运行vl_compilenn函数中'enableCudnn'后面要跟true,而不是跟'true',即编译语句为:
vl_compilenn('enableGpu',true,'cudaRoot','C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v9.1','cudaMethod','nvcc','enableCudnn',true,'cudnnRoot','local/cudnn')
(8)测试GPU编译
在命令行窗口输入vl_testnn('gpu', true),会有类似上面的内容出现。这就是成功了.
在用GPU测试的过程中还可以通过GPU-Z来观测GPU的加速效果(我就不在跑一遍了,之前CPU跑时GPU核心频率在135MHZ左右,使用GPU编译时可以达到1350MHZ)
至此win10+MATLAB2016a+VS2015+MatConvNet的整个配置过程就结束了
三:心得
之前配置遇到各种问题,网上的教程不是很详细,也不具有针对性,笔者在碰到好几个大坑之后,终于配置成功,特地写一篇博客记录配置过程,希望给之后的同学做个参考。同时也感谢网上的大佬们分享自己的配置过程,希望大佬以后可以多多分享。