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

发布时间:2024年01月21日

源码: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的形状,检测框和跟踪框两两计算)

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

文章来源:https://blog.csdn.net/qq_43543940/article/details/135730384
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。