关于Windows下微软官方caffe框架搭建,训练、测试的学习笔记,VS2013+CPU/GPU+caffe-master。

        本菜鸟准研究生一枚(今年秋季入学),研究方向为基于深度学习的自然语言处理和图像识别,前两天导师给发了个链接,是一个基于caffe的mtcnn网络代码,让小弟学习,还没入行,光是代码就编译了好几天,好多库要找回来,配置好,很是心累!有关这个代码的帖子,要是有人有兴趣,欢迎参看本人下一篇博客(后期更新)。代码编译过程中就了解到了caffe以及Windows下的caffe,所以就有了这个帖子。

        好了,言归正传,开始讲主角!在Windows下使用caffe框架,环境搭建以及数据训练和测试。关于这个问题的教程网上已经有铺天盖地的教程,重复的我不写,免得后来者看半天发现其实和其他的一样!我把我参考过的优秀帖子和搭建过程中遇到的种种问题写上来,关键的部分我用高亮标注了,欢迎参考!

一、前言:

         我遇到的第一个问题是caffe-master和caffe-Windows的区别,刚入坑的我完全以为这两个代码不是一样的,在学习过程中,才发现,其实这两套代码是一个作用,都是Windows下的caffe,只不过前者是微软官方出的,后者是caffe官方为Windows环境提供的,我专门下载下来对比过,一级文件夹和二级文件夹内容完全一致,作用应该是一样的。国际惯例附上经验来源:https://blog.csdn.net/zb1165048017/article/details/51355143

二、VS2013+caffe-master+CPU

1,CPU下编译caffe-master网上教程很多,这里不赘述,推介这两篇博客文章:

①:https://blog.csdn.net/zb1165048017/article/details/51355143

②:https://blog.csdn.net/guoyk1990/article/details/52909864(有训练教程)

        两篇文章讲得都很详细,第一篇博客详细地介绍了怎样在CPU环境下跑起来这个caffe框架,亲测没有错误,但是博主没有提醒一点,就是在编译前将编译器设置为Release,X64,默认Debug,X64,感谢博主。

        第二篇博客前面提到了GPU模式下需要安装的软件(CUDA平台和一个加速库:cudDNN,但是没有讲在GPU下编译、运行及测试),可以看也可以跳过,下文会讲GPU模式的搭建步骤。此博客有关于训练和测试的教程,训练测试数据在博客中也有链接,可以用来测试是否搭建成功。

2,下面讲CPU下遇到的问题

①:没有编译convert_mnist_data,如下图,解决方案中一共有16个项目,其实是16个工程,各有各的用处吧,按照博客②中讲述,下载下来的训练数据要转换成caffe可以识别的leveldb或lmdb文件类型,作者还附上了批处理代码,很方便。但是这中间要用到convert_mnist_data.exe,但是两篇博客均没有讲要编译这个工程,结果转换失败后仔细看代码才发现这个问题!单独编译convert_mnist_data工程即可解决。

②:有了convert_mnist_data.exe还是不行,还是转换不成功,提示打开文件失败,然后再一次研究批处理代码,发现,要把下载好的四个文件解压,解压后,问题结局,成功转换。

③:训练及测试过程,caffe训练时调用转换好的leveldb或lmdb文件时的路径为.\examples\mnist,博客②中作者的批处理文件代码将转换好的文件输出到了\examples\mnist\mnist_data,需要自己拿出来,或者在两个转换的批处理文件代码中,输出路径设置为.\examples\mnist,如下:

train

Build\x64\Release\convert_mnist_data.exe --backend=lmdb examples\mnist\mnist_data\train-images.idx3-ubyte examples\mnist\mnist_data\train-labels.idx1-ubyte examples\mnist\mnist_train_lmdb  
pause 

test

Build\x64\Release\convert_mnist_data.exe --backend=lmdb examples\mnist\mnist_data\t10k-images.idx3-ubyte examples\mnist\mnist_data\t10k-labels.idx1-ubyte examples\mnist\mnist_test_lmdb  
Pause

设置好后,还存在一个问题,运行caffe.exe时提示:

④:Cannot use GPU in CPU-only,这个问题是在这里找到的:http://www.caffecn.cn/?/question/1199,但是文章中讲到在两个文件中都要做修改,一个是Makefile.config,另一个是examples/mnist/lenet_solver.prototxt,以笔者的渣渣编程基础觉得第一处修改意义并不大,因为这个都是按照程序来的,第一处本来就应该是注释。实测修改第二处即可,如果问题任然存在,可以尝试修改第一处。

        本次修改后,一次过,界面如下,最后的0.99应该是最后的识别率吧,不明觉厉,哈哈,深度学习就是厉害。


二、VS2013+caffe-master+GPU+cuda7.5+cudnnv5

1,cuda7.5+cudnnv5环境配置

GPU下主要安装一个cuda的平台和cudnn的加速库,其他和CPU一致,相关信息参考以下步骤:

①:安装CUDA7.5方式可以参考以下链接

    https://wenku.baidu.com/view/ef375d8587c24028905fc377.html

    https://blog.csdn.net/u011821462/article/details/50145221

    这两个链接应该可以解决Windows10+VS2013+cudnn的配置问题,第二个链接有测试教程,很不错,感谢大佬!

    这里讲一下我的安装经验(挺重要的)

        第一,在安装cuda时候,其实win10还是win7都无关紧要,只是在添加环境变量时候,win10有弹窗,每一条路径一行,而win7是用封号“;”隔开的,视觉上不太好,其他没有区别。

        第二,在安装cuda时候千万要注意cuda的版本问题,并不是版本越新越好,以caffe-master为例,它只支持cuda7.5,笔者刚开始直接装了cuda9.2,却发现cudnn都下载不了,截至目前(2018-5-27)9.2版本的CUDA还不支持Windows下的cudnn加速库,看后期NVIDIA有没有更新吧!于是笔者直接下了cuda7.5,其实caffe-master官方就是cuda7.5,为了兼容性好,墙裂安利cuda7.5.

        第三,下载cudnn时,笔者再一次犯错误,下载了cudnn v6,于是编译再一次报错,错误还不能定位,根本看不出来是cudnn版本错了,网上又是一番查找,无意中看到这篇帖子

https://blog.csdn.net/zb1165048017/article/details/51549105)提到了,caffe-master在GitHub上有明确说明,只支持cudnnv4、cudnnv5,都是英文的,一开始根本没看,准确说是看到鸟语本能性排斥。在这里强调一下,对于一个开发者,鸟语真的真的很重要!找到问题就很简单了,直接在NVIDIA官网下载cudnn v5 for cuda7.5,解压后将三个文件复制到cuda的安装目录C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5 相应的文件夹中。编译通过,这里再提一下,GPU版本编译过程及其缓慢,编译信息会轮回滚动好几轮,好像死循环似的,其实没有,耐心等待就好,大概半个小时,CPU好的话会时间短点。

        第四,强烈建议将显卡图形驱动更新到最新版本。

2,显卡算力                            (重要!重要!重要!)
        编译通过后,然后就是尝试运行了,制作训练和测试文件的教程和CPU完全一致,可以参考上面讲到的,三个批处理文件也可以复制过来直接使用,然后在运行caffe.exe训练时,报了如下的错误 Check failed: error == cudaSuccess (8 vs. 0)  invalid device function:
        要尝试在GPU上运行微软的caffe-master时,有一个很重要的问题就是 显卡算力的问题,在一些资料(网上也挺多的没保存,可以自行百度)中了解到,微软的caffe-master只支持GPU为3.0以上的算力,否则在运行训练(caffe.exe)时就会报错,具体报错信息为:。第一次出现这个问题时,把信息粘在百度上只搜到一篇CSDN博客(后来第二天又搜,居然出来很多,见鬼),问题讲到了,也很精确,但是解决方法不尽如人意,这里就不放帖子了,第二天连上VPN在Google上搜了下相关的信息,问题基本定位,就是显卡算力和程序不匹配导致的问题,但是Google上讲到的都是在运行一个叫fast-cnn的caffe框架时遇到的,相关修改文件和caffe-master不一样。所以问题又困扰了半天,在千百次尝试和碰壁之后终于解决了问题,这里详细讲述一下:
        ①:首先要准确了解自己的显卡算力是多少,可以去NVIDIA 官网查到对应型号的显卡算力,百度显卡算力就能找到,国内相关帖子也不少有相关链接的,懒得找的话可以去这里: https://en.wikipedia.org/wiki/CUDA 
        ②:在查到算力后,我先讲述我遇到的问题,我的显卡算力是3.0,网上查到好多说修改Makefile.config,在里面加一句-gencode arch=compute_30,code=sm_30,但是笔者发现根本没有这个文件,反而在caffe-master根目录下有两个文件Makefile(没有后缀)和Makefile.config.example(貌似编译caffe.sln时修改的配置文件CommonSettings.props.example),后来实测,表面其实Makefile.config没有照样可以运行,最主要的是在.\caffe-master\windows\CommonSettings.props里        <CudaArchitecture>处加上你的显卡算力,比如我的是3.0,就加上compute_30,sm_30;如下:
修改前:

修改后:


修改后保存,然后重新打开caffe.sln

先----->>清理解决方案!清理解决方案!清理解决方案!

然后------->重新编译所有!重新编译所有!重新编译所有!

至此,所有设置均已完成,编译结束后,运行上面提到的三个批处理命令,得到GPU训练下的程序运行图:


注:若是显卡算力低于3.0,笔者也没有遇到这样的问题,因为我的显卡是GT 750M,算力为3.0,我猜测若是显卡算力低于3.0的话,可以像我一样在CommonSettings.props做相应修改后,查看Makefile.config.example里看有没有自己的算力代码,若是显卡算力为2.0或者2.1相信也可以同样解决问题,若是低于2.0的话,我觉得可能单单修改CommonSettings.props已经不会有效果了,请兄弟自行查找相关解决问题吧,爱莫能助了!

写在最后:

第一次发帖子,不足之处,敬请谅解,欢迎指正!同时向感谢文章中的所有链接作者表示感谢!希望对相关研究者有所帮助!







猜你喜欢

转载自blog.csdn.net/qq_24631105/article/details/80455059