但是可能会出现这样或者类似的warning:
RuntimeWarning: invalid value encountered in true_divide
RuntimeWarning: invalid value encountered in greater_equal
...
接着可能就会出现loss = nan的情况,且一直不见好转
通过一步步调试和网上搜集,发现可能的原因:
就是这篇博客给出的原因,具体讨论也可以参照rbg大佬github官方issue。
由于我们更换了数据集,所以在制作自己的数据集的annotation时候,可能会出现bbox的宽w和高h为0的情况,这样导致在代码中计算偏移的时候,
或者为负无穷大。这样求得的rpn_loc和gt_rpn_loc算rpn loss的时候会使得loss = nan
具体做法:尝试修改rpn网络中把anchor转location的地方添加一个限制,即限制
和不能太小参考代码:
BBOX_XFORM_CLIP = np.log(bbox_min / img_max) # bbox: 16 img_max: 1000 tw = np.maximum(tw, BBOX_XFORM_CLIP) th = np.maximum(th, BBOX_XFORM_CLIP)
其中bbox_min是预先设置的bbox的最小框宽高,img_max是在crop图片时候保留的最大宽高,也是bbox的最大框宽高。
当然,网上也有方法说降低学习率,比如讲1e-3改成1e-4
或者改RNG_SEED = 3到RNG_SEED = 4
参考:
【1】https://www.jianshu.com/p/1168fe20cc23