faster rcnn训练过程出现loss=nan解决办法

来源:互联网 发布:java uml建模工具 编辑:程序博客网 时间:2024/05/19 00:51

在我训练faster rcnn的过程中,使用VOC2007数据集end2end训练方法,并没有出现loss=nan的问题,出现了loss=nan说明模型发散,此时应该停止训练,不然得到的模型也不能检测出物体。

在我自己训练自己的数据(Kitti数据集转成voc数据集)的时候,出现一个RuntimeWarning: invalid value encountered in log targets_dw = np.log(gt_widths / ex_widths),然后就会出现loss=nan这种情况,网上很多说出现loss=nan改学习率就行,但是在这种自己做的数据集且出现这个警告的情况下,改学习率是没用的,正确的做法是打开lib/database/pascal_voc.py文件,找到208行,将208行至211行每一行后面的-1删除,如下所示:

x1 = float(bbox.find('xmin').text) 
y1 = float(bbox.find('ymin').text) 
x2 = float(bbox.find('xmax').text) 
y2 = float(bbox.find('ymax').text) 

原因是因为我们制作的xml文件中有些框的坐标是从左上角开始的,也就是(0,0)如果再减一就会出现log(-1)的情况。

改完之后就不会出现RuntimeWarning: invalid value encountered in log targets_dw = np.log(gt_widths / ex_widths)这个问题了,loss也不会出现等于nan了,如果还出现loss=nan,可以再试试调小学习率以及各个损失项的占比重。

亲测有效。。

原创粉丝点击