IoU(交并比)概念讲解

一、前言

"""

在进行基于yolov8的摔倒检测的时候发现,要是基于深度学习去检测摔倒的话有时候会将物体识别成摔倒,所以我加了一个yolov8自带的人体检测模型(yolov8n)。使用后发现人体检测加物体识别要是不加一个限定,还是无法准确检测摔倒,所以引用了IoU计算来验证跌倒检测

''''

二、定义与核心原理

IoU(Intersection over Union)是目标检测中用于衡量预测边界框与真实边界框重叠程度的指标,其定义为:

取值范围为[0,1],值越大表示两者重叠度越高。

三、计算步骤

1、确定边界框坐标

预测框(x_{1},y_{1},w_{1},h_{1})与真实框(x_{2},y_{2},w_{2},h_{2})
(假设为矩形框,(x,y)为中心点坐标,w,h为宽高)

2、计算交集区域

交集左上角坐标:(max(x_{1}-\frac{w_{1}}{2},x_{2}-\frac{w_{2}}{2}),max(y_{1}-\frac{h_{1}}{2},y_{2}-\frac{h_{2}}{2}))

交集右下角坐标:(min(x_{1}+\frac{w_{1}}{2},x_{2}+\frac{w_{2}}{2}),min(y_{1}+\frac{h_{1}}{2},y_{2}+\frac{h_{2}}{2}))

3、计算并集区域

并集面积 = 预测框面积 + 真实框面积 − 交集面积

4、求比值

四、代码实现示例 

def calculate_iou(boxA, boxB):
    # 输入格式: (x_center, y_center, width, height)
    # 转换为角点坐标
    boxA = [boxA[0]-boxA[2]/2, boxA[1]-boxA[3]/2, boxA[0]+boxA[2]/2, boxA[1]+boxA[3]/2]
    boxB = [boxB[0]-boxB[2]/2, boxB[1]-boxB[3]/2, boxB[0]+boxB[2]/2, boxB[1]+boxB[3]/2]

    # 计算交集区域
    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_area = max(0, xB - xA) * max(0, yB - yA)
    
    # 计算并集
    boxA_area = (boxA[2]-boxA[0])*(boxA[3]-boxA[1])
    boxB_area = (boxB[2]-boxB[0])*(boxB[3]-boxB[1])
    union_area = boxA_area + boxB_area - inter_area
    
    return inter_area / union_area if union_area !=0 else 0

五、应用场景 

场景说明特点
模型评估检测结果与标注数据的匹配度评价阈值通常设为0.5
损失函数IoU Loss及其变种(如GIoU、DIoU)直接优化定位精度
非极大值抑制(NMS)筛选最优检测框避免重复检测
旋转目标检测使用旋转框IoU计算(Rotated IoU)支持任意角度检测

六、特性分析

  • 边界敏感性:当边界框尺寸变化时,IoU值呈现非线性变化
  • 类别平衡:Focal IoU通过引入 αα 和 γγ 参数解决样本不平衡问题
  • 可微性:旋转框IoU实现了可微分计算,支持端到端训练

七、思维导图

这是第一次发博客,后面会不定期更新作者有关深度学习的计算机视觉笔记 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值