【论文解读】Hybrid-SORT: Weak Cues Matter for Online Multi-Object Tracking

因为Hybrid-SORT的baseline是基于OCSORT进行改进的,在这之前建议先了解byteTrack和【】的相关知识

1.介绍

1.1 基本框架

多目标跟踪(MOT)将问题分为两个子任务。第一个任务是检测每个帧中的对象。第二个任务是将它们在不同的框架中联系起来。关联任务主要通过显式或隐式地利用强线索来解决,包括空间和外观信息。

1.2 当前方法的局限性

当两个物体在当前帧中高度重叠时,检测和估计轨迹位置之间的交集(IoU)会变得模糊,两个物体的外观特征都被前景特征所主导。

​

2. Hybrid-SORT

修改了当前最先进的SORT-like算法OCSORT作为我们的强基线。首先,对OC-SORT中的速度方向建模进行修正,即以观测为中心的动量(OCM),将盒中心扩展到四个盒角,将固定的时间间隔扩展到多个时间间隔;其次,我们在ByteTrack之后加入了一个额外的低置信度检测关联阶段。

2.1 弱条件建模

2.1.1 Tracklet 置信度建模

增加了两个额外的状态:轨迹置信度c及其速度分量

​

如下图所示,Kalman Filter在试图估计置信状态的突然变化时表现出明显的滞后,且置信度状态的变化趋势呈现出明显方向性​

基于以上特点,因此本文使用基于轨迹历史的简单线性预测来估计轨迹置信度。

​

置信度代价计算为根据式4估计的轨迹置信度与检测置信度之间的绝对差值

2.1.2 Height Modulated IoU(HMIOU)

​

引入height状态有助于提高association :

(1)物体的高度在一定程度上反映了深度信息,使得高度状态成为区分高度重叠对象的有效线索。

(2)其次,高度状态对不同姿态具有较强的鲁棒性,是一种准确估计的状态,是物体的高质量表征。

公式化表述为:

​

HIoU代表高度状态,这是一个弱线索,而IoU代表空间信息,这是一个强线索,我们使用HIoU来调制IoU,实现对遮挡或聚类对象的增强识别

​

2.2 Hybrid-SORT

2.2.1 Robust OCM

2.2.1.1 原始OCM存在的局限性

原始OCM的建模容易受到固定时间间隔和稀疏状态(即只有目标中心)引起的噪声的影响。

2.2.1.2 Robust OCM

  • 首先,将3帧的固定时间间隔扩展为1 ~ 3的多个时间间隔的叠加;
  • 其次,我们用物体的四个角代替它的中心点来计算速度方向。

​

避免由于姿态的突然变化,轨迹和轨迹到检测中心的速度方向可能完全相反,从而导致匹配错误

​

2.2.2 外观建模

首先检测对象,然后将结果裁剪的补丁提供给ReID模型。我们使用指数移动平均(EMA)对轨迹图外观信息建模,并利用余弦距离作为度量来计算轨迹图外观特征与检测外观特征之间的相似度。

2.2.3 算法架构

关联阶段主要包括三个阶段:第一阶段是高置信度对象的关联阶段,第二阶段是低置信度对象的关联阶段(ByteTrack中的BYTE),第三阶段是用最后一次检测恢复丢失的轨迹(OC-SORT中的OCR)。

​

3.代码

3.1 卡尔曼滤波器KalmanBoxTracker建模

3.1.1 引入轨迹置信度c及其速度分量·

​

python 复制代码
        if not orig:
          from .kalmanfilter_score_new import KalmanFilterNew_score_new as KalmanFilter_score_new
          self.kf = KalmanFilter_score_new(dim_x=9, dim_z=5)

3.1.2 轨迹置信度的预测

简单线性预测来估计轨迹置信度

python 复制代码
        if not self.confidence_pre:
            return self.history[-1], np.clip(self.kf.x[3], self.args.track_thresh, 1.0),
                    np.clip(self.confidence, 0.1, self.args.track_thresh)
        else:
            return self.history[-1], np.clip(self.kf.x[3], self.args.track_thresh, 1.0), 
                   np.clip(self.confidence - (self.confidence_pre - self.confidence), 0.1, self.args.track_thresh)

返回值分别是 分别是九位预测量,置信度预测值,置信度的速度分量·

3.2 Robust OCM

3.2.1 四个角代替它的中心点

​

lt, rt, lb, rb : 代表bbox四个角点的速度

python 复制代码
    Y1, X1 = speed_direction_batch_lt(detections, previous_obs)
    Y2, X2 = speed_direction_batch_rt(detections, previous_obs)
    Y3, X3 = speed_direction_batch_lb(detections, previous_obs)
    Y4, X4 = speed_direction_batch_rb(detections, previous_obs)
    cost_lt = cost_vel(Y1, X1, trackers, lt, detections, previous_obs, vdc_weight)
    cost_rt = cost_vel(Y2, X2, trackers, rt, detections, previous_obs, vdc_weight)
    cost_lb = cost_vel(Y3, X3, trackers, lb, detections, previous_obs, vdc_weight)
    cost_rb = cost_vel(Y4, X4, trackers, rb, detections, previous_obs, vdc_weight)

    angle_diff_cost = cost_lt + cost_rt + cost_lb + cost_rb

speed_direction_batch_XX用来计算四个角点的速度

cost_vel 用来计算某个交点速度的cost

3.3 Height Modulated IoU(HMIOU)

​

python 复制代码
def hmiou(bboxes1, bboxes2):
    """
    Height_Modulated_IoU
    """
    bboxes2 = np.expand_dims(bboxes2, 0)
    bboxes1 = np.expand_dims(bboxes1, 1)

    yy11 = np.maximum(bboxes1[..., 1], bboxes2[..., 1])
    yy12 = np.minimum(bboxes1[..., 3], bboxes2[..., 3])

    yy21 = np.minimum(bboxes1[..., 1], bboxes2[..., 1])
    yy22 = np.maximum(bboxes1[..., 3], bboxes2[..., 3])
    o = (yy12 - yy11) / (yy22 - yy21)

    xx1 = np.maximum(bboxes1[..., 0], bboxes2[..., 0])
    yy1 = np.maximum(bboxes1[..., 1], bboxes2[..., 1])
    xx2 = np.minimum(bboxes1[..., 2], bboxes2[..., 2])
    yy2 = np.minimum(bboxes1[..., 3], bboxes2[..., 3])
    w = np.maximum(0., xx2 - xx1)
    h = np.maximum(0., yy2 - yy1)
    wh = w * h
    o *= wh / ((bboxes1[..., 2] - bboxes1[..., 0]) * (bboxes1[..., 3] - bboxes1[..., 1])
        + (bboxes2[..., 2] - bboxes2[..., 0]) * (bboxes2[..., 3] - bboxes2[..., 1]) - wh)
    return (o)
相关推荐
龙亘川3 分钟前
数智赋能物业不动产治理:亘川智城智慧物业系统实践解析
大数据·人工智能·智慧城市·开源软件·数据可视化
明月_清风6 分钟前
AI Agent 进入系统层:现在有哪些开源项目在解决这个问题?
人工智能·后端
成为深度学习高手10 分钟前
SEMixer:以随机注意力增强patch语义、渐进混合多尺度的轻量长期时序预测模型
人工智能·深度学习·机器学习·数据挖掘·时间序列
弯_弯19 分钟前
企业 AI 服务商评估:以「是否先做诊断」为第一筛选门
人工智能
All for pursuit.27 分钟前
【回溯-7】494.目标和
数据结构·c++·算法·leetcode
白杨尚青28 分钟前
C++入门篇(十三):vector(上)——动态数组:构造、空间增长与迭代器失效
开发语言·c++·笔记·算法·stl
Jasmine_llq29 分钟前
《P17461 [GESP202609 八级] 生成树计数》
算法·栈·tarjan 算法·边双连通分量·深度优先搜索 dfs·tarjan 保存当前路径节点·模乘法
归秋14230 分钟前
流行音乐编曲软件怎么选:流行音乐创作的实用工具清单
人工智能
Jasmine_llq31 分钟前
《P17462 [GESP202609 八级] 末班车》
算法·dijkstra 算法·最大化版本,求最长可行值·建反向图(逆图 / 反转边)·多源 dijkstra 思想·对每个终点单独跑一遍djst·离线预处理 + 在线查询
Martina_032131 分钟前
同一片森林换个镜头就忽冷忽暖?用6步统一曝光、LUT与相机后处理
人工智能·游戏·数学建模·3d·自然语言处理·aigc·游戏策划