我下面这个文章过时了,caffe官方推荐的windows版本编译请看这个链接 https://github.com/BVLC/caffe/tree/windows
主要的资料来源是happynear的如何在windows下编译caffe的教程(英文github,中文csdn博客),但是里面对python接口是分散讲的,而且有个地方有遗漏,摸索一天才发现怎么弄,所以这里针对python的部分单独讲讲,希望能对大家有帮助。
我用的是VS2013,CPU模式,因为我的笔记本的N卡太弱了,所以我后来还是用CPU模式了。
第一步 下载所需2个包(跟原po文一个意思,已做可略)
一个happynear的github的包,另一个他的3rdparty第三方库包,百度网盘http://pan.baidu.com/s/1i390tZB
1.1 下载的第三方库包里面包含opencv, boost, openblas等caffe所需要的库,将那里面bin,lib,inclue的三个文件夹拷贝到github包里面的3rdparty文件夹下,并将其中的拷贝后的bin文件夹添加的Path环境变量里面。
1.2 下载好github的压缩包caffe-windows-master.zip. 解压build_cpu_only文件夹,里面包含有对应的CPU模式caffe程序,可以用VS2013打开。里面有caffe,pycaffe等七个项目,默认打开的是caffe这个项目,可以右击Mainbuilder解决方案里面,在启动项目里面选择pycaffe,这样可以编译pycaffe这个项目。
第二步 编译工程(跟原文一个意思,已做可略)
编译前改两个地方,右击pycaffe项目,在属性里面,分别把1)C/C++的附加包含目录include和2)链接器--常规—附加库目录libs的路径修改了。默认是D盘的python27,我修改成了Anaconda的python2.7的版本
双击运行caffe-windows-master\src\caffe\proto\extract_proto.bat
他的效果是在另一个文件夹:caffe-windows-master\python\caffe\下面生成一个proto文件夹和内含如下两个文件。
这样我们开始编译了,右击VS2013里面pycaffe项目点击生成。生成之后如果显示这个无法打开_caffe.pyd文件,就说明生成成功了(因为pyd是python编译好的dll文件,VS是不可能打开的)。编译完成后,在caffe-windows-master\python\caffe文件夹下面生成了_caffe.pyd文件
第三步 pip安装protobuf
这个时候我们还需要安装一个google的protobuf的包,使用pip install protobuf进行安装。
如果没有走这一步,而将现在的github包的\python\caffe文件夹放到我们自己用的python package下(比如C:\Anaconda2\Lib\site-packages),会看到这个错误
第四步 把caffe-windows-master\python下的caffe文件夹,整碗端到自用python的site-package下 (热烈祝贺蔡英文整碗捧去~~)
总之,经过下面这三个过程,github包下面的python\caffe文件夹已经齐全了。
1) extract_proto.bat生成python\caffe下面的caffe.proto文件和proto文件夹。
2) VS2013编译pycaffe项目,同样也是在python\caffe这个文件夹下生成_caffe.pyd。
3) Pip安装google的protobuf包(具体命令pip installprotobuf)
我们将这个caffe文件夹移到C:\Anaconda2\Lib\site-packages\下面,这个时候import caffe应该没有错误了。可以用示例代码跑跑看
最开始我以为直接编译出pyd文件就可以了,像opencv一样,但是其实是编译出整个caffe文件夹,加好所有东西,然后放到site-package下面来使用,而不是使用单个的_caffe.pyd文件。
希望对各位有帮助。
参考
happynear的中文英文资料
https://github.com/happynear/caffe-windows
http://blog.youkuaiyun.com/happynear/article/details/45372231
caffe出现 ImportError: No module named protobuf.internal 问题的讨论帖
https://groups.google.com/forum/#!topic/caffe-users/9Q10WkpCGxs