多目标跟踪:SORT/DeepSORT 与轨迹管理

进阶05-视频与跟踪预计 35 分钟多目标跟踪SORT卡尔曼滤波匈牙利算法MOTA

前置知识点

kp-023 单目标跟踪:相关滤波与 Siamese kp-017 目标检测:IoU、mAP 与两阶段流程

一句话定义

多目标跟踪(MOT)用「检测器逐帧给框 + 跟踪器维护每条轨迹的运动状态」的 tracking-by-detection 范式组织全视频:SORT 用卡尔曼滤波预测 + IoU 匹配实现实时,DeepSORT 加外观 ReID 特征与级联匹配抗遮挡,轨迹全生命周期(确认/丢失/删除)由状态机管理。

为什么重要

视频结构化的一切上层指标(客流计数、轨迹分析、跨镜追踪、行为事件)都建立在「同一物理目标跨帧身份不变」之上;SORT 用 200 行代码证明「预测 + 匹配」的框架有效性,是理解所有现代 MOT 系统(ByteTrack、OC-SORT 等)的公共骨架。

直观类比

空中交通管制:雷达每帧报出所有飞机的新位置(检测),管制员手里有一张「旧航迹 × 预测位置」的表(卡尔曼预测),把新报告与预测一一配对(匈牙利算法求全局最优指派),配不上的旧航迹进入「失联待观察」,连续失联才销户,新报告才会开户——身份管理系统加上运动预测,就是 MOT。

前置知识

kp-023(单目标跟踪与轨迹连续性概念);kp-017(IoU 与检测输出)。

核心概念

原理与机制

SORT 的完整循环:每条轨迹维护 KF 状态(框中心、面积、长宽比及各自速度);每帧先用运动模型预测本帧位置,然后与检测器输出构造代价矩阵(1 − IoU),匈牙利算法求最小代价指派;配对成功用检测更新 KF 与轨迹「命中数」,未配对轨迹「失踪数 + 1」,连续失踪超过阈值删除;连续数帧都有配对的新轨迹才转正(抑制误检轨迹)。DeepSORT 在此之上:匹配分两级——对 Confirmed 轨迹先用外观余弦距离 + 马氏距离门限做级联匹配(优先匹配近期轨迹),再对剩余用 IoU 匹配兜底,遮挡数十帧仍可重连。指标含义必须分清:MOTA 可为负(误检多于真值时),它不直接度量身份质量,身份质量看 IDSW 与 IDF1。

公式与模型

KF: x̂ₜ = F·x̂ₜ₋₁ (预测) xₜ = x̂ₜ + K(zₜ − H·x̂ₜ) (更新) 代价: C(i, j) = 1 − IoU(track_i, det_j) 指派: 匈牙利算法求 min Σ C(i, π(i)) 的最优一对一匹配 MOTA = 1 − ( FN + FP + IDSW ) / Σ GT IDF1 = 全局最优身份指派下正确识别帧数 / 全部检测帧数

图示

帧 1帧 2帧 3帧 4 虚线:KF 预测段(目标被遮挡) 重匹配回轨迹 → 身份保持 实点:检测命中 橙点:遮挡期预测位置

实例与案例

商场客流与热区分析:行人检测 + DeepSORT 输出各顾客轨迹,入口线穿越计数即客流;轨迹驻留时长即热区。球场战术板:全场自下而上姿态(kp-020)+ MOT 输出每名球员的时序轨迹。路口监控的车牌级跟踪:检测 + 轨迹 + 轨迹末帧抠车牌,规避逐帧 OCR 的重复计算。ByteTrack 的工程启示:低分检测框不再丢弃而是参与第二轮匹配,显著降低遮挡期 IDSW,说明「关联策略的收益可大于换更强检测器」。

# SORT 风格主循环(伪代码骨架)
tracks = kf.predict_all()                        # 预测全部轨迹
C = 1 - iou_matrix(tracks, detections)           # 代价矩阵
pairs = hungarian(C)                             # 全局最优指派
for t, d in pairs: kf.update(t, detections[d])
unmatched_tracks.age += 1; delete_if_age_gt(max_age)
for d in unmatched_dets: spawn_tentative_track(d)

常见误区

与其他知识点的关系

逐帧框来自 kp-017;关联与身份管理的思想在 kp-014 回环、kp-023 重检测中都有对应物;关键点轨迹(kp-020)是 MOT 输出的常见下游。

自测题

  1. SORT 的三个组件及其各自作用是什么?

答案要点:KF 做运动预测平滑与短时外推;匈牙利算法在 IoU 代价矩阵上全局最优指派;轨迹状态机管理确认与删除。

  1. DeepSORT 相比 SORT 加了什么、解决什么?

答案要点:外观 ReID 嵌入 + 级联匹配与马氏门限;遮挡后凭外观重连,降低 IDSW。

  1. 为什么 MOTA 可能为负?

答案要点:误检与身份切换总数超过真值总数时,1 − (FN+FP+IDSW)/GT < 0,说明检测环节严重过检。

延伸阅读

相关知识点

kp-020 关键点与人体姿态估计kp-022 光流与视频运动分析