Win10+CPU/GPU+Matconvnet配置

首先,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文件夹,编译过程如下:

Win10+CPU/GPU+Matconvnet配置_第1张图片

文件夹mex如下,采用cu编写的源文件,是vs编译生成的动态链接库文件,以后调用的是这些文件(dll文件是后面gpu编译要用到的);

Win10+CPU/GPU+Matconvnet配置_第2张图片

至此,cpu的工具箱编译过程就完成了,随后可以运行example里面的实例,如mnist,cifar10等,以及进一步学习教程文档(MatConvNet.pdf);

 

下面着重介绍GPU的配置与编译:

相对较复杂,需要严格的版本匹配,更多信息可以参阅Cuda官网(https://developer.nvidia.com/cuda-toolkit)。

首先之前的软硬件条件达到,GPU,VS,Matlab是最基本的。

其次再下载对应GPU的cuda驱动,解压默认安装即可,若下载最新版cuda还会自动更新这个cuda驱动。。

第三步,下载匹配matlab的cuda版本,详见图:

 

Win10+CPU/GPU+Matconvnet配置_第3张图片

我选择cuda8.0以及matlab2017b,因为据说tensorflow 1.4不支持cuda9.0,且tensorflow1.0版本以上是不支持cuda8.0以下的,所以暂时只能装cuda8.0,这里我为了通用性就选了这个配置。

其实我感觉主要是对应好matlab与cuda版本,而cuda与cudnn版本大致对应就可以(不像tensorflow要求很严格),cuda8+cudnn5.1/cudnn6/cudnn都可以试一下,另外我感觉,多个cudnn甚至可以共存,适应不同需求。反而,visual studio2015编译包很重要,据说cuda7.5以下不支持vs2015,可能需要vs2013。

注意自己电脑的系统,选择对应的cuda版本。

Win10+CPU/GPU+Matconvnet配置_第4张图片

而且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放进去,如下图所示:

Win10+CPU/GPU+Matconvnet配置_第5张图片

 

一定不要忘了最后这两步:

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,如:

 

  1. % % with cudnn    
  2. vl_compilenn('enableGpu', true, ...    
  3.                 'cudaRoot', 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0', ...  % 这里填写你的CUDA的安装路径,基本上是这个位置  
  4.                 'cudaMethod', 'nvcc', 'enableCudnn', 'true', ...    
  5.                 '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的名字改成新的文件夹的名称。 

 

如果是高版本的matlab(matalb2018),cuda以及cudnn(cuda9+cudnn7),可能会报错如下:

错误使用 mex
'F:\MATLAB\matconvnet\matlab\mex\vl_nnconv.mexw64' 使用了 '-R2018a' 进行编译并与 '-R2017b' 链接在一起。 有关详细信息,请参阅 MEX 文件
使用了一个 API 进行编译并与另一个 API 链接在一起。
 
出错 vl_compilenn>mex_link (line 627)
mex(args{:}) ;
 
出错 vl_compilenn (line 500)
mex_link(opts, objs, flags.mex_dir, flags) ;

 

请参考:

https://blog.csdn.net/u011935830/article/details/82187321

https://blog.csdn.net/hiudawn/article/details/80381503

 

这里可能会还报一个错:

Win10+CPU/GPU+Matconvnet配置_第6张图片

解决办法,参见博客: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即可:

Win10+CPU/GPU+Matconvnet配置_第7张图片

到此,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

 

可借鉴链接:

安装:

https://blog.csdn.net/wangxiao7474/article/details/52836439

https://www.cnblogs.com/logicfool/p/5614912.html

https://blog.csdn.net/yexiaogu1104/article/details/73177690

https://blog.csdn.net/qq_33782064/article/details/80003520

https://blog.csdn.net/lwj_12345678/article/details/79419509

https://blog.csdn.net/hiudawn/article/details/80381503

https://blog.csdn.net/kwilford/article/details/80325118

https://blog.csdn.net/qq_28618765/article/details/79590040

https://blog.csdn.net/zhjm07054115/article/details/49964597

https://blog.csdn.net/u011935830/article/details/82187321

https://blog.csdn.net/bailing910/article/details/79693620

https://blog.csdn.net/discoverer100/article/details/78963233

如果在matlab里面的.m文件某个函数不支持,就可能需要进行一定的更改了,可能是某个函数调用方式过老,需要修改。。

学习笔记:

https://www.cnblogs.com/xiaotongtt/p/8322198.html

https://blog.csdn.net/marleylee/article/details/76164091

https://blog.csdn.net/qq_20259459/article/details/54602056

https://blog.csdn.net/qq_16699519/article/details/52830801

#################### 插播 ###################

so是C/C++在Linux平台上的动态链接库文件。windows上的动态库文件是dll后缀。

生成动态库的大体步骤:

  1. 编写C/C++源码文件。

2.编译时指定 -shared选项生成动态库文件:

g++ -shared -o libtest.so source.cpp

生成动态库文件libtest.so

另外so文件好像不能直接运行,只能被其他程序调用。

################ 插播结束 ####################

https://zhidao.baidu.com/question/510077919.html

https://zhidao.baidu.com/question/550934522.html

https://zhidao.baidu.com/question/281154084.html

https://www.cnblogs.com/luntai/p/5291354.html

https://www.cnblogs.com/xudong-bupt/p/6537689.html

你可能感兴趣的:(人工智能-神经网络)