目标检测 基本概念 IOU(交并比)

1. 定义

        对于生成的锚框,我们应当采取一种量化手段来评价当前锚框对于真实边界框匹配度,等价于衡量锚框与真实边界框之间的相似性。因此,引入了交并比的概念。(即通过像素集的杰卡德系数来测量锚框和真实边框的相似性)。交并比的取值范围为[0, 1] , 0表示完全不重合, 1表示完全重合。

图示:

2. 实现思路

  1. 计算锚框与真实框各自的面积;
  2. 计算锚框与真实框相交部分左上角点和右下角点的位置坐标;
  3. 计算每一个锚框与每一个真实框的交集和并集面积;
  4. 将得到的交集面积与并集面积相除从而得到 IOU 值矩阵;

3. 实现代码

def box_iou(anchor_boxes, gt_boxes):

    """
    :param anchor_boxes: anchor_boxes 坐标列表, 形状为 [anchor_boxes number, 4] -> [m, 4]
    :param gt_boxes: gt_boxes 坐标列表, 形状为 [gt_boxes number, 4] -> [n, 4]
    :return: anchor_boxes 和 gt_boxes 一一对应的 IOU 矩阵, 形状为 [anchor_boxes number, gt_boxes number]
    """
    # 矩形框面积的计算函数
    box_area = lambda boxes: (boxes[:, 2] - boxes[:, 0]) * (boxes[:, 3] - boxes[:, 1])

    # 求解 anchor_boxes 和 gt_boxes 的面积
    # anchor_boxes_area 形状为 [m, ]
    # gt_boxes_area 形状为 [n, ]
    anchor_boxes_area = box_area(anchor_boxes)
    gt_boxes_area = box_area(gt_boxes)

    # 求解 anchor_boxes 和 gt_boxes 交集左上角点和右下角点的坐标
    # 利用广播机制一次性完成 每一个 anchor 与 每一个 gt_box 交集坐标的求解
    # anchor_boxes[:, None, :2] -> [m, 1, 2]; gt_boxes[:, :2] -> [n, 2] 广播机制下分别都被填充为 -> [m, n, 2], 然后求对应位置元素最大或最小值
    # inter_upperlefts -> [m, n, 2]; inter_lowerrights -> [m, n, 2]
    inter_upperlefts = torch.max(anchor_boxes[:, None, :2], gt_boxes[:, :2])
    inter_lowerrights = torch.min(anchor_boxes[:, None, 2:], gt_boxes[:, 2:])

    # 计算交集、并集面积
    # inters -> [m, n, 2] , 其中 ‘2’ 是交集的w和h
    # inters_area -> [m, n, 1]
    inters = (inter_lowerrights - inter_upperlefts).clamp(min=0)
    inters_area = inters[:, :, 0] * inters[:, :, 1]
    # 利用广播机制一次性完成 每一个 anchor 与 每一个 gt_box 并集面积的求解
    # union_area -> [m, n, 1]
    union_area = anchor_boxes_area[:, None] + gt_boxes_area - inters_area

    return inters_area / union_area

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值