windows下安装cpu模式的faster-rcnn并用自己的数据集训练模型踩坑记录

一、跑通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: ***,主要是参考这篇博客,但还在解决当中

Faster R-CNN(区域卷积神经网络)是一种流行的目标检测算法,它结合了Region Proposal Network (RPN) 和 Fast R-CNN 的优点。如果你想在PyTorch上使用Faster R-CNN来训练自己的数据集,你需要遵循以下步骤: 1. 数据准备:首先,你需要准备标注好的训练图像和相应的边界框(BBox)。PASCAL VOC、COCO等都是常见的目标检测数据集,如果你有自己的数据,需要将其转换成标准格式,如XML或YOLO的txt文件。 2. 准备库:安装必要的库,包括PyTorch、Detectron2(基于Faster R-CNN的库)、torchvision,以及用于数据处理的工具如`xml.etree.ElementTree`(如果需要解析XML)。 3. 加载预训练模型:下载并加载预训练的Faster R-CNN模型,比如COCO模型,作为起点,这将为你的网络提供基础结构。 4. 定义自定义数据模块:创建一个新的数据模块,继承自Detectron2的`DatasetMapper`,并针对你的数据集调整输入大小、颜色空间转换等参数。 5. 训练配置:编写一个训练配置文件,指定优化器、学习率策略、迭代次数、批大小等参数,并指明你的模型路径。 6. 实现训练循环:使用Detectron2的`DefaultTrainer`类,设置数据模块、模型、配置和其他训练选项,然后运行训练循环。 ```python from detectron2.engine import DefaultTrainer # 创建训练器实例 trainer = DefaultTrainer( model="COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x", data_loader_train=..., data_loader_val=..., cfg=cfg, # 自定义训练配置 ) # 开始训练 trainer.train() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值