SORT源码系列-iou_batch()计算检测框和跟踪框的IoU

源码:SORT源码

背景

在SORT流程中,需要对各个检测框和跟踪框对计算IoU,进而得到cost matrix,以此cost matrix作为匈牙利算法的输入,得到检测框和跟踪框之间的相应匹配。

源码

def iou_batch(bb_test, bb_gt):
    # From SORT: Computes IOU between two bboxes in the form [x1,y1,x2,y2]
    # 增加维度,通常是为了确保输入具有正确的维度,以便进行广播操作
    bb_gt = np.expand_dims(bb_gt, 0)
    bb_test = np.expand_dims(bb_test, 1)

    #这种切片语法允许函数更加通用和灵活,能够处理不同形状和维度的输入数组,而不仅仅是固定形状的二维数组。
    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)

bb_test和bb_gt分别是检测框和追踪框,假设分别有D个和T个框,那么形状分别是(D,4)和(T,4)。
np.expand_dims增加维度后形状分别是(1,D,4)和(T,1,4)。
按照IoU计算步骤,得到交集框的左上角和右下角坐标,代码中的具体运算用到了广播机制切片运算符,易得到四个坐标的形状均是(T,D)。(刚好是我们想要的cost matrix的形状,检测框和跟踪框两两计算)

后续步骤类似,省略,可结合上述三篇文章的链接理解。

  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值