Tensorflow FasterRCNN

最近在做 BDCI 的复杂气象条件的船只识别比赛,在 Tensorflow 上训练 Faster RCNN 的时候遇到了很奇怪的问题,折腾了一晚上终于解决了,具体表现为

loss 会在某次迭代的时候变为 Nan,Github 上有很多说什么调小学习率之类的,都没有解决我的问题,最后终于发现是代码和 xml 的问题。

首先代码中其在计算 xmin 等坐标的时候,都做了减一,那么当你的 xml 中有坐标是 0 的时候,就会减一变为 65536,那么就可能会出现下面这样的错误提示:

1
RuntimeWarning: invalid value encountered in greater_equalkeep = np.where((ws >= min_size) & (hs >= min_size))[0]

在解决的时候,要注意有两部分要修改,分别在

1
2
3
4
lib/datasets/imdb.py

boxes[:, 0] = widths[i] - oldx2 - 1 // remove '- 1'
boxes[:, 2] = widths[i] - oldx1 - 1 // same

1
2
3
4
5
lib/datasets/pascal_voc.py    //or your dataset py file
x1 = float(bbox.find('xmin').text) - 1 // remove all '- 1'
y1 = float(bbox.find('ymin').text) - 1
x2 = float(bbox.find('xmax').text) - 1
y2 = float(bbox.find('ymax').text) - 1

之后就可以正常训练了。其他的诸如改小学习率什么的,不适合我所遇到的情况,希望能帮到遇到这个问题的人。

有任何不对的地方,希望各位老师同学指正,谢谢!