caffe windows的配置安装
这里主要参考了如何快糙好猛地在windows下编译caffe及并使用其matlab和python接口,下面详述本人的安装过程。
准备
提前说明下,本人的安装环境是windows+vs2013+cuda7.5。首先是happynear准备好的caffe源码https://www.github.com/happynear/caffe-windows。
其次是happynear制作的第三方库http://pan.baidu.com/s/1bSzvKa。
将第三方库中的内容解压至caffe源码中的3rdparty文件夹中,并将3rdparty/bin文件夹添加至环境变量path中,方便程序找到第三方库的dll。
编译
进入caffe-windows-master目录。
- 双击./src/caffe/proto/extract_proto.bat 批处理文件来生成caffe.pb.h caffe.pb.cc 两个c++文件和caffe_pb2.py。
- 打开./buildVS2013/MainBuilder.sln,打开之后切换编译模式至Release X64模式。如果打开之后显示加载失败,可能你的CUDA版本和我的不一致,我的是CUDA 7.5版,这时就要用记事本打开./buildVS2013目录下各个文件夹内的.vcxproj文件,搜索CUDA 7.5,把这个7.5换成你自己的CUDA版本,就可以正常打开了。另外,如果你的显卡比较老或者没有显卡,请使用./build_cpu_only/MainBuilder.sln。(工程打开后,默认启动工程是caffe,也就是我们需要编译的工程)
- 点击编译按钮开始编译吧!这个过程大概半个小时左右。另外,编辑即将结束前可能出现弹窗提示未能生成编译信息,这个没有多大关系,只需要设置下工程属性即可,这里不多说可以直接搜下,因为这时在目录下已经有bin文件夹,其中生成了caffe.exe。
- 运行mnist demo时,首先得下好mnist leveldb,然后到解压至.\example\mnist\下,运行根目录下的run_mnist.bat,运行结束后,可以在.\log中找到刚才运行的日志。
matlab wrapper编译
所谓的matlab wrapper编译,其实就是matcaffe这个工程的编译。
首先,将该工程设置为启动项目,右击属性。
- C/C++ ->常规->附加包含目录中修改其中的matlab的include改为自己的,如 C:\Program Files\MATLAB\MATLAB Production Server\R2015a\extern\include。
- 链接器 ->常规 ->附加库目录中修改其中matlab改为自己的,如 C:\Program Files\MATLAB\MATLAB Production Server\R2015a\extern\lib\win64\microsoft。
- 链接器 ->输入 ->附加依赖项,检查有没有libmex.lib; libmat.lib; libmx.lib,没有的话,自己加上。
配置完成后,编译就可以了,最后会在.\matlab+caffe\private目录下生成caffe_.mexw64,这个就是matlab调用caffe的wrapper。
使用caffe中matlab的demo时,打开matlab, 进入.\matlab\demo文件夹,参考classification_demo.m使用这个wrapper。另外说明一点,之前我使用的matlab2010b在调用caffe.Net时几乎百分百出现matlab崩溃,开始一直以为是我编译生成的mexw64有问题,后来我重新安装了matlab2015a这个问题就没有发生了。
classificatin.cpp的编译
classification.cpp是在.\example\classification目录中的。在windows中用VS编译还是挺麻烦的,所以在这里也记录一下,关键还是其中的依赖库的配置。这里因为是自己不断实验,不断看网上仅有的例子摸索出来的,所以方法有点笨拙。
我的方法是,在caffe工程中,新建classification.cpp,将那个classification.cpp复制到这里,然后排除caffe.cpp,编译。这样就省去了环境配置的麻烦,但缺点是生成的exe仍在.\bin中,但文件名为caffe,把我之前编译生成的caffe.exe覆盖了。
使用该classification.cpp生成的.exe跑demo时,首先得下好下面的文件:
bvlc_reference_caffenet.caffemodel
imagenet_mean.binaryproto和synset_words.txt
上面三个文件我都将它们放在了.\models\bvlc_reference_caffenet文件夹中,所以最后在cmd中的命令句是
.bin\caffe.exe
.\models\bvlc_reference_caffenet\deploy.prototxt
.\models\bvlc_reference_caffenet\bvlc_reference_caffenet.caffemodel
.\models\bvlc_reference_caffenet\imagenet_mean.binaryproto
.\models\bvlc_reference_caffenet\synset_words.txt
.\examples\images\cat.jpg
//后面5个均为caffe.exe的参数
如此完成了该classification的demo。