【问题标题】:Calculating IOU for bounding box predictions为边界框预测计算 IOU
【发布时间】:2020-03-18 15:02:28
【问题描述】:

我有图像中给出的这两个边界框。框坐标如下:

框 1 = [0.23072851 0.44545859 0.56389928 0.67707491] 框 2 = [0.22677664 0.38237819 0.85152483 0.75449795]

坐标是这样的:ymin, xmin, ymax, xmax

我按如下方式计算 IOU:

def get_iou(box1, box2):
    """
    Implement the intersection over union (IoU) between box1 and box2
        
    Arguments:
        box1 -- first box, numpy array with coordinates (ymin, xmin, ymax, xmax)
        box2 -- second box, numpy array with coordinates (ymin, xmin, ymax, xmax)
    """
    # ymin, xmin, ymax, xmax = box
    
    y11, x11, y21, x21 = box1
    y12, x12, y22, x22 = box2
    
    yi1 = max(y11, y12)
    xi1 = max(x11, x12)
    yi2 = min(y21, y22)
    xi2 = min(x21, x22)
    inter_area = max(((xi2 - xi1) * (yi2 - yi1)), 0)
    # Calculate the Union area by using Formula: Union(A,B) = A + B - Inter(A,B)
    box1_area = (x21 - x11) * (y21 - y11)
    box2_area = (x22 - x12) * (y22 - y12)
    union_area = box1_area + box2_area - inter_area
    # compute the IoU
    iou = inter_area / union_area
    return iou

根据我的理解,这两个框完全重叠,所以 IOU 应该是 1。但是我得到的 IOU 0.33193138665968164 .是否有什么我做错了,或者我以不正确的方式解释它。这方面的任何建议都会有所帮助。

【问题讨论】:

    标签: object-detection


    【解决方案1】:

    您对 IoU 的解释不正确。

    如果注意您的示例,您会注意到两个边界框的区域的并集远大于区域的交集。因此,IoU(实际上是交集/联合)远小于 1 是有道理的。

    当你说

    根据我的理解,这两个框完全重叠,所以 IOU 应该是 1。

    这不是真的。在您的情况下,两个边界框仅在一个完全包含在另一个中的意义上重叠。但如果这种情况没有受到惩罚,IoU 总是可以最大化来预测一个与图像一样大的边界框——这显然没有意义。

    【讨论】:

    • 是的,这是有道理的,因为 IOU 比率会很小,好的,那么我怎样才能抑制较小的边界框或选择任何一个边界框
    • @Muss 也许你会对这篇关于 NMS 的文章感兴趣towardsdatascience.com/non-maximum-suppression-nms-93ce178e177c
    • 看来0.5的阈值,即使是NMS也无法抑制OP给出的例子。只有阈值为 0.3,我们才能抑制不需要的框。
    猜你喜欢
    • 2020-01-06
    • 2020-09-06
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 2023-02-03
    • 2019-09-05
    相关资源
    最近更新 更多