一、跑通demo.py
该章节是基于Windows下用cpu模式跑通目标检测py-faster-rcnn 的demo.py
(以下简称这篇文章为“参考博客A”)以及rookie_chenzhi的文章,但是出了几个小错误,我的解决方案如下:
1.EnvironmentError: The nvcc binary could not be located in your $PATH. Either add it to your path, or set $CUDA_PATH
,把参考博客A里面提到newsetup.py第66行的CUDA = locate_cuda()
注释掉就可以了(这也是参考博客的评论区提供的解决方案)
2.注释后又报了一个错:error: Microsoft Visual C++ 9.0 is required. Get it from http://aka.ms/vcpython27
,解决方案在这http://blog.chedushi.com/archives/10610,简单说就是下载http://aka.ms/vcpython27提供的软件
3.然后是接着报错:fatal error C1083: Cannot open include file: 'stdbool.h': No such file or directory
,这个问题的解决办法来自CSDN-bbs的3楼,他的解决办法是去anaconda2的安装目录下面的Lib\distutils\目录下修改msvc9compiler.py,把304行的VERSION = get_build_version()
改成VERSION = 12.0
,如图:
其实这个问题我找了一圈,有所需要卸载VCForPython27.msi的,但是我安装又卸载后会报上面提到的第2个错误;另外就是设置VS90COMNTOOLS系统变量,但是也不行,只有BBS提到的解决办法才行得通。
编译成功后就获得了这个文件,它的路径我也截出来了:
4.运行demo.py时报错:from matplotlib import afm, cbook, ft2font, rcParams, get_cachedir ImportError: DLL load failed: 找不到指定的程序。
这个就是用pip卸载matplotlib然后安装matplotlib就可以了
5.Did you run ./data/script/fetch_faster_rcnn_models.sh?
:错误原因是没有下载caffemodel并解压到相应目录
6.File "D:\py-faster-rcnn-master\py-faster-rcnn-master\tools\..\lib\rpn\proposal_layer.py", line 66 pre_nms_topN=6000 ^ IndentationError: unexpected indent Traceback (most recent call last): File "demo.py", line 135, in <module> net = caffe.Net(prototxt, caffemodel, caffe.TEST) SystemError: NULL result without error in PyObject_Call
这个报错主要就是那个unexpected indent,这个问题我觉得很神奇,我自己按tab给它加空格不可以,但是从GitHub的源文件中复制整分文件的内容+粘贴+修改就可以了
7.TypeError: 'NoneType' object has no attribute '__getitem__'
:nms_wrapper.py只需要注释第9行,而参考博客提到的第17,18,19行不需要注释
8.error MSB8020: The build tools for v142 (Platform Toolset = ‘v142’)
cannot be found. To build using the v142 build tools, please install
v142 build tools.
解决方案:项目->属性->配置属性->常规->平台工具集,切换到当前vs版本。
后来经过我的一番折腾,发现问题根源是这个解决方案此前已经在VS2019中打开过了,如果切换了版本还是不行的话,亲测可以把项目删了,再用当前版本的vs打开
9.error MSB4030: “否 (/WX)”对于“CL”任务的“TreatWarningAsError”参数是无效值。
项目->属性->配置属性->C/C++,在“将警告视为错误”那里填入True或者False(虽然我的截图里是这么显示,但我填的时候还是必须填True或者False才能不报上面这个错)
最后,运行demo.py的命令是python demo.py --cpu --net zf
最后,附一张跑通demo的截图:
powershell:
运行结果:
二、用自己的数据集训练数据
进入train_faster_rcnn_alt_opt.py所在的目录(我的目录是D:\py-faster-rcnn-master\py-faster-rcnn-master\tools
)运行指令
python train_faster_rcnn_alt_opt.py --net_name ZF --weights D:\py-faster-rcnn-master\py-faster-rcnn-master\data\imagenet_models\ZF.v2.caffemodel --cfg D:\py-faster-rcnn-master\py-faster-rcnn-master\experiments\cfgs\faster_rcnn_alt_opt.yml --imdb voc_2007_trainval
1.WARNING: Logging before InitGoogleLogging() is written to STDERR F0420 22:21:26.886875 10116 common.cpp:75] Cannot use GPU in CPU-only Caffe: check mode.
最后是通过极客分享的文章解决的,具体原因就是train_faster_rcnn_alt_opt.py默认是用gpu模式跑的,我们需要做的就是把train_faster_rcnn_alt_opt.py第34~36行的代码注释掉,如下:
然后把103行的caffe.set_service(cfg.GPU_ID)
注释掉,并把102行的caffe.set_mode_gpu()
改成caffe.set_mode_cpu()
2.报错:No module named cython_bbox
,解决方案:把自己编译后的py-faster-rcnn\lib\build\lib.win-amd64-2.7\下面的三个文件夹nms,pycocotools,utils,拷贝到py-faster-rcnn\lib目录下即可,其实就是编译生成的pyd文件放到指定的位置。
转自:c437yuyang的文章
3.cls = self._class_to_ind[obj.find('name').text.lower().strip()] KeyError: 'face_mask'
。根据GitHub,我的解决方案如下:
找到第191行的objs = non_diff_objs
,然后添加如下代码
cls_objs = [obj for obj in objs if obj.find('name').text in self._classes]
objs = cls_objs
效果如下:
4.然后就是这个错误了:AssertionError: Selective search data not found at: D:\py-faster-rcnn-master\py-faster-rcnn-master\data\selective_search_data\voc_2007_trainval.mat
,就是把__C.TRAIN.PROPOSAL_METHOD
的值改为’gt’
5.接下来是这个错误:
Creating training net from train_net file: models/pascal_voc/ZF/faster_rcnn_alt_opt/stage1_rpn_train.pt F0422 00:28:39.919773 21748 io.cpp:41] Check failed: fd != -1 (-1 vs. -1) File not found: models/pascal_voc/ZF/faster_rcnn_alt_opt/stage1_rpn_train.pt *** Check failure stack trace: ***
极客分享的解决方案:把py-faster-rcnn/models/pascal_voc/ZF/faster_rcnn_alt_opt下的4个stage_solver类文件里面的train_net的路径改成绝对路径
6.AttributeError: 'RoIDataLayer' object has no attribute 'param_str_'
解决办法:分别把以下4个文件里面的param_str_
改成param_str
:
py-faster-rcnn/lib/rpn/anchor_target_layer.py
py-faster-rcnn/lib/rpn/proposal_layer.py
py-faster-rcnn/lib/rpn/proposal_target_layer.py
py-faster-rcnn/lib/roi_data_layer/layer.py
参考自kirk86 的回答
7.File "mtrand.pyx", line 1197, in mtrand.RandomState.choice TypeError: 'numpy.float64' object cannot be interpreted as an index
解决方法:mr956的回答
8.bbox_targets[ind, start:end] = bbox_target_data[ind, 1:] TypeError: slice indices must be integers or None or have an __index__ method
结合github和这篇博客中评论区里面gulingfengze的评论可解决
10.smooth_l1_loss_layer.cpp:49] Not Implemented Yet *** Check failure stack trace: ***
,主要是参考这篇博客,但还在解决当中