我在自己小本本上跑通了深度学习Caffe框架经典的MNIST测试集,灰常鸡冻。【如图1所示】在经过4000次的迭代后,正确率为0.9911。证实,我的Caffe框架搭建完成,且各种配置无误。
图1 Win7(64位)下MNIST测试结果
终于跑通MNIST,我想做些这几天来的搭建Caffe记录,以便今后的学习。内容是以本机配置:Win7(64位)+Visual Studio 2013+OpenCV3.1.0(点击详见)+CUDA 7.5(配置CUDA,点击详见)+Python 2.7.0+笔记本自带显卡:NVDIA FeForce 610M(【计算机>>属性>>设备管理器>>显示适配器】即可查看,注意安装NVDIA驱动)为基础,转载了happynear及小咸鱼_的部分博文,尽量忠于原文,并在他们的基础上,关于我的安装时候出现的问题做些整理。(我本人整合了二位的内容,并尽可能认真地给出了自己出现的常见问题、相应解决方法,图1-10都是本人的工程截图。因此恬不知耻的标了原创二字,若本文引文中的任一原作者认为此举不妥,请务必与我联系立刻修改。捂脸==)
不多说了,本文内容如下:
一、准备
happynear的Windows下的caffe源代码:https://www.github.com/happynear/caffe-windows。有happynear亲手制作的第三方库http://pan.baidu.com/s/1bSzvKa,在源码的根目录下建立个3rdparty文件夹,把文件解压进去就可以了。解压好之后,要将3rdparty/bin文件夹添加到环境变量的PATH中(计算机>>属性>>高级系统设置>>系统属性>>环境变量【如图2所示】),这样才能让程序找到这些第三方库的dll。在第三方库包中还提供了openblas的库文件。
图2 添加环境变量3rdparty/bin
二、编译
编译非常简单,分为以下几步:
1、双击./src/caffe/proto/extract_proto.bat
批处理文件来生成caffe.pb.h
和caffe.pb.cc
两个c++文件,和caffe_pb2.py
这个Python使用的文件。
2、打开./buildVS2013/MainBuilder.sln
,打开之后切换编译模式至Release X64模式。如果打开之后显示加载失败,可能你的CUDA版本和我不一致,我的是CUDA 7.5版,这时就要用记事本打开./buildVS2013
目录下各个文件夹内的.vcxproj文件,搜索CUDA 7.5,把这个7.5换成你自己的CUDA版本,就可以正常打开了。
3、右键caffe项目,
a.修改附加包含目录
C/C++ >> 常规>>附加包含目录>>修改如下(CUDA路径按自己的修改)【如图3、4所示】
图3 附加包含目录
图4 修改附加包含目录
b.修改附加库目录
链接器 >> 常规>>附加库目录修改如下(CUDA路径按自己的修改)【如图5、6所示】:
图5 附加库目录
图6 修改附加库目录
设置好之后,右键解决方案,重新生成。倘若,编译结束后会出现失败**个,因为你可能没有配置matlab接口和python接口,所以这些编译失败。我使用的是python接口【如图4、6所示】。如果需要matlab接口,可参考小咸鱼_的博文设置(路径按自己的设置),
4、另外,如果你的显卡比较老或者没有显卡,请使用
./build_cpu_only/MainBuilder.sln
。
5、点上边工具栏中的绿色三角编译吧。编译大概需要半小时左右,请耐心等待。
如果要用matlab wrapper来提取特征、观察训练好的权重的话呢,只需要把matcaffe项目里面的matlab目录修改成你自己的,然后编译,你就能从matlab/+caffe/private文件夹里面找到一个叫caffe_.mexw64的文件啦。
python的wrapper类似,把pycaffe项目里的python目录改成你自己的(happynear用的是Anaconda),就能在python/caffe文件夹中生成_caffe.pyd的python dll文件。三、测试
到 http://pan.baidu.com/s/1mgl9ndu 下载已经转换好的MNIST的leveldb数据文件,解压至./examples/mnist文件夹中,然后运行根目录下的run_mnist.bat即可开始训练,训练日志会保存在./log文件夹中,以INFO开头,txt格式的日志文件中。
ps:如果你编译成功的话,不要忘了给happynear大神的github工程点个star!
四、常见问题
我在做MNIST数据集测试时,遇到了以下问题:
问题1:cudnn_conv_layer.cpp: Check failed:status==CUDNN_STATUS_SUCCESS<6 vs. 0>
CUDNN_STATUS_ARCH_MISMATCH
*********check failure stack trace:***************
解决:运行caffe训练时,提示以上错误:简单讲就是GPU的加速性能不够,CUDNN只支持CUDA Capability 3.0以上的GPU加速。因为我笔记本上的GeForce 610M的CUDA Capability是2.1,而官方的cudnn加速是不支持3.0以下的版本的。于是, 我是在度娘上找到了这个链接,方法可行且操作性强。在每个项目点击右键【属性>>C/C++>>所有选项>>预处理器定义>>编辑,每个项目都去掉:USE_CUDNN,重新执行以下即可(再次强调,每个项目必须都检查务必确认删除USE_CUDNN)。【如图7、8所示】
图7 预处理器
图8 预处理器删除USE_CUDNN
问题2:im2col.cu Check failed :error == cudaSuccess<8 vs. 0> invalid device function
****Check failure stack trace:**********
解决:报错提示的是: invalid device function,则需要修改CUDA C/C++选项下的Device。在每个项目点击右键【属性>>CUDA C/C++>>Device>>Code Generation>>编辑,添上compute_20,sm_20,重新执行以下即可(再次强调,每个项目必须都检查务必确认添上compute_20,sm_20)。详见这个链接。另外要注意检查NVIDIA显卡的驱动是否与CUDA的版本匹配,不匹配就尽量更新NVIDIA的显卡驱动。【如图9、10所示】
图9 CUDA Device
图 10 修改CUDA Device
至此,本文完。再次感谢Caffe前辈们的热心分享,使我顺利搭建Caffe。
我很庆幸能够得到帮助,收获了顺利解决问题的成就感。感叹“网络资源是无限”之余,大神们的严谨博学、不断探究、乐于无私地分享传递他们的所知所得更让我敬佩。学海无涯,他们是我努力前行的榜样。
参考网址
1.如何快糙好猛地在Windows下编译CAFFE并使用其matlab和python接口
2.Windows下用VS2013加载caffemodel做图像分类
3.运行caffe时报错:Check failed: status == CUDNN_STATUS_SUCCESS
4.Windows下编译CAFFE+CUDA, 运行时提示status == CUDNN_STATUS_SUCCESS错误