我试图在另一个基于pascal格式的数据集中运行faster_rcnn。但这就是训练的结果:

在警告之后,如下面所示,损失值都转到nan
proposal_layer_tf.py:150: RuntimeWarning:在greater_equal keep = np.where((ws >= min_size) & (hs >= min_size)中遇到的无效值)
这是proposal_layer_tf.py第146-151行:
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正如您所看到的,总损失值正在以一种奇怪的方式发生变化,在警告之后,它变成nan。我能做些什么才能补救呢?
(gpu: Geforce 940米)
发布于 2017-06-02 19:12:41
这个问题很可能是由您的注释引起的。在更快的RCNN实现中,当它们将边界框加载到数据帧中时,它们会通过x1,y1,x2,y2减去坐标1,使其基于0。在我的例子中,我创建了自己的xml注释,它们已经基于0。因此,如果我运行默认速度更快的ran实现,从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
# ...
# ...
# ...https://stackoverflow.com/questions/44313892
复制相似问题