赞
踩
交并比(Intersection-over-Union,IoU),目标检测中使用的一个概念,是产生的候选框(candidate bound)与原标记框(ground truth bound)的交叠率,即它们的交集与并集的比值。
计算公式:
输入假设:bbox = [xt, yt, xb, yb], 左上角为(xt, yt),右下角为(xb, yb)
代码如下,重点关注交集的计算思路:分别计算横轴和纵轴的交集长度。
- def cal_iou(bbox1, bbox2):
- xt1, yt1, xb1, yb1 = bbox1
- xt2, yt2, xb2, yb2 = bbox2
-
- # 计算每个矩形面积
- area1 = (xb1 - xt1) * (yb1 - yb1)
- area2 = (xb2 - xt2) * (yb2 - yb1)
-
- # 计算两个矩形的相较面积
- xl = max(xt1, xt2)
- xr = min(xb1, xb2)
- yt = max(yt1. yt2)
- yb = min(yb1, yb2)
- h = max(0, yb - yt)
- w = max(0, xr - xl)
- area = h * w
-
- # 计算iou
- iou = area / (area1 + area2 - area)
-
- return iou
当然真实使用应该考虑使用下面的版本,因为像素是离散的,像素2到5其实是4个像素,并不是5-2=3个像素,所以需要加1。
- def cal_iou(bbox1, bbox2):
- xt1, yt1, xb1, yb1 = bbox1
- xt2, yt2, xb2, yb2 = bbox2
-
- # 计算每个矩形面积
- area1 = (xb1 - xt1 + 1) * (yb1 - yb1 + 1)
- area2 = (xb2 - xt2 + 1) * (yb2 - yb1 + 1)
-
- # 计算两个矩形的相较面积
- xl = max(xt1, xt2)
- xr = min(xb1, xb2)
- yt = max(yt1. yt2)
- yb = min(yb1, yb2)
- h = max(0, yb - yt)
- w = max(0, xr - xl)
- area = (h + 1) * (w + 1)
-
- # 计算iou
- iou = area / (area1 + area2 - area)
-
- return iou
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。