如何快糙好猛地在Windows下编译CAFFE并使用其matlab和python接口

零、最近更新

2015/07/07 抱歉最近比较忙,留言看得比较少,如果有问题请加 QQ群:Deep Learning高质量群 209306058,会有各路大神回答你的问题。 
2015/07/07 现在caffe也支持VS2013了,第三方库全部更新至最新版本。请从http://pan.baidu.com/s/1sj3IvzZ 下载并替换掉原有的build文件夹,其他步骤与先前版本一致。如果发现bug,烦请反馈给我,留言或在github上提issue均可。 
2015/06/07 添加Insanity Layer(即randomized leaky rectified linear units),我也不知道为什么叫Insanity。。论文上说效果比PReLU还好些。 
2015/06/05 将Caffe版本更新至6月5日的master分支,与上一版最大的不同在于matlab接口更加丰富,cudnn更新至v2版,所以要重新下载第三方库。 
2015/06/05 Batch Normalization更新至新版,现在的默认mnist测试文件即为使用了Batch Normalization层的版本。 
2015/05/29 发现上个版本的lmdb.lib使用了别人在vs2013下编译的版本,现改为vs2012版; 
2015/05/29 添加了提取任意层特征的matlab接口,使用方法:

<code class="language-matlab hljs  has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">OUTPUT = caffe(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'get_features'</span>, INPUT, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'layername1,layername2...'</span>);</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

例如:f = caffe('get_features', H, 'conv51,pool5'); 返回的f为2*1的cell类型,里面记录了层的名称和该层的特征。 
现在有了更好的方法来获得每层特征,该函数不再更新。请参见新版matlab接口。

一、准备

  需要用到的东西我已经帮大家全部准备好了,有2015年6月5日刚刚从caffe官方master分支fork过来的源代码:https://www.github.com/happynear/caffe-windows。有我自己亲手制作的第三方库http://pan.baidu.com/s/1sjE5ER7,在源码的根目录下建立个3rdparty文件夹,把文件解压进去就可以了。 
  解压好之后,要将3rdparty/bin文件夹添加到系统目录,这样才能让程序找到这些第三方库的dll。 
  然后是Visual Studio 2012,因为我的第三方库都是VS2012环境下编译的,所以用其他版本VS的请自行编译。 
  最后是CUDA和MKL了,MKL是可选的,大家可以去Intel官方申请,如果不用cpu模式的话其实也无所谓,在第三方库包中我还提供了openblas的库文件。

二、编译

  编译非常简单,分为以下几步: 
  1、双击./src/caffe/proto/extract_proto.bat批处理文件来生成caffe.pb.h 和caffe.pb.cc两个c++文件,和caffe_pb2.py这个python使用的文件。 
  2、打开./build/MSVC/MainBuilder.sln,打开之后切换编译模式至Release X64模式。如果打开之后显示加载失败,可能你的CUDA版本和我的不一致,我的是CUDA 6.5版,这时就要用记事本打开./build/MSVC/MainBuilder.vcxproj,搜索CUDA 6.5,把这个6.5换成你自己的CUDA版本,就可以正常打开了。 
  3、右键点击左边的MainCaller项目,选择属性,在C/C++选项卡中,把附加包含目录中的cuda include目录改成你自己的;在链接器选项卡中,把附加库目录中的cuda library目录也改成你自己的。 
  4、点上边工具栏中的绿色三角编译吧。编译大概需要1小时左右,请耐心等待。 
   
  如果要用matlab wrapper来提取特征、观察训练好的权重的话呢,只需要把matcaffe项目里面的cuda、matlab目录修改成你自己的,然后编译,你就能从matlab/+caffe/private文件夹里面找到一个叫caffe_.mexw64的文件啦。 
  python的wrapper类似,把pycaffe项目里的目录改成你自己的,就能在python/caffe文件夹中生成_caffe.pyd的python dll文件。

三、测试

  到 http://pan.baidu.com/s/1mgl9ndu 下载已经转换好的MNIST的leveldb数据文件,解压至./examples/mnist文件夹中,然后运行根目录下的run_mnist.bat即可开始训练,训练日志会保存在./log文件夹中,以INFO开头,txt格式的日志文件中。

ps:如果你编译成功的话,不要忘了给我的github工程点个star! 
star

版权声明:本文为博主原创文章,未经博主允许不得转载。

主题推荐
windows python matlab visual studio 2012 deep learning
猜你在找
零基础学Python开发系列教程
C语言及程序设计初步
Part 1:基础语言-Cocos2d-x手机游戏开发必备C++语言基础
Windows CE车载应用的实现与相关技术点
jQuery 视频教程
DeepLearnToolBox中CNN源码解析
模式识别多层感知器 MLP
c++对txt文件的读取与写入
cs硕士妹子找工作经历阿里人搜等互联网
深入理解拉格朗日乘子法Lagrange Multiplier 和KKT条件
id="ad_frm_0" frameborder="0" scrolling="no" src="http://blog.csdn.net/common/ad.html?t=4&containerId=ad_cen&frmId=ad_frm_0" style="border-width: 0px; overflow: hidden; width: 746px; height: 90px;">
查看评论
23楼  西电之梦 昨天 17:08发表 [回复]
博主,很牛掰。已Star
我编译的时候有个问题:
项目文件包含 ToolsVersion="12.0"。此工具集可能未知或缺失。
我也检查了属性->常规->平台工具集,这里设置的确实是vs2012(v110),请问怎么解决?
Re:  梦想四季 昨天 21:04发表 [回复]
回复xidianzhimeng:不用管它,过一段时间就好了,等的时间有点长。。。
22楼  梦想四季 昨天 20:55发表 [回复]
请问一下,我编译好了matlab的接口,为什么一运行demo就会出现matlab已停止工作呢?matlab版本是2013a
21楼  lLYDl 3天前 15:48发表 [回复]
请问博主是改动哪儿的目录调用matlab接口啊?是改动项目文件位置吗?
20楼  abs380757885 4天前 01:02发表 [回复]
不取掉use cudnn能编译过去 还有怎么样用训练好的数据进行分类呢 是不是编译 那个分类cpp 生成exe
19楼  abs380757885 4天前 00:53发表 [回复]
大牛你好 我 按照你说的 去掉use_cudnn 加上cpu_only 编译不过去什么原因
Re:  happynear 4天前 15:10发表 [回复]
回复abs380757885:如果没有GPU的话,请还是把CUDA安装上,然后去掉USE_CUDNN,不要加CPU_ONLY选项。然后运行的时候,把solver中的gpu改成cpu即可。
18楼  wangqiwhu 2015-07-03 15:49发表 [回复]
求问大神,类似这样的错误是哪里有问题,已经把预处理器改为CPU_ONLY,layers/absval_layer.cu(26): error : identifier "caffe_gpu_sign" is undefined
17楼  热爱生活的Deeper 2015-06-30 16:15发表 [回复]
在windows debug 下编译,出现boost/lexical_cast.hpp(300) array 不是std 成员问题,求大神帮忙解答
16楼  热爱生活的Deeper 2015-06-30 15:51发表 [回复]
大神,我问一下,代码的debug下编译会有问题,主要是boost的代码中lexical_cast.hpp(300) error c2039 array 不是std 成员,还有一些连带的其他问题。请问怎么能解决呢?
15楼  nnectar 2015-06-23 16:02发表 [回复]
您好。我现在用matlab对新数据进行预测的时候运行到net = caffe.Net(net_model, net_weights, phase);那一步matlab就会弹出"MATLAB已停止工作,请关闭程序"的提示,不知道您有没有遇到过类似情况,求解救啊……
14楼  nnectar 2015-06-11 15:04发表 [回复]
大神你好,请问要编译通过是不是需要单独安装boost,opencv等库啊?还是只需要把网盘里的第三方库放进去就可以了?我编译一直有错啊/(ㄒoㄒ)/~~
Re:  happynear 2015-06-12 00:17发表 [回复]
回复nnectar:用我提供的第三方库就能编译了,不要怕。
13楼  hyyhf52 2015-06-10 03:15发表 [回复]
大神,在你的帮助下我已经成功编译了,但是还是想请教你几个问题,你提供的OUTPUT = caffe('get_features', INPUT, 'layername1,layername2...');这个函数应该如何正确使用啊,我用了一下结果报错了Undefined function 'caffe' 。本人是个小白,希望大神能够解答一下,感谢
Re:  happynear 2015-06-12 00:15发表 [回复]
回复hyyhf52:木有这个函数了,现在统一更新至新版的matlab接口了。
新版的用法还没文档,凑合看看m文件吧,挺容易懂的。
Re:  hyyhf52 2015-06-12 19:45发表 [回复]
回复happynear:谢谢大神回复,我是小白,还是看不懂M文件里面应该如何正确使用,恳求大神明示啊。大神能不能学会了教教我啊,我身边也没有人可以教我。。。
12楼  hyyhf52 2015-06-10 03:10发表 [回复]
大神你好,在你的帮助下,我编译成功并生成了caffe_.mexw64的文件;马上运行了一下自带的classification_demo,得到了正确的结果。我想请教一下大神,如果我只输出其中某一层的feature,应该输入什么样的指令啊,我看这个demo里面只有scores = net.forward(input_data);但是只能输出最后的分类结果。我用了你提供的OUTPUT = caffe('get_features', INPUT, 'layername1,layername2...');这个函数,但是会报错“undifined function”。 请求大神能够说的更细一些,caffe这个函数在什么位置,正确的使用方法应该是怎么样的啊。 还请大神多多海涵,我是小白,不是太懂matlab
11楼  MgLiu 2015-06-08 09:37发表 [回复]
“就能在python/caffe文件夹中生成_caffe.pyd的python dll文件。”
我只生成了_caffe.pyd,并没有python dll,import不了,怎么办
Re:  happynear 2015-06-08 23:14发表 [回复]
回复qq_16055159:pyd就是python dll的意思。
不过要import的话,你还需要装protobuf,可以按这篇文章来配置
http://blog.csdn.net/chenkjiang/article/details/22159407。
10楼  azhangwei2020 2015-06-05 14:23发表 [回复]
电脑里没有显卡,怎么屏蔽掉,模式选择了CPU,但是仍然会报错,说显卡驱动版本太低。
Re:  happynear 2015-06-08 23:17发表 [回复]
回复azhangwei2020:可以不用CPU_ONLY模式,没gpu的电脑也可以装cuda,注意把USE_CUDNN宏给删了就行。
Re:  happynear 2015-06-05 23:04发表 [回复]
回复azhangwei2020:在预处理器里添加CPU_ONLY宏
9楼  MgLiu 2015-06-05 08:32发表 [回复]
如何能在python/caffe文件夹中生成_caffe.pyd的python dll文件?一直遇到ImportError: No module named _caffe问题
Re:  happynear 2015-06-05 23:03发表 [回复]
回复qq_16055159:改一下python的路径就能生成了呀。。
Re:  MgLiu 2015-06-06 21:55发表 [回复]
回复happynear:..\..\python\caffe\_caffe.cpp(1): fatal error C1083: 无法打开包括文件:“Python.h”: No such file or directory 怎么办
Re:  happynear 2015-06-07 00:47发表 [回复]
回复qq_16055159:把我的python目录改成你的啊。
Re:  MgLiu 2015-06-08 08:32发表 [回复]
回复happynear:---> 13 from ._caffe import Net, SGDSolver
14 import caffe.io
15 

ImportError: DLL load failed: 找不到指定的模块。
咋整,只生成了一个_caffe.pyd,不能import
8楼  TracyUppppp 2015-06-01 20:54发表 [回复]
为什么在生成Python wrapper时会显示错误
20 error C2562: “caffe::init_module__caffe”:“void”函数返回值 F:\Deep_Learning_Caffe\caffe-windows-master\python\caffe\_caffe.cpp 278

然后把import_array();注释了
会显示另外个错误错误
23 error LNK2001: 无法解析的外部符号 "__declspec(dllimport) struct _object * __cdecl boost::python::detail::init_module(struct PyModuleDef &,void (__cdecl*)(void))" (__imp_?init_module@detail@python@boost@@YAPEAU_object@@AEAUPyModuleDef@@P6AXXZ@Z) F:\Deep_Learning_Caffe\caffe-windows-master\build\python\_caffe.obj
求作者解释一下这是什么情况。。谢谢
Re:  bzwqq 2015-06-03 13:34发表 [回复]
回复wangheng88766671:我也遇到了与你一样的问题,后来发现是python版本的问题。你换成python2.7版本重新配置环境变量后就可以编译通过了。
Re:  TracyUppppp 2015-06-05 15:20发表 [回复]
回复bzwqq:我也通过了。谢谢,但是我运行Python提示找到不模块。你成功了吗?
7楼  Sun7_lab 2015-05-24 21:12发表 [回复]
刚刚成功,膜拜楼主!
Re:  happynear 2015-05-26 17:00发表 [回复]
回复Sun7_She:我的工程已经很久没有新的star了。
Re:  liu84919 2015-05-25 13:31发表 [回复]
回复Sun7_She:您好,请问您是用GPU训练的吗,有没有试过使用CPU的情况
6楼  liu84919 2015-05-23 11:14发表 [回复]
楼主您好,为什么我在lenet_solver.prototxt改成用CPU训练会报错,错误显示在cudnn_conv_layer.cpp文件中,CUDA driver version is in sufficient for CUDA runtime version。为什么CPU训练下还会运行cudnn呢。求解答,谢谢。
Re:  happynear 2015-05-25 15:30发表 [回复]
回复liu84919:如果不用GPU的话,需要在编译的时候在预处理器里加上CPU_ONLY。
caffe的cudnn那块的逻辑写得不是很好,如果不用cudnn,需要在预处理器那里把USE_CUDNN删掉。
5楼  csdn_younger 2015-05-20 13:10发表 [回复]
楼主您好,我想问下如果我有两块GPU,你的代码能不能像caffe原版那样通过“-gpu 1”修改所用的GPU,谢谢。
Re:  csdn_younger 2015-05-20 13:48发表 [回复]
回复csdn_younger:还有,你的代码支持cudnn吗?
Re:  happynear 2015-05-25 15:24发表 [回复]
回复csdn_younger:我提供的就是caffe在2015/3/31日dev分支的原版代码,所以caffe有的功能全部都有。有多卡的话可以试试cxxnet,现在caffe还不支持多卡同时工作,不过估计也快了,到时候我也会更新的。
4楼  tangwei2014 2015-05-15 16:47发表 [回复]
你好,请问一下我这编译是通过的,但是运行的时候总是提醒计算机中丢失hdf5_hl.dll 这是怎么回事呢?我是在VC++ Directories 的Executable Directories 中将3rdparty的bin路径加入的,谢谢
Re:  happynear 2015-05-17 23:05发表 [回复]
回复tangwei2014:放到path后要重启或注销(看你是放在系统变量还是用户变量中)。
3楼  noraiein 2015-05-08 11:53发表 [回复]
好像确实是maincaller.exe的问题,vs运行,显示
“MainCaller.exe”(Win32): 已加载“C:\Windows\System32\msvcr110d.dll”。已加载符号。
“MainCaller.exe”(Win32): 已加载“C:\Users\user\Documents\Visual Studio 2012\Projects\caffe\bin\opencv_core248d.dll”。无法查找或打开 PDB 文件。
“MainCaller.exe”(Win32): 已加载“C:\Users\user\Documents\Visual Studio 2012\Projects\caffe\bin\opencv_imgproc248d.dll”。无法查找或打开 PDB 文件。
“MainCaller.exe”(Win32): 已加载“C:\Users\user\Documents\Visual Studio 2012\Projects\caffe\bin\opencv_highgui248d.dll”。无法查找或打开 PDB 文件。
E0508 11:31:18.732892 4696 train_net.cpp:20] Usage: train_net solver_proto_file [resume_point_file]
线程 0x2300 已退出,返回值为 1 (0x1)。
线程 0x23e4 已退出,返回值为 1 (0x1)。
线程 0x22c4 已退出,返回值为 1 (0x1)。
程序“[1140] MainCaller.exe”已退出,返回值为 1 (0x1)。
求问是什么问题?
2楼  pds2008 2015-05-05 23:54发表 [回复]
我也遇到了Invalid MEX-file 'D:\caffe-windows\matlab\caffe\caffe.mexw64': 找不到指定的模块。这样的错误,是不是代码有问题?
Re:  happynear 2015-05-06 09:16发表 [回复]
回复pds2008:先确定exe能否运行,很多人的bin目录没有加到环境变量中,而matlab又不会给出缺少dll的错误信息。
1楼  noraiein 2015-05-05 09:15发表 [回复] [引用] [举报]
生成的mexw64文件,在matlab中运行代码,会显示Invalid MEX-file E:\caffe.mexw64找不到指定的模块,求问该如何解决。是因为我编译出的文件有问题吗,但是我按照说的改了cuda的版本和matlab的路径。还是因为我的代码有问题?
Re:  csdn_younger 2015-05-20 21:00发表 [回复]
回复noraiein:为什么我在build matcaffe时一直没有输出啊
Re:  happynear 2015-05-05 09:54发表 [回复] [引用] [举报]
回复noraiein:你确定有E:\caffe.mexw64这个文件?
如果正确生成了,请把matlab路径切换到./matlab/caffe再运行。
Re:  mzmssg 2015-05-05 13:05发表 [回复] [引用] [举报]
回复happynear:我也碰到这样的问题,编译成功但这个mexw64文件matlab找不到模块,请问层主解决了吗,我是Vs2013
Re:  happynear 2015-05-06 09:19发表 [回复] [引用] [举报]
回复mzmssg:先确定exe能否运行,很多人的bin目录没有加到环境变量中,而matlab又不会给出缺少dll的错误信息。
Re:  noraiein 2015-05-08 11:50发表 [回复] [引用] [举报]
回复happynear:用vs012运行maincaller.exe显示
“MainCaller.exe”(Win32): 已加载“C:\Users\user\Documents\Visual Studio 2012\Projects\caffe\bin\opencv_core248d.dll”。无法查找或打开 PDB 文件。
“MainCaller.exe”(Win32): 已加载“C:\Users\user\Documents\Visual Studio 2012\Projects\caffe\bin\opencv_imgproc248d.dll”。无法查找或打开 PDB 文件。
“MainCaller.exe”(Win32): 已加载“C:\Users\user\Documents\Visual Studio 2012\Projects\caffe\bin\opencv_highgui248d.dll”。无法查找或打开 PDB 文件。
E0508 11:31:18.732892 4696 train_net.cpp:20] Usage: train_net solver_proto_file [resume_point_file]
线程 0x2300 已退出,返回值为 1 (0x1)。
线程 0x23e4 已退出,返回值为 1 (0x1)。
线程 0x22c4 已退出,返回值为 1 (0x1)。
程序“[1140] MainCaller.exe”已退出,返回值为 1 (0x1)。
是什么问题?
Re:  happynear 2015-05-09 23:39发表 [回复] [引用] [举报]
回复noraiein:恩,你已经生成成功,在命令行下使用就行了。
哦不对,你用的是debug模式,还是生成个release版吧。
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值