IoU 交并比
一、IoU(Intersection Over Union,交并比)
intersection 交集
over 在……之上
union 并集
在目标检测领域中,IoU用来衡量检测框的交叠程度,既,预测的框和真实的框的交叠率。
理想情况为
如果
0.5这个值可以根据个人需要进行调节,一般设置在0.5到1之间,值越大表示越精确。
二、IoU的计算
参考坐标系
检测框
计算目标
已知BOX1 的顶点(x1,y1)(x2,y2)和BOX2 的顶点(x3,y3)(x4,y4)
- BOX1 和BOX2 的交集部分,既阴影部分
- BOX1 和BOX2 的并集部分,既BOX1面积 + BOX2面积 - 阴影部分
容易求解部分:BOX1面积和BOX2面积
根据BOX顶点,求得长和宽,相乘即得面积。
困难求解部分:阴影部分
根据参考坐标系可知,X轴的正方向为右,Y轴的正方向为下。
-
-
- 阴影部分左上角顶点:
-
-
-
- 阴影部分右下角顶点:
-
-
-
- 根据阴影部分的左上角顶点和右下角顶点,可得阴影部分的高和宽:
-
高:
宽:
-
-
- 得到阴影部分的面积为:
-
关键:
当BOX1 和BOX2 不重叠时,根据坐标轴方向,抽象表达4个顶点的关系:
当BOX1 和BOX2 重叠时,同理抽象表达4个顶点的关系:
发现,当不重叠时,
当重叠时,
-
-
- 根据关键进行调整,阴影部分的高和宽为:
-
高:
宽:
代码参考
def iou(box1, box2): ''' 两个框(二维)的 iou 计算,边框以左上为原点。 box1:[x1,y1,x2,y2],依次为左上顶点和右下顶点坐标 box2:[x3,y3,x4,y4] ''' h = max(0, min(box1[3], box2[3]) - max(box1[1], box2[1])) w = max(0, min(box1[2], box2[2]) - max(box1[0], box2[0])) 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
三、IoU作为损失函数
如图,三种情况下的IoU 值相同,但我们更倾向于第一种情况。IoU 作为损失函数时,不一定得到第一种情况。
IoU 不存在学习训练,只是单纯地计算重叠率。
待拓展 GIoU、DIoU、CIoU、YOLO。
本文作者:paramotor
本文链接:https://www.cnblogs.com/paramotor/p/17844435.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步