智慧交通day02-车流量检测实现08:目标跟踪中的数据关联(将检测框bbox与卡尔曼滤波器的跟踪框进行关联匹配)

简介: 智慧交通day02-车流量检测实现08:目标跟踪中的数据关联(将检测框bbox与卡尔曼滤波器的跟踪框进行关联匹配)

20200508003307488.png


# 将YOLO模型的检测框和卡尔曼滤波的跟踪框进行匹配
def associate_detection_to_tracker(detections,trackers,iou_threshold=0.3):
    """
       将检测框bbox与卡尔曼滤波器的跟踪框进行关联匹配
       :param detections:检测框
       :param trackers:跟踪框,即跟踪目标
       :param iou_threshold:IOU阈值
       :return:跟踪成功目标的矩阵:matchs
               新增目标的矩阵:unmatched_detections
               跟踪失败即离开画面的目标矩阵:unmatched_trackers
    """
    #跟踪/检测为0时:直接构造返回结果
    if len(trackers) == 0 or (len(detections)==0):
        return np.empty((0,2),dtype=int),np.arange(len(detections)),np.empty((0,5),dtype=int)
    # 跟踪/检测不为0时:
    # iou 不支持数组计算,故IOU 逐个进行交并比计算,构造矩阵scipy.linear_assignment进行匹配
    iou_matrix = np.zeros((len(detections), len(trackers)), dtype=np.float32)
    # 遍历目标检测的bbox集合,每个检测框的标识为d
    for d,det in enumerate(detections):
        # 遍历跟踪框(卡尔曼滤波器预测)bbox集合,每个跟踪框标识为t
        for t,trk in enumerate(trackers):
            iou_matrix[d,t] = iou(det,trk)
    #通过匈牙利算法(linear_assignment)将跟踪框和检测框以[[d,t]...]的二维矩阵的形式存储在match_indices中
    result = linear_sum_assignment(-iou_matrix)
    #将匹配结果以 [[d,t]]的形式存储匹配结果
    matched_indices = np.array(list(zip(*result)))
    #记录未匹配的检测框及跟踪框
    #未匹配的检测框放入unmatched_detections中,表示有新的目标进入画面,要新增所要跟踪的目标序列
    unmatched_detecetions = []
    for d,det in enumerate(detections):
        if d not in matched_indices[:,0]:
            unmatched_detecetions.append(d)
    #未匹配的跟踪框放入unmatched_trackers中,表示目标离开之前的画面,应删除对应的跟踪器
    unmatched_tracker = []
    for t,trk in enumerate(trackers):
        if t not in matched_indices[:,1]:
            unmatched_tracker.append(t)
    #将匹配成功的跟踪框放入matches中进行存储
    matchs = []
    for m in matched_indices:
        # 过滤掉IOU低的匹配,将其放入到unmatched_detections和unmatched_trackers
        if iou_matrix[m[0],m[1]]<iou_threshold:
            unmatched_tracker.append([m[1]])
            unmatched_detecetions.append(m[0])
        else:
            matchs.append(m.reshape(1,2))
    #格式转换:初始化matchs,以np.array的形式返回
    if len(matchs) == 0 :
        matchs = np.array((0,2),dtype=int)
    else:
        matchs = np.concatenate(matchs, axis=0)
    return matchs,np.array(unmatched_detecetions,np.array(unmatched_detecetions))
目录
相关文章
|
6月前
|
传感器 算法 数据处理
yolo目标检测+目标跟踪+车辆计数+车辆分割+车道线变更检测+速度估计
yolo目标检测+目标跟踪+车辆计数+车辆分割+车道线变更检测+速度估计
|
3月前
|
数据采集 机器学习/深度学习 算法
5.2.3 检测头设计(计算预测框位置和类别)
这篇文章详细介绍了YOLOv3目标检测模型中的检测头设计,包括预测框是否包含物体的概率计算、预测物体的位置和形状、预测物体类别的概率,并展示了如何通过网络输出得到预测值,以及如何建立损失函数来训练模型。
基于颜色分割方法跟踪人员的面部和手部
使用基于颜色的分割方法跟踪人员的面部和手部。
79 0
|
6月前
|
机器学习/深度学习 传感器 算法
目标检测+车道线识别+追踪+测距(代码+部署运行)
目标检测+车道线识别+追踪+测距(代码+部署运行)
|
6月前
|
机器学习/深度学习 PyTorch 数据处理
零基础入门语义分割-地表建筑物识别 Task2 数据扩增-学习笔记
零基础入门语义分割-地表建筑物识别 Task2 数据扩增-学习笔记
88 1
|
6月前
|
机器学习/深度学习 监控 算法
ICCV2023 | 基于动作敏感性学习的时序动作定位
ICCV2023 | 基于动作敏感性学习的时序动作定位
284 0
|
机器学习/深度学习 传感器 安全
【目标定位】多站纯方位被动定位(ca模型)附Matlab代码
【目标定位】多站纯方位被动定位(ca模型)附Matlab代码
|
机器学习/深度学习 算法 智慧交通
智慧交通day04-特定目标车辆追踪02:Siamese网络+单样本学习
Siamese network就是“连体的神经网络”,神经网络的“连体”是通过共享权值来实现的,如下图所示。共享权值意味着两边的网络权重矩阵一模一样,甚至可以是同一个网络。
142 0
智慧交通day04-特定目标车辆追踪02:Siamese网络+单样本学习
|
机器学习/深度学习 传感器 自动驾驶
基于模型预测控制的车辆轨迹跟踪问题附MATLAB代码
基于模型预测控制的车辆轨迹跟踪问题附MATLAB代码
|
机器学习/深度学习 编解码 人工智能
GANet:基于关键点的全局关联车道线检测网络(CVPR2022)
车道检测是一项具有挑战性的任务,需要预测车道线的复杂拓扑形状并同时区分不同类型的车道。早期的工作遵循自上而下的路线图,将预定义的锚回归到各种形状的车道线,由于锚形状固定,缺乏足够的灵活性来适应复杂的车道形状。
GANet:基于关键点的全局关联车道线检测网络(CVPR2022)