【目标检测】 IOU


前言

【个人学习笔记记录,如有错误,请指正!】

一、IOU

IOU 即 intersection over union,原来是一种评估两个集合之间的相似度的方法
给定两个集合 A 和 B,IOU可以表示为:
【目标检测】 IOU_第1张图片
上面说到 IOU 是评估两个集合之间相似度的一种方法。
在目标检测中,将目标框和预测框都当做像素点的集合,这样就可以使用 IOU 来评估两个框的相似度
这个示意图应该更好理解目标检测中的IOU:
【目标检测】 IOU_第2张图片

二、代码

这里给出的代码就是计算两个框之间 IOU 的代码

def box_iou(boxes1, boxes2):
    """计算两个锚框或边界框列表中成对的交并比 """
    # 求得给定框的面积
    box_area = lambda boxes: ((boxes[:, 2] - boxes[:, 0]) *
                              (boxes[:, 3] - boxes[:, 1]))
	# 求两个框分别的面积
    areas1 = box_area(boxes1)
    areas2 = box_area(boxes2)
    # 求出相交方块区域的左上和右下的坐标值
    inter_upperlefts = torch.max(boxes1[:, None, :2], boxes2[:, :2])
    inter_lowerrights = torch.min(boxes1[:, None, 2:], boxes2[:, 2:])
    # 求出相交区域的高宽
    inters = (inter_lowerrights - inter_upperlefts).clamp(min=0)
    # 求出相交区域的面积
    inter_areas = inters[:, :, 0] * inters[:, :, 1]
    # 求出并集
    union_areas = areas1[:, None] + areas2 - inter_areas
    return inter_areas / union_areas

总结

这里就是对 IOU 的简单的介绍,但是 IOU 也有很大的局限性。
虽然 IOU 可以评估两个框的相似度,也就是作为损失函数,但是 IOU 也存在一定的局限性。例如出现下面的情况, IOU 是无法准确评估实际的两个框框的情况:
【目标检测】 IOU_第3张图片
第一种:当两个框没有相交时,是无法判断两个框;
第二种:两个框的 IOU 是一样的,但是不能正确评估。

后面就提出了 GIOU、DIOU和 CIOU 这几种新的评估方法。

你可能感兴趣的:(目标检测,目标检测,计算机视觉,深度学习)