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

出现了loss=nan说明模型发散,此时应该停止训练。
出现这种错误的情况可能有以下几种,根据你自己的情况来决定。

1、GPU的arch设置的不对

打开./lib/setup.py文件,找到第130行,将gpu的arch设置成与自己电脑相匹配的算力,这里举个例子,如果你用的是GTX1080,那么你的算力就是6.1,此时就需要将-arch=sm_52改成-arch=sm_61。
可以在这个网站里查看到自己gpu的算力
https://developer.nvidia.com/cuda-gpus

2、自己制作了VOC或者coco数据集格式

如果你自己制作了voc pascal或者coco数据集格式,那么你需要注意,看看是否有类似下面的报错

RuntimeWarning: invalid value encountered in log targets_dw = np.log(gt_widths / ex_widths)

这种报错说明数据集的数据有一些问题,多出现在没有控制好边界的情况,首先,打开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)的情况

如果这样之后还是出现类似的报错,那么说明依然有-1或者其他负数的情况出现。解决方法是打开./lib/model/config.py文件,找到flipp选项,将其置为False
__C.TRAIN.USE_FLIPPED = False

如果这样以后还是报类似的错误,就一定检查一下自己制作数据集的过程,看看是否哪里没有考虑清楚。

3、偏方:修改学习率

网上有人说可以通过修改学习率来解决,这个我没有验证,但是也可以作为一个备选方案把

你可能感兴趣的:(faster rcnn训练过程出现loss=nan的解决办法)