Tensorflow训练错误

时间:2017-06-01 17:38:20

标签: python machine-learning tensorflow

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

warning and NAN losses

在下面的警告之后,损失值全部转到 nan

  

proposal_layer_tf.py:150:RuntimeWarning:在greater_equal keep =中遇到无效值   np.where((ws> = min_size)&(hs> = min_size))[0]

这是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

如你所见,总损失价值正在以一种奇怪的方式发生变化,在警告之后它变成了南方。我能做些什么来做对吗?

(gpu:Geforce 940m)

1 个答案:

答案 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

    # ...
    # ...
    # ...