Faster-Rcnn训练出现的问题

本文总结了在Ubuntu环境下使用fasterrcnn进行训练时常见的错误及其解决方案,包括目标种类不匹配、图片尺寸不符等问题,并提供了调整迭代次数以缩短训练时间的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下问题是在Ubuntu下用faster rcnn(caffe与matlab)训练时所遇到的,我的解决方法不见得对其他人都使用:

1、错误使用 containers.Map/values,此容器中不存在指定的键。出错 roidb_from_voc>attach_proposals (line 172)

gt_classes = class_to_id.values({voc_rec.objects(valid_objects).class})

答:你标注的目标种类与datasets/VOCdevkit2007/VOCcode/VOC2007/VOCiniy.m中指定的目标种类不匹配。比如你只在VOCinit.m中写了一个目标类型标签‘car',但你标记结果Annotations/中某个.xml中不小心标注两种对象object如'car'和'person’。这样机会报错,解决方法是重新标记那个.xml对应的图片,去掉多余的目标种类。

2、错误使用 proposal_prepare_image_roidb>scale_rois (line 110),两个输入数组的非单一维度必须相互匹配。

答:可能有如下原因:

①一是要识别的是plane并且标注的xml文件中目标名称也是plane,但VOCinit.m中写的目标类型标签是‘car',两者不匹配所以出问题,将VOCinit.m中的label改为'plane'即可;

②二是图片有问题,不是指.jpg或.png图片格式的问题,而是指图片本身存在问题。我是原因是:图片尺寸有问题,一般要求500*375或375*500,例如标准VOC数据集中基本都是这两种大小或者接近这两种大小的图片。我从百度图片上拷贝下来的图片尺寸千差万别,没有对尺寸进行修正直接训练,所以出错。

③可能是Annotations/中的xml文件文字格式有问题,我开始使用labelImg标注训练没问题,后来因为需要对xml文件内容做一定修改,就编写了一个matlab程序对所有的xml批量修改,然后就出错了。原因是修改后:紧凑型xml变为常规型,是的读取时多了几个空格节点。具体表现如下:

1°、xml开头多了一个xml声明格式语句:<?xml version="1.0" encoding="utf-8"?>;

2°、因为上述1中开头的格式设置,修改后的xml每行之间的空格也变大了。

这些用MATLAB打开可以看到,如下:

有问题的格式:


正确格式:


解决办法:①labelImg可以识别这些有问题的格式,所以我直接就是用labelImg打开并重新保存一下,然后格式就正确了;②或者用MATLAB语句编写程序批量删除,怎么写程序没研究。

注:这个问题在小咸鱼的数据集制作文章中也有介绍。

补充:网上有人说需要将“experiments\+Dataset\voc2007_test.m第11行、第14行,test改成val”,但我觉得这个应该不是根本原因。

……,可能还有其他具体原因,但对于该错误,一般是准备的数据集有问题。直接导致出问题的原因一般在标注文件Annotations中。

3、若仅仅为了测试跑通faster rcnn,可以修改迭代次数以减少训练用时,如下:

答:对于ZF模型,faster rcnn默认迭代文件分别是:

①fast rcnn部分用的solver_30k40k.prototxt,所以将其中的stepsize:30000和max_iter:40000改小即可,如改为:stepsize: 3000和max_iter: 4000;

一共有两个,home/hustac/faster_rcnn/models/fast_rcnn_prototxts/ZF/和home/hustac/faster_rcnn/models/fast_rcnn_prototxts/ZF_fc6中分别有一个,都改一下。

②proposal部分用的solver_60k80k.prototxt,所以将其中的stepsize:60000和max_iter:80000改小即可,如改为:stepsize: 6000和max_iter: 8000;

一共有两个,home/hustac/faster_rcnn/models/rpn_prototxts/ZF/和home/hustac/faster_rcnn/models/rpn_prototxts/ZF_fc6中分别有一个,都改一下。

### Faster-RCNNFaster-rcnn 的命名差异及实现上的区别 #### 命名差异 "Faster-RCNN" 和 "Faster-rcnn" 主要体现在大小写的不同上。这种差异通常并不表示两种完全不同的算法或框架,而是可能源于不同开发者、团队或者文档中的书写习惯[^1]。在计算机科学领域,尤其是在开源项目中,大小写的差异有时仅是为了区分项目的具体分支、版本或者是个人偏好所致。 然而,在某些情况下,大小写的变化也可能暗示着具体的实现细节有所不同。例如,“Faster-RCNN”可能是原始论文或官方实现所采用的标准名称,而“Faster-rcnn”则可能代表某个特定社区维护的派生版本或是针对某一编程语言(如 Python 或 TensorFlow)优化后的变体[^2]。 #### 实现上的区别 尽管两者本质上都基于同样的核心思想——即通过引入区域提议网络(Region Proposal Network, RPN)加速目标检测过程并减少对外部候选框生成工具(如 Selective Search)的依赖,但在实际应用过程中可能存在如下几种主要的区别: 1. **代码库的选择** -Faster-RCNN”的经典实现在早期更多地使用 Caffe 框架完成,并由 Ross Girshick 提出并主导开发[^3]。 - 而“Faster-rcnn”,特别是带有额外修饰词(如 `tensorflow` 或其他后缀),往往指代的是后来移植到 TensorFlow 等更现代深度学习框架下的版本。这些版本可能会对原版做出一些调整以便更好地适配新平台的功能特性[^4]。 2. **配置方式** - 使用 Caffe 版本时,模型训练和测试所需的参数通常是硬编码于脚本内部或者通过简单的 JSON/YAML 文件指定;而在基于 TensorFlow 的实现里,则更加倾向于利用复杂的 protobuf 配置文件来定义整个流水线的行为模式[^5]。 3. **支持的数据集类型** - 初始发布的 Faster-RCNN 更加专注于 Pascal VOC 数据集这样的标准评测集合; - 后续改进型比如提到的小型化版本或其他定制化改造,则允许用户更容易扩展至自定义数据源之上,甚至提供了详细的教程指导如何准备相应的标注信息[^6]。 4. **性能表现** - 不同硬件环境下运行效率有所差别:部分重构成 GPU 加速友好的结构能够显著提升推理速度; - 另外还有关于内存占用方面的考量因素影响最终部署方案设计思路[^7]。 综上所述,虽然表面上看只是简单字母形式改变而已,但实际上背后隐藏了许多潜在的技术选型决策以及工程实践权衡取舍的结果。 ```python # 示例代码展示两个版本间可能存在的API调用风格对比 # Caffe风格 solver_param = { 'base_lr': 0.001, 'gamma': 0.1, 'stepsize': 50000, } net = caffe.Net(train_proto_path, caffe.TRAIN) # Tensorflow风格 config = tf.ConfigProto() session = tf.Session(config=config) model_fn = functools.partial(faster_rcnn_model_fn, num_classes=NUM_CLASSES) estimator = tf.estimator.Estimator(model_fn=model_fn, model_dir=MODEL_DIR) ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值