关键字:Windows、cpu模式、Python、faster-rcnn、demo.py声明:原文发表在博客园,未经允许不得转载!!!本篇blog过程已经多名读者实践验证,有人反馈报错TypeEr
关键字:Windows、cpu模式、Python、faster-rcnn、demo.py
声明:原文发表在博客园,未经允许不得转载!!!本篇blog过程已经多名读者实践验证,有人反馈报错TypeError:‘None Type‘ object has no attribute _getitem_‘,但拿本人编译好的文件可以跑通,对于此问题我没去探究,评论区给出了解决办法(nms函数cpu参数false改为true)。blog中除提到的下载链接外我还会给出网盘链接方便下载(链接失效,本人百度云上传次数受限无法再上传),包括我的整个工程的网盘链接。如果有些报错解决不了可直接拿本人的相关文件替换,本篇blog具有较高的参考性。
本人微软版caffe工程 下载链接:http://pan.baidu.com/s/1o83DIl0 提取密码:60zg
本人py-faster-rcnn工程 下载链接:http://pan.baidu.com/s/1bpjby2N 提取密码:t8aj
起因:导师交待目标检测有关论文的阅读任务,建议我跑下demo.py(一个测试小程序,可以读入图片及相关网络模型,进而对图片进行目标检测)。但是,我这个小白哪会啊?之前配置caffe环境电脑蓝屏重装系统后就一直不敢再装,后续实验都是在实验室有gpu的工作站上进行的。这次跃跃一试,本来配置的是gpu模式,到最后一步时,报了与cuda相关的错,后来查询电脑计算能力低于cudnn的最低要求,果断放弃gpu模式,转投cpu模式。但是网上真的没有教程啊,或者说只有那种极其简略的教程,debug也欲哭无泪,因为我源码没看多少。为避免后来人少走弯路,我着手写了这篇博客。本篇博客建立在作者没读过源码的基础上,所以很多解释都是较为粗糙但是实用的,我们的目标只有一个:Windows下用cpu模式跑通demo.py。实际上很多人不建议我用cpu跑,伤机器,可苦了我的ThinkPad e431。当初买电脑因为不玩游戏,所以买商务本,现在表示很后悔!
经过:经过?很痛苦、很痛苦、很痛苦,尤其是对一个啥也不会的小白来说更痛苦。不过在此过程中,有负责任的导师的帮助,还有幸遇到一个同济大神,他教会我很多东西!仅以此blog向他们致以崇高的敬意!
结果:当然是配好了gpu环境后发现自己显卡计算能力不够(配置gpu环境本篇不涉及,基本与cpu环境配置过程一致,只是要装cuda、cudnn以及修改一些配置信息),所以重新配置了cpu环境并跑通了demo.py。
特别感谢:俊杰哥(不想暴露他的信息)、导师、不染(QQ名)、rookie_cz(虽然他没教我什么,向他求助也不回我,但他的blog很有分量,略表感谢)。
适用对象:电脑上一切空白,没搭过caffe环境的人,py-faster -rcnn从零开始的人。
一、 准备工作
下载Anaconda2、visual studio 2013、opencv库以及notepad++
(1)下载Anaconda2.7(注意一定是2.7版本的,faster rcnn只支持Python 2.7)
下载链接:http://pan.baidu.com/s/1c11GaWC 提取密码:ak6q
本人安装了Anaconda windowsX64 2.7版本来配置python,安装Anaconda2后需要下载必要的python库,之所以选择Anaconda是因为它在安装时会自动安装一些必要的计算库。傻瓜式安装过程,为便于叙述的一致性,建议读者与我放在相同的路径下:D:\。
安装完成后按理说是会自动将Anaconda2中Python.exe的路径添加到系统环境变量中,最好是检查一下,至于怎么添加系统环境变量路径,我也是百度解决的。看了path,果然是自动添加的。
Anaconda安装完成后,打开cmd联网状态下敲入pip install protobuf回车再敲入pip install easydict回车,如图所示,联网状态下下载两个依赖包。如果这时敲pip list,可以看到机器所装的依赖包。因为我已经装过一遍,所以会有如下staisfied显示。
(2)下载visual studio 2013 文件太大,不提供网盘链接了,相信程序猿们一般都会下载,求助一个问题,怎么把vs2013的背景色由黑色变成白色,导师遇到了这个困惑。知道的同学麻烦留言。
(3)下载opencv图形图像处理库2.4版本
安装Opencv参考链接: http://www.cnblogs.com/chensheng-zhou/p/4895332.html
下载链接:http://pan.baidu.com/s/1jIdx6su 提取密码:a69d
我是放在了D:\中,把D:\opencv\opencv\build\python\2.7\x64目录下的cv2.pyd复制到D:\Anaconda2\Lib\site-packages目录下供后面调用。
(4)下载notepad++
下载链接:http://pan.baidu.com/s/1kV0wbav 提取密码:ozy7
一种文本编辑器,方便看打开文件的代码,傻瓜式安装。
二、 配置caffe环境 (cpu模式以及Python接口)
配置参考链接:
http://blog.csdn.net/xierhacker/article/details/51834563 http://www.cnblogs.com/LaplaceAkuir/p/6445189.html
由于我配置的是cpu环境,与它的大体过程差不多,但这两篇blog是网上为数不多讲的比较清楚的配置caffe环境文章,贴出来仅供参考,具体以以下操作步骤为准。
下载微软版的caffe,编译时它会自动在联网状态下下载第三方库,操作起来相对简单,这正是不选其他版本caffe的原因,下载链接:https://github.com/Microsoft/caffe。
下载链接:http://pan.baidu.com/s/1kVDntFh 提取密码:ff5n
打开网址页面如下,选择右上角clone or download-----dowmload zip下载caffe压缩包至电脑并解压,这里提醒一下,解压路径中最好不要有中文,比如我就放在E:\deep learning如图所示,解压后得到caffe—master文件夹。可以先无视我文件夹中的其他一些文件,比如cuda,实际上最后我也没用cuda,,至于原因前面已经提到过。
打开caffe-master文件夹,看到一个windows文件夹,打开windows文件夹,看到里面一个CommonSettings.props.example文件,复制一个副本,并改名字为CommonSettings.props,同时保留这两个文件(我发现好像编译caffe后CommonSettings.props.example文件貌似会消失,这里改主要是为了能使VS2013能识别,如图,前面加了了扳手图标)点进去修改一下配置信息,打开如下图,这里注意修改以下几个地方:(其他地方和我不一样可以先不用管)
第七行: true 采用cpuonly模式
第八行: false 不使用cudnn(与cuda加速深度学习的)
第十三行: true 编译Python接口需要打开
第四十八行:D:\Anaconda2 Python路径,建议放这保持一致
修改后保存、保存、保存
然后打开E:\deep learning\caffe-master,在此路径下找到Makefile.config.example文件,复制粘贴一个副本,并将名字修改为Makefile.config,这时同样看到一个小扳手图标。如图所示,点进去修改两个地方:
第八行: CPU_ONLY := 1 去掉#,文件本身这句是用#注释掉了
第八十七行:WITH_PYTHON_LAYER := 1 去掉#,文件本身这句是用#注释掉了
(by the way,如果觉得第多少行什么的不方便,建议用notepad++文本编辑器打开文件,如图可以显示行数) 修改后,保存、保存、保存。
打开caffe-master/windows/caffe.sln
在解决方案中找到libcaffe,右键点击“设为启动项目(A)”
在菜单栏找到调试—libcaffe属性,项目选择活动(released)、活动(x64)模式,修改libcaffe的C++常规设置,将警告视为错误选择否,如图所示。
设置完毕后即可开始编译了(如果只是为了跑通demo请先看三在libcaffe中添加三个文件),注意在联网状态下编译,这时会出现Nuget(第三方库)还原管理界面,结束后会在caffe-master的同级目录下生成一个NugetPackages的目录,装的是各种依赖库。
编译时间很长,耐心等待后没有报错就表明libcaffe编译完成了。然后在解决方案中找到pycaffe设为启动项目后进行上述相同的设置后编译。编译完成可能会报很多警告,只要不是错误就好了。
最后右键点击解决方案,点击重新生成解决方案,注意看是否是release模式
经过漫长的等待就会编译完毕,编译完成后,会得到一个bulid文件夹,如果你有图示的这些文件说明你上述编译成功了,注意看我下图的路径中的文件是否具备。
报错与解决:这块的报错我遇到过,一般会提醒某些格式错,用notepad++打开重新保存也许就可以解决了,主要是因为编码\n的问题。一般的错误百度基本都能找到解决办法。另外如果实在解决不了,那就按上述步骤重新编译一遍。
三、 faster-rcnn配置
配置参考链接:
http://blog.csdn.net/yueyuecsdn/article/details/53995383?winzoom=1
本来不打算把一、二分开写的,但考虑到任务不同,有的用caffe框架的任务不需要下述操作,所以还是分开写吧。如果是仅为了跑通py-faster-rcnn的demo.py可以在上述二中编译libcaffe前加入以下三个文件cu、cpp、hpp。
由于faster-rcnn中使用了roi-pooling-layer层,而微软版本编译时并未添加roi_pooling_layer,所以我们需要将hpp头文件、cu文件和cpp文件手动加入到libcaffe中。
具体操作:在caffe.sln的解决方案中找到libcaffe它目录下的cu-layers右键点添加-现有项,在E:\deep learning\caffe-master\src\caffe\layers中找到roi_pooling_layer.cu点添加。同样地,在libcaffe它目录下的include-layers右键点添加-现有项,在E:\deep learning\caffe-master\include\caffe\layers 中找到roi_pooling_layer.hpp点添加。最后,在在libcaffe它目录下的src-layers右键点添加-现有项,在E:\deep learning\caffe-master\src\caffe\layers中找到roi_pooling_layer.cpp点添加。
添加完成后,按照二中的说明编译libcaffe、pycaffe以及整个解决方案。
按照上述二、三过程,运行demo.py所需的环境基本上已经搭好了。以上如果出现了什么错,可以尝试重新生成试下,重新生成之前可以在VS2013菜单栏找到生成-清理解决方案点击,有时就是这么奇怪,重新生成就好了。
四、 跑通demo.py
参考链接:
http://blog.csdn.net/yueyuecsdn/article/details/53995383?winzoom=1
http://blog.csdn.net/chenzhi1992/article/details/53374265
将刚才编译好的E:\deep learning\caffe-master\Build\x64\Release\pycaffe目录下的caffe文件夹拷到D:\Anaconda2\Lib\site-packages目录下。
cmd命令行中敲入命令如图所示,如果结果如图所示显示>>>,说明Python接口已经搭好了。
下载py-faster-rcnn-master,链接:https://github.com/rbgirshick/py-faster-rcnn,打开网址页面如下,右上角clone or download下点击download zip下载压缩包后解压到电脑上,打开文件会发现py-faster-rcnn-master的caffe-fast-rcnn文件是空的,所以需要再点进去单独下载caffe-fast-rcnn然后解压到caffe-fast-rcnn文件夹,如图。
下载链接:http://pan.baidu.com/s/1jHDFeNc 提取密码:lpbc
下载链接:http://pan.baidu.com/s/1c2tiKDU 提取密码:oal1
下载好py-faster-rcnn-master,用E:\deep learning\caffe-master\Build\x64\Release\pycaffe目录下的caffe文件夹替换E:\deep learning\py-faster-rcnn-master\caffe-fast-rcnn\python目录下的caffe文件夹。
编译E:\deep learning\py-faster-rcnn-master\lib\setup.py,但这个setup是不能直接编译的。我用的是rookie_cz重新整理好的newsetup.py和setup_cuda.py下载后放到lib下。
下载链接:http://pan.baidu.com/s/1c1Ugq7u 提取密码:2dis
具体操作为:首先在电脑中搜索cl.exe的路径,将其路径添加到环境变量中(添加环境变量步骤请百度)。cl.exe在VS2013路径下:D:\vs2013\VC\bin,如图我把该路径添加到path中。
如果没有将cl.exe路径添加到环境变量中,就会报下面这个错。
然后在cmd中直接cd到lib下面,执行 python newsetup.py install 和python setup_cuda.py install,如图。
可能执行过程中会报错,以执行 python newsetup.py install为例,可能会出现如图所示的错误。
这时只需要接着报错error在cmd中敲SET VS90COMNTOOLS=%VS120COMNTOOLS% (如果用的是vs2013),敲完这句回车,继续敲python newsetup.py install,应该就没问题了。同样地,接着敲python setup_cuda.py install。执行这句可能会遇到下面这个错,只需下载一个lib文件夹来替换,用lib下的nms文件夹直接替换你的E:\deep learning\py-faster-rcnn-master\lib 目录下nms文件夹就行了,替换后重新python setup_cuda.py install。
下载链接:http://pan.baidu.com/s/1hrNm8te 提取密码:1ucz
两个py文件正确install的结果如图所示。
编译完成后,将经过上述编译两个py文件后产生的两个后缀为.pyd的文件在E:\deep learning\py-faster-rcnn-master\lib\build\lib.win-amd64-2.7\nms目录下复制拷到E:\deep learning\py-faster-rcnn-master\lib\nms中。(最佳的方法你直接用我的nms文件替换你的,可以省略很多步骤)
下载caffemodel(里面包括VGG网络和ZF网络训练好了的参数)解压到E:\deep learning\py-faster-rcnn-master\data目录下。
下载链接:http://pan.baidu.com/s/1kUYBIth 提取密码:qs85
以上过程可能会遇上我blog里未给出的错误,如果按照我的过程做,应该是不会遇到一些典型错误的,如果真的遇到有两种解决办法:一是百度,二是参考我给出的几条blog链接。
在跑demo之前还需要改几个地方防止它以gpu模式运行:
1.E:\deep learning\py-faster-rcnn-master\lib\fast_rcnn目录下nms_wrapper.py文件改成下面如图,主要是注释了几行,第9、17、18、19行。
2.E:\deep learning\py-faster-rcnn-master\tools目录下demo.py文件改成如图,注释了几个地方,另外做了部分修改。(建议可以直接替换我工程里的demo.py)
3.E:\deep learning\py-faster-rcnn-master\lib\rpn目录下proposal_layer.py文件修改第26行,将后面括号中的变量self.param_str_最后一个_去掉。
这里如果不改会报下面如图这个错。
E:\deep learning\py-faster-rcnn-master\lib\rpn目录下proposal_layer.py文件修改64—69行,改成我这个样子,恒定取值。如果觉得麻烦可以去我的工程里直接替换这个文件,貌似这步我改复杂了,可以百度参考一些blog。
如果不作这步修改,可能出现以下如图错误。
4.E:\deep learning\py-faster-rcnn-master\lib\nms目录下cpu_nms.pyx修改第25行,我是把第25行注释了,所以是第26行。将np.int_t改成np.intp_t保存,还是要觉得不妥直接替换我的工程就行了。我个人强烈建议在前面就用我工程的nms文件来替换你的,这样关于nms文件夹内很多文件修改都不用做了。如果没有用我的nms文件夹替换,在修改cpu_nms.pyx文件后需要重新执行python newsetup.py install和python setup_cuda.py install
如果不作这步修改,可能会报如图以下错误。
这时如果上述操作没问题,就可以跑了,首先cmd中cd到demo.py所在的文件夹E:\deep learning\py-faster-rcnn-master\tools
加载过程会比较慢的,耐心等吧,而且特别伤cpu。
跑成功的截图如图所示:
结语:写这篇blog花了我几天时间,本来准备用CSDN发表博客,但用过CSDN的人应该清楚我不用它的原因,因为有图CSDN插图太复杂。人生的第一篇blog教程,主要还是为了让大家避免走弯路。大家如果觉得有用,看完后心中默念:祝作者家庭幸福、学习进步、生活如意、爱情快来! 哈哈,接受大家的祝福我会很happy的。