vs2013的matconvnet_Windows底下编译MatConvNet工具包CPU版本

MatConvNet主页上的toolbox已经进行了多次更新,按照toolbox主页上提供的编译方法已经可以直接在windows上进行编译了,无需按照博文下面这么复杂的步骤了。

最近修改成了一个可以直接通过Matlab编译的Windows端的CPU版本,就不需要下面这么复杂的编译步骤了,里面已经包含了编译好的mexw64的动态链接文件,可以先尝试是否可以运行,如不能最好重新编译一下。

可以在这个链接进行下载:

vlfeat工具包发布了他们的Deep Learning

的工具包MatConvNet,由于目前只提供了Linux和Mac上可以编译通过的版本,该工具包的主页是:http://www.vlfeat.org/matconvnet/,并且提供几个已经训练好的CNN网络模型。

经过一上午的小修改,终于将这个工具包的成功的编译可以在Windows底下可以运行的CPU版本。对于GPU的版本由于需要Matlab

2014版本,而本人的Matlab是2012版本,所以就没有继续去进行编译。还有另外一个原因,对于大规模的训练CNN网络,一般都是放在Linux服务器上进行训练的,所以对于平常只使用已经训练好的模型,进行测试实验,仅使用CPU基本就已经够用了。

个人的已经修改好的VS2010的工程文件,可以在这个链接进行下载:

在使用的过程中需要对一些包含include,

lib的路径进行修改。

以及编译好的mex文件

可以直接下载拷贝到:"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).

(3).  对于bits\normalize.cpp(352): error C2219:

syntax error : type qualifier must be after

'*',直接将restrict移动动*之后。

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”

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”

对于其他更加具体的使用,请参考“example”目录的例子,以及工具包的主页的参考手册。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值