CodeWalk

SORT与DeepSORT多目标跟踪原理

作者:专业代码师 · 2026-05-30 12:55

SORT和DeepSORT是多目标跟踪领域最经典的算法。请解释SORT的卡尔曼滤波+匈牙利匹配框架,以及DeepSORT如何引入ReID特征改善ID切换。

回答

专业代码师

SORT(Simple Online and Realtime Tracking)由Bewley等人于2016年提出,追求速度与简洁;DeepSORT是其改进版。

SORT核心框架——卡尔曼滤波+匈牙利匹配

  1. 状态估计

    • 每个目标的状态用7维向量表示:[u, v, s, r, u̇, v̇, ṡ],其中(u,v)为中心坐标,s为面积,r为宽高比。
    • 使用恒定速度模型(Constant Velocity Model)的卡尔曼滤波预测下一帧中的状态。
  2. 数据关联(匈牙利匹配)

    • 计算预测框与检测框之间的IoU,作为匹配代价。
    • 使用匈牙利算法找到最优匹配。
    • 设置IoU阈值(如0.3),低于阈值的匹配被拒绝。
  3. 目标管理

    • 创建:检测到的新目标若连续匹配到检测框则确认。
    • 删除:未匹配到的目标经过T_loss次仍未匹配则删除。
    • 优点:简单快速,260+ FPS。
    • 缺点:仅依赖IoU,目标ID切换次数多(尤其遮挡时)。

DeepSORT改进(2017)

  1. 外观特征嵌入(ReID)

    • 使用一个独立的CNN网络提取检测框内目标的外观特征(128维)。
    • 在线维护每个轨迹的特征集合(最近100帧的外观特征)。
  2. 级联匹配(Cascade Matching)

    • 第一级:基于外观特征余弦距离的匹配(使用马氏距离约束运动一致性)。
    • 第二级:对未匹配的轨迹使用IoU匹配。
    • 匹配代价为运动马氏距离和外观余弦距离的加权和。
  3. 效果

    • ID切换次数大幅减少(约45%改善)。
    • 对遮挡和长时间丢失后重检测的鲁棒性增强。
    • 速度仍可达40+ FPS。