win7下py-faster-rcnn-master下跑通demo.py



最近一直在看RCNN相关的内容,看完论文就要实现一下。我的caffe一直用的是windows平台,而很多官方文档都是在linux底下操作的,所以只能求助各种大神(Linux菜鸟一枚。。。)。优快云博客上大神特别多,他们写的很简单,我就掉进了很多坑,每次掉进去都感觉要爬不上来了。不过,功夫不负有心人,折腾了将近一周,终于跑通了demo。

在此,特别感谢rookie_cz,遇到的很多问题都是请教这位大神,帮了我很多。

平台:Win7
显卡:GTX960
python IDE: Anaconda2(2.7.11)
caffe安装包:Microsoft

下面,开始正文。
1 编译caffe
1.1 从微软的Github下载caffe-master,网址https://github.com/Microsoft/caffe,下载安装包。 这里写图片描述
在网页的下方有详细的安装说明。
这里写图片描述
我简单做了下翻译:
Requirements: Visual Studio 2013
Pre-Build Steps: 将.\windows\CommonSettings.props.example 复制重命名为 .\windows\CommonSettings.props,还是同一个文件夹底下。
这里写图片描述

如果电脑中没有GPU,可以通过调整.\windows \ CommonSettings.props 中的变量禁用CUDA和cuDNN,默认情况下是支持CUDA和cuDNN的。Python在默认情况下禁用,但也可以通过\ windows \ CommonSettings.props启用。Caffe需要的第三方依赖(用过happynear的caffe应该会知道大神自己攒了一个第三方库)关系通过NuGet自动解析。
CUDA
从NVIDIA官网下载自己显卡对应版本的CUDA,目前,除了1080,用的都是CUDA7.5。环境变量会自动添加,就是傻瓜式安装。如果没有GPU,可以在CommonSettings.props 将CpuOnlyBuild 设置为 true ,同时将set UseCuDNN to false.
cuDNN
Download cuDNN v4 or cuDNN v5 from nVidia website. 将下载的zip解压缩到%CUDA_PATH%(由CUDA安装程序设置的环境变量)或者,可以将zip解压缩到任何位置,然后CommonSettings.props.CuDnnPath处添加这个位置,我的解压位置在D:\**\software,cuda文件夹就是解压后的cuDNN。
这里写图片描述

这里写图片描述
Python
因为要使用python接口,我们在\ windows \ CommonSettings.props中将PythonSupport设置为true。微软推荐的是 从Miniconda网站下载Miniconda 2.7 64位Windows安装程序。我用的是Anaconda2,都可以。程序安装完后,会自动添加python的路径到环境变量中。同时,注意设置CommonSettings.props中python的路径。
这里写图片描述
另外,没有安装protobuf的,可以用pip install protobuf安装。
不用pip 安装的话,注意下载最新版本的,否则和caffe有兼容问题。
Build
双击.\windows\Caffe.sl打开caffe的VS工程,右键libcaffe重新生成,编译libcaffe。之后编译pycaffe,之后用的到。
Remark
编译完成后,设置 PythonPath 环境变量值为 \Build\x64\Release\pycaffe
或者复制 \Build\x64\Release\pycaffe\caffe 到\lib\site-packages.

2 编译py-faster-rcnn-master
2.1 下载py-faster-rcnn-master,网址:https://github.com/rbgirshick/py-faster-rcnn,直接点击下载后,下载的压缩文件解压后,里面的caffe-fast-rcnn是空的,所以要点进去下载后,然后解压到caffe-fast-rcnn文件中。
这里写图片描述

2.2 编译lib\setup.py,但这个setup是不能直接编译的。我用的是rookie_cz重新整理好的newsetup.py和setup_cuda.py,链接:http://blog.youkuaiyun.com/chenzhi1992/article/details/53374265
然后,直接cd到lib下面,执行 python newsetup.py install 和python setup_cuda.py install。如果遇到找不到cl.exe之类的问题,把cl.exe路径添加到环境变量中去就行了。
2.3 其实编译完之后就可以测试demo了,然而,呵呵。。。重点来了,运行demo的时候报错说找不到roi pooling layer。然后我就比较了一下caffe-root和rbg的caffe分支,发现\py-faster-rcnn-master\caffe-fast-rcnn\include\caffe底下多了个fast_rcnn_layers,这是roi和smooth L1的声明文件,然后别的都一样,真的是都一样啊。caffe-root的\src\caffe\layers底下有roi_pooling_layer.cpp/cu和smooth_l1_loss_layer.cpp/cu,这四个文件都有;然后\src\caffe\proto中caffe.proto文件中也有roi的注册,那些写博客要添加这些东西的大神们,让我抑郁了很久。然并卵,再次运行demo,还是找不到roi,然后我又郁闷了很久。时间过的好快,然后元旦我就出去玩了三天。
这里写图片描述
回来之后发现,一直忽略了VS工程中打开的libcaffe以及pycaffe,然后检查了一下libcaffe,果然,真想骂人!!工程中没有添加roi_pooling_layer.cpp和cu,smooth的cpp和cu倒是有。没办法了,把roi_pooling_layer.cpp和cu还有那个fast_rcnn_layers.hpp粘贴到工程中相应位置,然后重新编译caffe,编译的过程慢的不行不行的啊。。。。顺便重新编译下pycaffe,然后把生成的 \Build\x64\Release\pycaffe\caffe 复制到\lib\site-packages替换掉原来的caffe。这样基本上问题就解决了。测试demo.py结果如下:
这里写图片描述
此外还有一些我遇到的其他问题:
1 no module named _caffe
这是pycaffe没有编译好,重新编译一下。但是我有一次发现,faster-rcnn-master\caffe-fast-rcnn\python\caffe报错,no module named _caffe。我重新编译了之后还是有问题。然后我就把py-faster-rcnn-master\caffe-fast-rcnn\python\caffe用编译后的release\pycaffe\caffe替换,就可以了。
2 proposal_layer.py 中 pre_nms_topN = cfg[cfg_key].RPN_PRE_NMS_TOP_N, keyerror = 1
解决方法 :
进行如下修改
cfg_key = str(self.phase) # either ‘TRAIN’ or ‘TEST’
cfg_key = str(‘TRAIN’ if self.phase == 0 else ‘TEST’)
3 cannot import name set_random_seed
解决方法:参考https://github.com/BVLC/caffe/pull/4351/files#diff-9b973c3db5bcd89fc0a5e1977f7cd70aL57
4 最后再说一句,如果电脑上装了mingw,编译setup_cuda.py的时候可能会碰到g++的问题,我把ming卸载了就没问题了。

<think>好的,我现在需要解决用户在Python中使用Pillow库时遇到的AttributeError: 'ImageDraw' object has no attribute 'textsize'问题。首先,我得理解这个错误的原因。用户提到在生成词云图时报错,可能是在调用ImageDraw的textsize方法时发生的。 根据引用[4]的内容,这个问题可能与Pillow的版本有关。特别是当Pillow升级到10.0.0或更高版本时,ImageDraw模块中的textsize方法被移除了。所以,我需要检查用户当前的Pillow版本。如果版本是10.0.0及以上,那么降级到9.5.0或更早的版本可能可以解决问题。 接下来,我需要指导用户如何检查他们的Pillow版本。可以过在Python环境中运行import PIL和print(PIL.__version__)来查看。如果确认是版本问题,用户需要使用pip安装旧版本的Pillow,比如pip install Pillow==9.5.0。 此外,如果用户无法降级版本,可能需要修改代码,使用替代方法。例如,引用[4]提到可以使用textbbox方法来代替textsize。textbbox返回一个包含文本边界的元组,从中可以提取宽度和高度。因此,将draw.textsize(text)改为draw.textbbox((0, 0), text)[2:4]可能有效。 还要注意,代码中是否正确导入了ImageDraw模块,是否有拼写错误或者其他语法问题。但根据错误信息,更可能的是版本兼容性问题。 最后,建议用户测试修改后的代码,确保问题已经解决。如果降级后仍然存在问题,可能需要尝试更旧的版本,比如9.4.0,如引用[4]所述。 总结解决方案步骤:检查版本,降级Pillow或修改代码使用替代方法。需要将这些步骤清晰地传达给用户,并提供具体的命令和代码示例,确保他们能顺利操作。</think>### 解决方案:Pillow库AttributeError: 'ImageDraw' object has no attribute 'textsize' 该问题主要由**Pillow版本升级导致API变更**引起。以下是具体解决步骤: --- #### **第一步:检查当前Pillow版本** 在Python环境中运行以下代码确认版本: ```python import PIL print(PIL.__version__) # 输出结果例如"10.0.0"[^4] ``` --- #### **第二步:降级Pillow到兼容版本** 如果版本≥10.0.0,过以下命令降级: ```bash pip uninstall Pillow # 先卸载当前版本 pip install Pillow==9.5.0 # 安装兼容版本[^4] ``` --- #### **第三步:代码适配新API(可选)** 如果无法降级,改用`textbbox`方法替代`textsize`: ```python from PIL import ImageDraw # 原始报错代码 # width, height = draw.textsize(text) # 修改后代码 bbox = draw.textbbox((0, 0), text, font=font) # 获取文本边界框 width = bbox[2] - bbox[0] # 计算宽度 height = bbox[3] - bbox[1] # 计算高度 ``` --- #### **验证修复** 重新运行程序,确保错误消失。若仍存在问题,尝试进一步降级到`9.4.0`: ```bash pip install Pillow==9.4.0 ``` --- ### 关键原因 Pillow 10.0.0移除了`ImageDraw.textsize()`方法,改用`textbbox()`实现类似功能。若依赖旧版代码,需回退版本或适配新API。 ---
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值