训练faster rcnn出现AssertionError的解决办法

本文针对使用caffe训练fasterrcnn时遇到的断言错误进行了解决方案的分享,通过修改imdb.py、pascal_voc.py文件中的部分代码以及调整配置文件config.py来解决图像翻转带来的问题。

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

在使用caffe训练faster rcnn的时候,报了一个断言错误:

File “/py-faster-rcnn/tools/../lib/datasets/imdb.py”, line 108, in append_flipped_images 
assert (boxes[:, 2] >= boxes[:, 0]).all() 
AssertionError
问题解决:
1、修改lib/datasets/imdb.py,append_flipped_images()函数,在一行代码为 boxes[:, 2] = widths[i] - oldx1 - 1下加入代码:
 
for b in range(len(boxes)):
  if boxes[b][2]< boxes[b][0]:
    boxes[b][0] = 0


2、修改lib/datasets/pascal_voc.py,_load_pascal_annotation()函数

 

	将对Xmin,Ymin,Xmax,Ymax减一去掉
将对Xmin,Ymin,Xmax,Ymax减一去掉

 

3、(可选,如果1和2可以解决问题,就没必要用3)修改lib/fast_rcnn/config.py,不使图片实现翻转,如下改为
# Use horizontally-flipped images during training?
__C.TRAIN.USE_FLIPPED = False

 

问题解决!

 

参照博客:点击打开链接

 

### mmdetection 训练 Faster R-CNN Loss NaN 解决方案 当遇到 `loss=nan` 问题时,这通常意味着模型训练过程中出现了数值不稳定的情况。针对这一现象,在使用 mmdetection 框架训练 Faster R-CNN 时可采取如下措施: #### 数据预处理与验证 确保输入到网络中的数据是有效的非常重要。异常的数据可能导致损失函数计算失败而返回 `NaN` 值。 - **检查标注文件**:确认所有边界框的坐标都是正数,并且没有零宽度或高度的对象实例存在[^3]。 - **清理不合规样本**:移除那些尺寸过小(如宽度或高度小于等于1像素)的目标框,因为这些极小对象在经过某些图像变换操作后容易造成数值溢出或下溢。 ```python def filter_small_boxes(annotations, min_size=1): filtered_anns = [] for ann in annotations: w, h = ann['bbox'][2:] - ann['bbox'][:2] if w >= min_size and h >= min_size: filtered_anns.append(ann) return filtered_anns ``` #### 调整超参数配置 合理的超参数设定有助于提高模型收敛性和稳定性。 - **调整学习率**:过高或不合适的学习率可能是导致梯度爆炸的原因之一。尝试逐步减小初始学习率直到找到能够使训练平稳进行的最佳值[^4]。 - **优化器选择**:如果默认使用的SGD无法解决问题,则考虑切换至Adam或其他自适应型优化算法,它们往往能更好地控制更新步长从而减少发散风险[^2]。 ```yaml optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) optimizer = dict(type='SGD', lr=0.0025, momentum=0.9, weight_decay=0.0001) ``` #### 修改代码逻辑 有时框架内部实现细节也会影响最终结果。 - 对于两阶段检测器而言,确保仅在一个位置设置了适当的学习率衰减速率;而对于单阶段模型则需同时调整多个相关联的地方以保持一致性。 - 如果怀疑GPU架构设置不当引起的问题,可以通过指定合适的CUDA版本及相关环境变量来进行排查。 通过上述方法可以有效地应对mmdetection训练Faster R-CNN期间发生的Loss变为NaN的现象。值得注意的是,具体实施效果取决于实际应用场景和个人实验条件的不同组合方式。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值