目标检测--目标边界框IoU的计算

在目标检测中, Intersection over Union (IOU) 是一个常用的度量,用于评估预测边界框(bounding box)与真实边界框(ground truth)之间的重叠程度。IOU 值范围从 0 到 1,其中 1 表示完美的重叠,0 表示没有重叠。

边界框(Bounding Box)

边界框通常由四个坐标定义:

  • x_min: 边界框左上角的 x 坐标。
  • y_min: 边界框左上角的 y 坐标。
  • x_max: 边界框右下角的 x 坐标。
  • y_max: 边界框右下角的 y 坐标。

计算步骤

1.第一种情况:两个框之间存在部分重叠
2.第二种情况:两个框之间不存在任何重叠
3.第三种情况:一个框在另外一个框内部

  1. 确定交集(Intersection):

    • 交集是两个边界框共同覆盖的区域。计算交集的坐标为:
      • 交集的左上角 x 坐标:max(x_min1, x_min2)
      • 交集的左上角 y 坐标:max(y_min1, y_min2)
      • 交集的右下角 x 坐标:min(x_max1, x_max2)
      • 交集的右下角 y 坐标:min(y_max1, y_max2)
  2. 计算交集面积:

    • 如果交集的宽度和高度都是非负的(即两个框至少有一部分重叠),则交集面积计算为: Areaintersection=max⁡(0,min(xmax1,xmax2)−max(xmin1,xmin2))×max⁡(0,min(ymax1,ymax2)−max(ymin1,ymin2))Areaintersection​=max(0,min(xmax1​,xmax2​)−max(xmin1​,xmin2​))×max(0,min(ymax1​,ymax2​)−max(ymin1​,ymin2​))
  3. 确定并集(Union):

    • 并集是两个边界框覆盖的区域,包括它们重叠的部分。计算并集的坐标为:
      • 并集的左上角 x 坐标:min(x_min1, x_min2)
      • 并集的左上角 y 坐标:min(y_min1, y_min2)
      • 并集的右下角 x 坐标:max(x_max1, x_max2)
      • 并集的右下角 y 坐标:max(y_max1, y_max2)
  4. 计算并集面积:

    • 并集面积计算为: Areaunion=(max(xmax1,xmax2)−min(xmin1,xmin2))×(max(ymax1,ymax2)−min(ymin1,ymin2)Areaunion​=(max(xmax1​,xmax2​)−min(xmin1​,xmin2​))×(max(ymax1​,ymax2​)−min(ymin1​,ymin2​)
  5. 计算 IOU:

    • 最后,IOU 值计算为交集面积与并集面积的比值: IOU=AreaintersectionAreaunionIOU=Areaunion​Areaintersection​​

应用

IOU 常用于目标检测模型的训练过程中,用于评估预测的边界框与真实边界框之间的相似度。它也是非极大值抑制(Non-Maximum Suppression, NMS)算法中的一个关键组成部分,用于过滤重叠的预测结果。

代码:

def cal_iou_xyxy(box1,box2):
    x1min, y1min, x1max, y1max = box1[0], box1[1], box1[2], box1[3]
    x2min, y2min, x2max, y2max = box2[0], box2[1], box2[2], box2[3]
    #计算两个框的面积
    s1 = (y1max - y1min + 1.) * (x1max - x1min + 1.)
    s2 = (y2max - y2min + 1.) * (x2max - x2min + 1.)

    #计算相交部分的坐标
    xmin = max(x1min,x2min)
    ymin = max(y1min,y2min)
    xmax = min(x1max,x2max)
    ymax = min(y1max,y2max)

    inter_h = max(ymax - ymin + 1, 0)
    inter_w = max(xmax - xmin + 1, 0)

    intersection = inter_h * inter_w
    union = s1 + s2 - intersection

    #计算iou
    iou = intersection / union
    return iou

box1 = [100,100,200,200]
box2 = [120,120,220,220]
iou = cal_iou_xyxy(box1,box2)
print(iou)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值