Windows下用cpu模式跑通目标检测py-faster-rcnn 的demo.py

关键字:Windows、cpu模式、Python、faster-rcnn、demo.pyhtml

声明:原文发表在博客园,未经容许不得转载!!!本篇blog过程已经多名读者实践验证,有人反馈报错TypeError:‘None Type‘ object has no attribute _getitem_‘,但拿本人编译好的文件能够跑通,对于此问题我没去探究,评论区给出了解决办法(nms函数cpu参数false改成true)。blog中除提到的下载连接外我还会给出网盘连接方便下载(连接失效,本人百度云上传次数受限没法再上传),包括个人整个工程的网盘连接。若是有些报错解决不了可直接拿本人的相关文件替换,本篇blog具备较高的参考性。python

本人微软版caffe工程     下载连接:http://pan.baidu.com/s/1o83DIl0 提取密码:60zggit

本人py-faster-rcnn工程    下载连接:http://pan.baidu.com/s/1bpjby2N 提取密码:t8ajgithub

原由:导师交待目标检测有关论文的阅读任务,建议我跑下demo.py(一个测试小程序,能够读入图片及相关网络模型,进而对图片进行目标检测)。可是,我这个小白哪会啊?以前配置caffe环境电脑蓝屏重装系统后就一直不敢再装,后续实验都是在实验室有gpu的工做站上进行的。此次跃跃一试,原本配置的是gpu模式,到最后一步时,报了与cuda相关的错,后来查询电脑计算能力低于cudnn的最低要求,果断放弃gpu模式,转投cpu模式。可是网上真的没有教程啊,或者说只有那种极其简略的教程,debug也欲哭无泪,由于我源码没看多少。为避免后来人少走弯路,我着手写了这篇博客。本篇博客创建在做者没读过源码的基础上,因此不少解释都是较为粗糙可是实用的,咱们的目标只有一个:Windows下用cpu模式跑通demo.py。实际上不少人不建议我用cpu跑,伤机器,可苦了个人ThinkPad e431。当初买电脑由于不玩游戏,因此买商务本,如今表示很后悔!小程序

通过:通过?很痛苦、很痛苦、很痛苦,尤为是对一个啥也不会的小白来讲更痛苦。不过在此过程当中,有负责任的导师的帮助,还有幸遇到一个同济大神,他教会我不少东西!仅以此blog向他们致以崇高的敬意!windows

结果:固然是配好了gpu环境后发现本身显卡计算能力不够(配置gpu环境本篇不涉及,基本与cpu环境配置过程一致,只是要装cuda、cudnn以及修改一些配置信息),因此从新配置了cpu环境并跑通了demo.py。网络

特别感谢:俊杰哥(不想暴露他的信息)、导师、不染(QQ名)、rookie_cz(虽然他没教我什么,向他求助也不回我,但他的blog颇有份量,略表感谢)。app

适用对象:电脑上一切空白,没搭过caffe环境的人,py-faster -rcnn从零开始的人。框架

1、  准备工做

下载Anaconda二、visual studio 201三、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

一种文本编辑器,方便看打开文件的代码,傻瓜式安装。

2、  配置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能识别,如图,前面加了了扳手图标)点进去修改一下配置信息,打开以下图,这里注意修改如下几个地方:(其余地方和我不同能够先不用管)

第七行:  <CpuOnlyBuild>true</CpuOnlyBuild>    采用cpuonly模式

第八行:  <UseCuDNN>false</UseCuDNN>           不使用cudnn(与cuda加速深度学习的)

第十三行: <PythonSupport>true</PythonSupport>  编译Python接口须要打开

第四十八行:<PythonDir>D:\Anaconda2</PythonDir>  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的问题。通常的错误百度基本都能找到解决办法。另外若是实在解决不了,那就按上述步骤从新编译一遍。

3、  faster-rcnn配置

配置参考连接:

http://blog.csdn.net/yueyuecsdn/article/details/53995383?winzoom=1

原本不打算把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以及整个解决方案。

 

按照上述2、三过程,运行demo.py所需的环境基本上已经搭好了。以上若是出现了什么错,能够尝试从新生成试下,从新生成以前能够在VS2013菜单栏找到生成-清理解决方案点击,有时就是这么奇怪,从新生成就行了。

4、  跑通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文件改为下面如图,主要是注释了几行,第九、1七、1八、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的。

相关文章
相关标签/搜索