在用Faster Rcnn跑自己的数据,在训练过程中loss
的值是Nan
,之后训练过程就报出标题上的错误。
原因是:faster rcnn原本运行的数据是pascal,这些是图片的起始像素坐标是1,所以在文件lib/datasets/pascal_voc.py
中的_load_pascal_annotation(self, index)
函数中解析xml
文件时,bndbox
的四个坐标值都会减1
,代码如下所示:
x1 = float(bbox.find('xmin').text) - 1
y1 = float(bbox.find('ymin').text) - 1
x2 = float(bbox.find('xmax').text) - 1
y2 = float(bbox.find('ymax').text) - 1
我的图片像素的起始坐标是0,所以得删除后面的减1
。
删除减一后若直接运行,程序还会报错的。原因是:程序运行时,脚本/lib/model/train_val.py
中的get_training_roidb(imdb):
函数会先将图片做一个镜像(数据增强,大家都懂的),代码如下:
if cfg.TRAIN.USE_FLIPPED:
print('Appending horizontally-flipped training examples...')
imdb.append_flipped_images()
print('done')
这一镜像又得计算坐标(镜像操作过程的代码我没有看),从而报错。解决办法有两个:
1.推一下镜像过程的代码,修改。
2.屏蔽掉镜像过程的代码。
因为我已经给图片做过镜像了,所以就屏蔽了这块的代码,再进行训练,正常~