一句话: 看读入的坐标!试试把 -1
去掉。
本文完
接上篇。上回书说到,自己的代码,数据集从 VOC 换到了 COCO 上。一切都还蛮顺利的。直到运行的时候…… 仔细一看 Loss,RPN Regression Loss
__在第 3 个 iter__就变成了 Nan
。
这一点都不 Scitific!跟代码,查了一整天加已晚上,无果。
然后重写了数据转换脚本、样本选择脚本,无果。
简直开始怀疑人生。
在群里问了好久,有人说是加载的 Weights 不对,有人说是减小一下 Learning Rate (这个方法之前有效,但是 Learning Rate 直接减小到 1e-6 是不是很难学到东西了就?),还有人说调整一下几部分 Loss 的权重。
下午睡醒后想到,会不会是坐标的事情?去年这个时候遇到过一次。一些数据集的坐标是从 0 开始,一些是从 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
将后面的 -1
去掉。
原因是如果使用 0-based 的 annotation ,再减一就会出现 log(-1)
的情况,自然就nan了。
简直拨开乌云见太阳,翻身农奴把歌唱。
发表回复