Windows底下编译MatConvNet工具包CPU版本

vlfeat工具包发布了他们的Deep Learning 的工具包MatConvNet,由于目前只提供了Linux和Mac上可以编译通过的版本,该工具包的主页是: http://www.vlfeat.org/matconvnet/,并且提供几个已经训练好的CNN网络模型。
经过一上午的小修改,终于将这个工具包的成功的编译可以在Windows底下可以运行的CPU版本。对于GPU的版本由于需要Matlab 2014版本,而本人的Matlab是2012版本,所以就没有继续去进行编译。还有另外一个原因,对于大规模的训练CNN网络,一般都是放在Linux服务器上进行训练的,所以对于平常只使用已经训练好的模型,进行测试实验,仅使用CPU基本就已经够用了。


这个网站提供使用VS2010编译Matlab的普通mewx以及支持CUDA的动态链接的vs模板,可以直接下载使用:

个人的已经修改好的VS2010的工程文件,可以在这个链接进行下载:
链接: http://pan.baidu.com/s/1c03Zr8k  密码:ieu4
在使用的过程中需要对一些包含include, lib的路径进行修改。
以及编译好的mex文件
链接: http://pan.baidu.com/s/1dDiY7Gt  密码:h6tz
可以直接下载拷贝到: "matconvnet-1.0-beta7\matlab\mex"目录下

如果需要自己一步一步进行实现,可以参考下面的步骤。
简单介绍一下我使用的环境是VS2010 + Matlab 2012a , 64位win7系统。
具体的编译过程如下:
1. 使用VS2010创建一个MFC的DLL工程
将" matconvnet-1.0-beta7\matlab\src"目录底下的所有文件及文件夹拷贝到我们新建的VS工程文件目录底下。     
        (1)在工程名字上右键,选择最下面的Properties, 点击最顶上的Configuration Manager按钮, Active solution platform新建一个x64,并选择Release。
      (2) Properties -> Configuration Properties -> General -> Target Extension改为 .mexw64
      (3) Properties -> Configuration Properties -> C/C++ -> Additional Include Directories添加
   $(matlabroot)\extern\include     其中$(matlabroot)是你电脑上matlab的安装路径
                    可以在电脑的环境变量中新建一个matlabroot变量,指向matlab的安装目录
      (4)Properties -> Configuration Properties -> Linker -> Additional Dependencies中添加
$(matlabroot)\extern\lib\win64\microsoft\libmx.lib
$(matlabroot)\extern\lib\win64\microsoft\libmex.lib
$(matlabroot)\extern\lib\win64\microsoft\libmat.lib
$(matlabroot)\extern\lib\win64\microsoft\libmwblas.lib
      (5)点击Source目录下的 *.def文件,
 EXPORTS 改为 EXPORTS mexFunction

2.  编译vl_nnconv.cu ,  vl_nnnormalize.cu , vl_nnpool.cu  
对于这三个文件,采用单独的方式一个一个进行编译。 
首先编译 vl_nnconv.cu, Source Files上右键 Add -> Existing Items 添加 vl_nnconv.cu,后缀名改为.cpp, 并将Project的名字改为vl_nnconv。 
其次是编译  vl_nnnormalize.cu, Source Files上右键 Add -> Existing Items 添加  vl_nnnormalize.cu,后缀名改为.cpp, vl_nnconv.cpp上右键 Remove, 并将Project的名字改为 vl_nnnormalize
最后是 编译  vl_nnpool .cu, Source Files上右键 Add -> Existing Items 添加  vl_nnpool .cu,后缀名改为.cpp,  vl_nnnormalize .cpp上右键 Remove, 并将Project的名字改为 vl_nnpool

编译过程中出现的错误:
(1).   对于bits文件夹里面的每一个cpp文件,记得在开始的部分加上#include "stdafx.h"
(2).   对于bits\normalize.cpp没有“x86intrin.h”头文件的错误,可参照下面的链接中对应的VS版本以及CPU进行修改。 http://www.cnblogs.com/zyl910/archive/2012/02/28/vs_intrin_table.html
Windows底下编译MatConvNet工具包CPU版本
(3).   对于bits\normalize.cpp(352): error C2219: syntax error : type qualifier must be after '*',直接将restrict移动动*之后。
Windows底下编译MatConvNet工具包CPU版本

3.  编译vl_imreadjpeg
最后是编译vl_imreadjpeg.c这个文件,首先将MFC DLL的工程的名字重命名为“vl_imreadjpeg",并将vl_imreadjpeg.c的后缀名改为.cpp, 并添加 #include "stdafx.h"
需要libjpeg和pthread的支持
(1)对于libjpeg我是直接拷贝了opencv中的libjpeg的里面的所有文件,链接: http://pan.baidu.com/s/1o6LpSAA  密码:bvng
     将整个文件夹拷贝到整个工程的文件目录底下,VS的工程上右键 Add -> New Filter 输入(libjpeg),   然后在libjpeg上右键 Add -> Existing Item将libjpeg文件底下的所有文件都添加进来,但需要Remove掉 jmemansi.c这一个文件。选中libjpeg底下所有的.c文件,右键 Properties -> C/C++   -> Precompiled Header ->Precompiled Header   选中“Not Using Precompiled Headers”
(2)pthread可以在这个地址进行下载 ftp://sourceware.org/pub/pthreads-win32/pthreads-w32-2-9-1-release.zip
Properties -> Configuration Properties -> C/C++ -> Additional Include Directories添加
          D:\Toolbox\pthreads-w32-2-9-1-release\Pre-built.2\include
Properties -> Configuration Properties -> Linker -> Additional Dependencies中添加
        D:\Toolbox\pthreads-w32-2-9-1-release\Pre-built.2\lib\x64\pthreadVC2.lib
将蓝色部分改为对应的目录。
在编译的过程中可能会出现的一些错误及修改方法。
(1) 对于错误>bits\pooling.cpp(52): error C2589: '(' : illegal token on right side of '::' ,主要是有std::max与系统中max宏冲突,将std::max加上括号(std::max)。 以及文件中的std::min改为(std::min)。
(2) >vl_imreadjpeg.cpp(157): error C3861: 'snprintf': identifier not found, 将snprintf改为_snprintf
(3) >vl_imreadjpeg.cpp(325): error C2440: '=' : cannot convert from 'void *' to 'Reader *', 
readers[r] = malloc(sizeof(Reader)) ; 在malloc加上相应的指针类型强制转换。readers[r] = (Reader*)malloc(sizeof(Reader)) ; 对于几处相应的错误采用同样的处理方法。
(4) >vl_imreadjpeg.cpp(211): error C2219: syntax error : type qualifier must be after '*'
  JSAMPROW __restrict scanline = scanlines[dy] + 3*x ;
改为  JSAMPLE FAR * __restrict scanline = scanlines[dy] + x ;


4. 最后就是进行测试了:
(1)将编译好的vl_imreadjpeg.mexw64,  vl_imreadjpeg.mexw64,   vl_nnnormalize.mexw64,  vl_nnpool.mexw64复制到 matconvnet-1.0-beta7\matlab\mex"目录底下
(2) 进入toolbox的matlab目录,运行 vl_setupnn.m, 然后再输入 vl_test_nnlayers命令如果可以正确运行那么就说明编译成功。
(3)在"examples"目录下运行“cnn_imagenet_minimal.m”,会自动下载VGG实验室已经训练好的一个模型,下载过程可能需要一段时间。
测试这张图片“pepper.png”,可以看到图片上的输出结果“Bell Pepper, Score 0.704”
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值