辅助功能IOU(交并比)_3.2

  • 实现两个目标框的交并比
  • 候选框在多目标跟踪中的表达方式及相应转换方法

IOU(Intersection over Union),"交并比",是计算机视觉和图像处理中常用的一个评价指标,尤其在目标检测任务中用来衡量模型预测的目标框与真实目标框的重合程度。

具体计算方法如下:

  1. 首先计算预测框(Prediction Box)和真实框(Ground Truth Box)的交集区域面积(Intersection Area)。

  2. 然后分别计算预测框和真实框各自的总面积(Union Area)。

  3. 最后,IOU的值就是交集区域面积除以并集区域面积:

    IOU = (Intersection Area) / (Union Area) = (预测框与真实框交集面积) / (预测框面积 + 真实框面积 - 预测框与真实框交集面积)

IOU的取值范围在0到1之间,IOU值越接近1,说明预测框与真实框的重合度越高,模型预测效果越好;反之,IOU值越小,则表示预测效果越差。在许多目标检测任务中,通常会设定一个阈值(如0.5),只有IOU大于该阈值的结果才会被视为有效预测。

也是目标检测中使用的一个概念是产生的候选框(candidate bound)与原标记框(ground truth bound)的交叠率,即它们的交集与并集的比值。最理想情况是完全重叠,即比值为1。在多目标跟踪中,用来判别跟踪框和目标检测框之间的相似度。

1.计算交并比

IoU是两个区域的交除以两个区域的并得出的结果

复制代码
def iou(bb_test, bb_gt):
    """
    在两个box间计算IOU
    :param bb_test: box1 = [x1y1x2y2]
    :param bb_gt: box2 = [x1y1x2y2]
    :return: 交并比IOU
    """
    xx1 = np.maximum(bb_test[0], bb_gt[0])
    yy1 = np.maximum(bb_test[1], bb_gt[1])
    xx2 = np.minimum(bb_test[2], bb_gt[2])
    yy2 = np.minimum(bb_test[3], bb_gt[3])
    w = np.maximum(0., xx2 - xx1)
    h = np.maximum(0., yy2 - yy1)
    wh = w * h
    o = wh / ((bb_test[2] - bb_test[0]) * (bb_test[3] - bb_test[1]) + (bb_gt[2] - bb_gt[0]) * (
            bb_gt[3] - bb_gt[1]) - wh)
    return o

2.候选框的表示形式

在该项目中候选框有两种表示形式:

  • x1,y1,x2,y2 表示左上角坐标和右下角坐标,目标检测的结果以该方式表示
  • x,y,s,r表示中心点坐标,s 是面积尺度,r是纵横比,卡尔曼滤波器中进行运动估计是使用该方式。

这两种方式要进行相互的转换。

  • 将候选框从坐标形式转换为中心点坐标和面积的形式

    def convert_bbox_to_z(bbox):
    """
    将[x1,y1,x2,y2]形式的检测框转为滤波器的状态表示形式[x,y,s,r]。其中x,y是框的中心坐标,s是面积,尺度,r是宽高比
    :param bbox: [x1,y1,x2,y2] 分别是左上角坐标和右下角坐标
    :return: [ x, y, s, r ] 4行1列,其中x,y是box中心位置的坐标,s是面积,r是纵横比w/h
    """
    w = bbox[2] - bbox[0]
    h = bbox[3] - bbox[1]
    x = bbox[0] + w / 2.
    y = bbox[1] + h / 2.
    s = w * h
    r = w / float(h)
    return np.array([x, y, s, r]).reshape((4, 1))

  • 将候选框从中心面积的形式转换为坐标的形式

    def convert_x_to_bbox(x, score=None):
    """
    将[cx,cy,s,r]的目标框表示转为[x_min,y_min,x_max,y_max]的形式
    :param x:[ x, y, s, r ],其中x,y是box中心位置的坐标,s是面积,r
    :param score: 置信度
    :return:[x1,y1,x2,y2],左上角坐标和右下角坐标
    """
    w = np.sqrt(x[2] * x[3])
    h = x[2] / w
    if score is None:
    return np.array([x[0] - w / 2., x[1] - h / 2., x[0] + w / 2., x[1] + h / 2.]).reshape((1, 4))
    else:
    return np.array([x[0] - w / 2., x[1] - h / 2., x[0] + w / 2., x[1] + h / 2., score]).reshape((1, 5))

相关推荐
贾伟康37 分钟前
【HarmonyOS 7新能力|028】Core Vision Kit工程封装:把接入逻辑放进可维护的分层结构
计算机视觉·harmonyos·arkts·端侧ai·harmonyos 7
Zentceh2 小时前
0.001Lux是什么概念
图像处理·人工智能·科技·计算机视觉·车载系统·无人机·智能硬件
这张生成的图像能检测吗3 小时前
(论文速读)SphereFormer:用径向窗口解决 LiDAR 远距离稀疏点的信息断连
计算机视觉·点云·3d技术·三维感知
YOLO数据集集合5 小时前
Anti-UAV 可见光与红外无人机检测数据集| 反无人机 可见光红外 多模态检测 小目标检测 Anti-UAV9076期
人工智能·目标检测·计算机视觉·目标跟踪·无人机识别·反无人机·灾害救援
工具派5 小时前
视频场景检测是怎么找到切镜头位置的?三种思路与实测
算法·计算机视觉·视频
AI棒棒牛6 小时前
YOLO26最新创新改进系列:融合 E3AD 认知注意力 Neck:具身认知增强的 FPN/PAN 特征选择机制,高效创新!
人工智能·yolo·计算机视觉·yolo26
hhzz7 小时前
OpenCV 入门到精通 09】特征检测与匹配:从 Harris 到 ORB 图像配准
人工智能·opencv·计算机视觉·开源·交互
matlab代码1 天前
基于matlab模板匹配的手写体数字识别【源码78期】
人工智能·计算机视觉
AiNightVision1 天前
AI-ISP微光全彩夜视技术深度解析:如何在0.001Lux下实现全彩成像
人工智能·计算机视觉·车载系统·自动驾驶·无人机·智能家居·智能硬件
JAI科研1 天前
YOLO 完全指南(七):YOLO识别工程化 (上)
人工智能·深度学习·神经网络·yolo·目标检测·计算机视觉·transformer