目标检测-Iou(交并比)理解

本文详细介绍了IoU(交并比)在目标检测中的作用,包括其定义为交集与并集比率,以及如何通过代码计算两个边界框的IoU。重点讲解了如何确定正确检测的标准(通常设为0.5及以上),并提供了代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、 IOU概述

IOU的全称为交并比(Intersection over Union),是目标检测中使用的一个概念,IoU计算的是“预测的边框”和“真实的边框”的交叠率-,即它们的交集和并集的比值。最理想情况是完全重叠,即比值为1。

二、IOU计算

IoU等于“预测的边框”和“真实的边框”之间交集和并集的比值。IoU计算如下图,B1为真实边框,B2为预测边框。
在这里插入图片描述
在对象检测任务中,你希望能够同时定位对象,所以如果实际边界框是这样的,你的算法给出这个紫色的边界框,那么这个结果是好还是坏?

所以交并比(loU)函数做的是计算两个边界框交集和并集之比。两个边界框的并集是这个区域,就是属于包含两个边界框区域(绿色阴影表示区域),而交集就是这个比较小的区域(橙色阴影表示区域),那么交并比就是交集的大小,这个橙色阴影面积,然后除以绿色阴影的并集面积。
在这里插入图片描述
一般约定,在计算机检测任务中,如果loU≥0.5,就说检测正确,如果预测器和实际边界框完美重叠,loU就是1,因为交集就等于并集。但一般来说只要loU≥0.5,那么结果是可以接受的,看起来还可以。一般约定,0.5是阈值,用来判断预测的边界框是否正确。一般是这么约定,但如果你希望更严格一点,你可以将loU定得更高,比如说大于0.6或者更大的数字,但loU越高,边界框越精确。

所以这是衡量定位精确度的一种方式,你只需要统计算法正确检测和定位对象的次数,你就可以用这样的定义判断对象定位是否准确。再次,0.5是人为约定,没有特别深的理论依据,如果你想更严格一点,可以把阈值定为0.6。有时我看到更严格的标准,比如0.6甚至0.7,但很少见到有人将阈值降到0.5以下。

三、IOU代码实现

现在有两个框A和B,如下图。A=[ a x 1 a_x1 ax1, a y 1 a_y1 ay1, a x 2 a_x2 ax2, a y 2 a_y2 ay2],B=[ b x 1 b_x1 bx1, b y 1 b_y1 by1, b x 2 b_x2 bx2, b y 2 b_y2 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。

def iou(box1, box2):
    '''
    两个框(二维)的 iou 计算
    
    注意:边框以左上为原点
    
    box:[x1,y1,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)

03-20
### Intersection over Union (IoU) 的计算公式 Intersection over Union (IoU),即交并比,是一种用于衡量两个边界框之间重叠程度的指标。它通常被应用于目标检测任务中,用来评估预测边界框与真实边界框之间的相似性。 IoU 的计算方式如下: 给定一个 **预测边界框** \( B_{pred} \) 和一个 **真实边界框** \( B_{true} \),它们分别由矩形区域表示,则 IoU 定义为这两个矩形的交集面积除以它们的并集面积[^1]: \[ IoU(B_{pred}, B_{true}) = \frac{Area(\text{intersection of } B_{pred} \text{ and } B_{true})}{Area(\text{union of } B_{pred} \text{ and } B_{true})} \] 其中, - 交集部分是指两个边界框共同覆盖的区域; - 并集部分则是指两个边界框所覆盖的所有区域之和减去重复的部分。 当 IoU 值接近于 1 时,说明预测边界框与真实边界框高度重合;而当 IoU 接近于 0 时,则表明两者几乎没有重叠[^2]。 以下是 Python 实现 IoU 计算的一个简单例子: ```python def calculate_iou(boxA, boxB): # 获取边界框的坐标(x_min, y_min, x_max, y_max) xA = max(boxA[0], boxB[0]) yA = max(boxA[1], boxB[1]) xB = min(boxA[2], boxB[2]) yB = min(boxA[3], boxB[3]) # 计算交集的宽度和高度 inter_width = max(0, xB - xA + 1) inter_height = max(0, yB - yA + 1) # 计算交集面积 intersection_area = inter_width * inter_height # 计算每个边界框的面积 area_boxA = (boxA[2] - boxA[0] + 1) * (boxA[3] - boxA[1] + 1) area_boxB = (boxB[2] - boxB[0] + 1) * (boxB[3] - boxB[1] + 1) # 计算并集面积 union_area = float(area_boxA + area_boxB - intersection_area) # 返回 IoU 结果 iou = intersection_area / union_area if union_area != 0 else 0 return iou ``` 上述函数接受两个边界框 `boxA` 和 `boxB`,返回两者的 IoU 值。 --- ### 应用场景 IoU 被广泛应用于计算机视觉领域中的目标检测任务,特别是在以下几个方面: #### 1. 模型训练阶段 在监督学习的目标检测框架(如 YOLO、Faster R-CNN 等)中,IoU 是损失函数的一部分。通过最大化 IoU 或最小化其误差项,模型能够逐步调整权重以提高预测精度[^3]。 #### 2. 非极大值抑制(NMS) 在目标检测算法的结果后处理过程中,非极大值抑制技术利用 IoU 来筛选掉冗余的候选框。具体来说,对于同一物体的不同预测框,如果某些框与其他高置信度框具有较高的 IoU,则这些低优先级框会被移除。 #### 3. 性能评估 IoU 还可以用作评价标准之一,在测试数据上比较不同模型的表现优劣。例如 COCO 数据集采用平均精度均值(mAP@IoU_threshold)作为最终排名依据,这里的阈值通常是预设好的固定值(比如 0.5 或更高)。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tc.小浩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值