我试图在另一个基于pascal VOC格式的数据集上运行faster_rcnn。但这就是训练结果如下:
在下面的警告之后,损失值全部转到 nan :
proposal_layer_tf.py:150:RuntimeWarning:在greater_equal keep =中遇到无效值 np.where((ws> = min_size)&(hs> = min_size))[0]
def _filter_boxes(boxes, min_size):
"""Remove all boxes with any side smaller than min_size."""
ws = boxes[:, 2] - boxes[:, 0] + 1
hs = boxes[:, 3] - boxes[:, 1] + 1
keep = np.where((ws >= min_size) & (hs >= min_size))[0]
return keep
如你所见,总损失价值正在以一种奇怪的方式发生变化,在警告之后它变成了南方。我能做些什么来做对吗?
(gpu:Geforce 940m)
答案 0 :(得分:1)
问题可能是由您的注释引起的。在Faster-RCNN实现中,当他们将边界框加载到数据框中时,他们将坐标x1,y1,x2,y2
减去1
以使其基于0。就我而言,我创建了自己的xml注释,它们已经基于0。因此,如果我运行默认的Faster-RCNN实现,从1
减去0
将导致下溢错误。所以删除该减法修复了我的问题。
您可以删除pascal_voc.py
中的减法或编辑注释,使其以1为基础。如果您选择编辑pascal_voc.py
文件,请转到此处:
def _load_pascal_annotation(self, index):
# ...
# ...
# ...
# Load object bounding boxes into a data frame.
for ix, obj in enumerate(objs):
bbox = obj.find('bndbox')
# Make pixel indexes 0-based
x1 = float(bbox.find('xmin').text) #- 1 <- comment these out
y1 = float(bbox.find('ymin').text) #- 1
x2 = float(bbox.find('xmax').text) #- 1
y2 = float(bbox.find('ymax').text) #- 1
# ...
# ...
# ...