热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

关键字: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的。

 


推荐阅读
  • 本文详细介绍了如何在Oracle VM VirtualBox中实现主机与虚拟机之间的数据交换,包括安装Guest Additions增强功能,以及如何利用这些功能进行文件传输、屏幕调整等操作。 ... [详细]
  • Requests库的基本使用方法
    本文介绍了Python中Requests库的基础用法,包括如何安装、GET和POST请求的实现、如何处理Cookies和Headers,以及如何解析JSON响应。相比urllib库,Requests库提供了更为简洁高效的接口来处理HTTP请求。 ... [详细]
  • 调试利器SSH隧道
    在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需要通过线上域名才能正常访问。但我们一般都会在本地开发,因为这能快速的看到 ... [详细]
  • 本文探讨了在一个物理隔离的环境中构建数据交换平台所面临的挑战,包括但不限于数据加密、传输监控及确保文件交换的安全性和可靠性。同时,作者结合自身项目经验,分享了项目规划、实施过程中的关键决策及其背后的思考。 ... [详细]
  • PyCharm 安装与首个 Python 程序实践
    本文将指导您如何安装 PyCharm,并通过创建一个简单的 'Hello, World' 程序来初步体验这一强大的 Python 集成开发环境。 ... [详细]
  • 如何在Windows 7 64位系统中成功注册DLL文件
    本文详细介绍了在Windows 7 64位系统中注册DLL文件的具体步骤,包括使用管理员权限运行命令提示符以及正确的路径导航方法,确保注册过程顺利进行。 ... [详细]
  • 本文详细探讨了在使用 Python 的 pip 工具安装包时遇到的 ReadTimeoutError 错误,并提供了有效的解决方案。 ... [详细]
  • Windows Phone 弹出窗口实现方案
    在当前版本的 Silverlight for Windows Phone 中,由于缺乏对 ChildWindow 的支持,开发者需要采用其他方法来实现弹出窗口的功能。本文将探讨几种有效的解决方案。 ... [详细]
  • 在OpenCV 3.1.0中实现SIFT与SURF特征检测
    本文介绍如何在OpenCV 3.1.0版本中通过Python 2.7环境使用SIFT和SURF算法进行图像特征点检测。由于这些高级功能在OpenCV 3.0.0及更高版本中被移至额外的contrib模块,因此需要特别处理才能正常使用。 ... [详细]
  • 回顾两年前春节期间的一个个人项目,该项目原本计划参加竞赛,但最终作为练习项目完成。独自完成了从编码到UI设计的全部工作,尽管代码量不大,但仍有一定的参考价值。本文将详细介绍该项目的背景、功能及技术实现。 ... [详细]
  • 如何在PHP中安装Xdebug扩展
    本文介绍了如何从PECL下载并编译安装Xdebug扩展,以及如何配置PHP和PHPStorm以启用调试功能。 ... [详细]
  • 深入理解:AJAX学习指南
    本文详细探讨了AJAX的基本概念、工作原理及其在现代Web开发中的应用,旨在为初学者提供全面的学习资料。 ... [详细]
  • 本文记录了在Windows 8.1系统环境下,使用IIS 8.5和Visual Studio 2013部署Orchard 1.7.2过程中遇到的问题及解决方案,包括503服务不可用错误和web.config配置错误。 ... [详细]
  • 本文介绍了一种方法,通过使用Python的ctypes库来调用C++代码。具体实例为实现一个简单的加法器,并详细说明了从编写C++代码到编译及最终在Python中调用的全过程。 ... [详细]
  • 本文介绍如何使用JavaScript中的for循环来创建一个九九乘法表,适合初学者学习循环结构的应用。 ... [详细]
author-avatar
MC红石粉
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有