F-RCNN训练时反复出现索引越界异常该如何解决?
F-RCNN训练报错解决方案
报错1:index 1000 is out of bounds for axis 0 with size 1000
原因
Python数组索引从0开始计数,当你设置总训练轮次为1000时,合法的轮次索引范围是0~999。该报错由训练循环的终止条件逻辑错误导致,代码会尝试访问索引为1000的轮次,超出了长度为1000的数组边界。
修复方法
打开train_frcnn.py找到训练循环的逻辑,将终止条件从epoch <= 1000修改为epoch < 1000,或者调整轮次遍历的迭代器范围为0~999即可。
报错2:ROI池化层slice index X of dimension 1 out of bounds
原因
从堆栈信息可以定位到报错出现在RoiPoolingConv.py第65行的h = rois[0, roi_idx, 3]代码处,触发原因是传入ROI池化层的张量维度和预期不符,常见诱因有两个:
- 配置的
num_rois(单batch处理的感兴趣区域数量)和实际生成传入的ROI数量不匹配 - 数据集中存在异常标注框,比如坐标超出图像尺寸、标注框缺失坐标值,导致ROI张量的第二维度长度不足4(正常ROI格式为[x1,y1,x2,y2],需要至少4个值对应索引0~3)
修复方法
- 预处理数据集标注,过滤掉坐标超出对应图像宽高范围的异常框,确认所有标注框均为四坐标的标准格式
- 检查配置文件中的
num_rois参数,和训练代码中生成ROI的逻辑对齐,保证实际传入ROI池化层的ROI数量不超过配置的num_rois值 - 可临时在
RoiPoolingConv.py的call方法开头添加断言assert rois.shape[2] >=4,提前捕获ROI格式异常问题
内容的提问来源于stack exchange,提问作者Priyadutt bhatt
相关产品推荐
相关产品推荐

