最近,用faster rcnn跑一些自己的数据,数据集为某遥感图像数据集——RSOD,标注格式跟pascal_voc差不多,但由于是学生团队标注,中间有一些标注错误,也为后面训练埋了很多坑。下面是用自己的数据集跑时遇到的一些问题,一定一定要注意:在确定程序完全调通前,务必把迭代次数设一个较小的值(比如100),节省调试时间。
错误目录:
1 ./tools/train_faster_rcnn_alt_opt.py is not found
2 assert (boxes[:, 2] >= boxes[:, 0]).all()
3 'module' object has no attribute 'text_format'
4 Typeerror:Slice indices must be integers or None or have __index__ method
5 TypeError: 'numpy.float64' object cannot be interpreted as an index
6 error=cudaSuccess(2 vs. 0) out of memory?
7 loss_bbox = nan,result: Mean AP=0.000
8 AttributeError: 'NoneType' object has no attribute 'astype'
错误1: 执行sudo ./train_faster_rcnn_alt_opt.sh 0 ZF pascal_voc,报错:./tools/train_faster_rcnn_alt_opt.py is not found
解决方法:执行sh文件位置错误,应退回到py-faster-rcnn目录下,执行sudo ./experiments/scripts/train_faster_rcnn_alt_opt.sh 0 ZF pascal_voc
错误2:在调用append_flipped_images函数时出现: assert (boxes[:, 2] >= boxes[:, 0]).all()
网上查资料说:出现这个问题主要是自己的数据集标注出错。由于我们使用自己的数据集,可能出现x坐标为0的情况,而pascal_voc数据标注都是从1开始计数的,所以faster rcnn代码里会转化成0-based形式,对Xmin,Xmax,Ymin,Ymax进行-1操作,从而会出现溢出,如果x=0,减1后溢出为65535。更有甚者,标记坐标为负数或者超出图像范围。主要解决方法有:
(1)修改lib/datasets/imdb.py,在boxes[:, 2] = widths[i] - oldx1 - 1后插入:
for b in range(len(boxes)):
if boxes[b][2]< boxes[b][0]:
boxes[b][0] = 0
这种方法其实头痛医头,且认为溢出只有可能是 boxes[b][0] ,但后面事实告诉我&#