文章目录[隐藏]
1. IOU概述
IoU的全称为交并比(Intersection over Union),是目标检测中使用的一个概念,IoU计算的是“预测的边框”和“真实的边框”的交叠率-,即它们的交集和并集的比值。最理想情况是完全重叠,即比值为1。
2. IoU计算
IoU等于“预测的边框”和“真实的边框”之间交集和并集的比值。IoU计算如下图,B1为真实边框,B2为预测边框。
3. IoU代码实现
现在有两个框A和B,如下图。A=[ax1,ay1,ax2,ay2],B=[bx1,by1,bx2,by2]。接下来想统计A和B的交集面积,A自己的面积和B自己的面积。三个待求值里面最关键的就是怎么求交集面积(图中红色框)。
假设A和B是相交的,存在交集。这个时候怎么求交集框(红色框)的左上角坐标和右下角坐标呢?我们发现,当A和B有交集的时候,交集框(红色框)的左上角坐标是max(A的左上角坐标,B的左上角坐标),右下角是min(A的右下角坐标,B的右下角坐标)。那么:
那么当A和B没有交集的时候,h和w的值小于0,如果没有交集,被减数一定小于减数。所以为了鲁棒性,我们最终的inter是这样计算的:
这样当A和B没有交集,inter的值就是0.分子为0,则IoU为0。
● Python代码:
def iou(box1, box2):
'''
两个框(二维)的 iou 计算
注意:边框以左上为原点
box:[x1,y2,x2,y2],依次为左上右下坐标
'''
h = max(0, min(box1[2], box2[2]) - max(box1[0], box2[0]))
w = max(0, min(box1[3], box2[3]) - max(box1[1], box2[1]))
area_box1 = ((box1[2] - box1[0]) * (box1[3] - box1[1]))
area_box2 = ((box2[2] - box2[0]) * (box2[3] - box2[1]))
inter = w * h
union = area_box1 + area_box2 - inter
iou = inter / union
return iou
box1 = [0,0,2,2]
box2 = [1,1,3,3]
IoU = iou(box1,box2)
print(IoU)
输出:
版权声明:本文为CSDN博主「姚路遥遥」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Roaddd/article/details/114023447
暂无评论