前言
【个人学习笔记记录,如有错误,请指正!】
一、IOU
IOU 即 intersection over union,原来是一种评估两个集合之间的相似度的方法。
给定两个集合 A 和 B,IOU可以表示为:
上面说到 IOU 是评估两个集合之间相似度的一种方法。
在目标检测中,将目标框和预测框都当做像素点的集合,这样就可以使用 IOU 来评估两个框的相似度。
这个示意图应该更好理解目标检测中的IOU:
二、代码
这里给出的代码就是计算两个框之间 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 是一样的,但是不能正确评估。
后面就提出了 GIOU、DIOU和 CIOU 这几种新的评估方法。