SORT 追踪算法详解与 C# 实现案例
一、SORT 追踪算法完整详解
SORT(Simple Online and Realtime Tracking)是 2016 年提出的经典多目标追踪算法,至今在很多对实时性和简单性要求高的工业场景中仍然被广泛使用。
核心思想: '检测 + 卡尔曼滤波预测 + IOU 匹配',用最少的计算量实现实时追踪。
SORT 完整工作流程(只有 3 步)
- 检测 每一帧都依赖检测器(YOLO、Faster R-CNN 等)给出当前帧所有目标的 bounding box + 置信度 只使用置信度高于阈值(通常 0.5)的框
- 预测 对每一条已有轨迹,用 Kalman 滤波 预测它在当前帧的位置 (假设目标做匀速直线运动,状态包括中心点 x,y + 宽高 w,h + 速度)
- 关联(匹配) 计算当前帧所有检测框 与 预测框 的 IOU 用 Hungarian 算法(最优匹配)找出最佳一对一对应
- 匹配成功 → 更新轨迹(用检测框修正 Kalman 状态)
- 未匹配的检测框 → 新建轨迹(赋予新 ID)
- 未匹配的轨迹 → 标记为'丢失',连续丢失超过阈值(通常 1–3 帧)则删除
SORT 关键参数(工业调优经验)
max_age:最大丢失帧数(推荐 1–5,工业遮挡场景建议 3–5)min_hits:连续匹配成功几帧后才激活轨迹(推荐 3,避免误检产生短暂 ID)iou_threshold:IOU 匹配阈值(推荐 0.3–0.5)
SORT 的优点(工业最看重的点)
- 极简:只有 Kalman + IOU + Hungarian,三步搞定
- 极快:几乎不增加检测器的推理时间(纯 CPU,几毫秒)
- 易实现、易调试:参数少,逻辑清晰,新手 1–2 天就能写出来
- 对简单场景效果很好
SORT 的致命缺点(工业场景最容易翻车的点)
- 只用高置信度框 → 遮挡、运动模糊、低光时大量低分框被丢弃 → 跟丢严重
- 没有第二轮关联 → 目标短暂遮挡后 ID 几乎必然重置
- 对非匀速运动鲁棒性差(Kalman 假设匀速直线)
二、SORT 与 ByteTrack 最终工业对比(最真实场景)
| 对比维度 | SORT(2016) | ByteTrack(2022) | 工业场景胜出方 & 实际差距 |
|---|---|---|---|
| 使用检测框范围 | 只用高置信度框(>0.5) | 高置信度 + 低置信度框(第二轮补救) | ByteTrack(差距明显) |
| 遮挡场景表现 | 遮挡 2–3 帧就容易 ID 重置 | 遮挡 10–20 帧仍能找回 | ByteTrack(提升 2–5 倍) |
| 低光/运动模糊表现 | 大量低分框被丢弃 → 跟丢严重 | 充分利用低分框 → 追踪更连续 | ByteTrack |
| 实现复杂度 | 极简(3 个步骤) | 中等(4 个步骤) | SORT 更简单 |
| 实时性 | 极快(几乎不增加延迟) | 几乎一样快(第二轮 IOU 计算量很小) | 平手 |
| 工业适用性 | 适合人少、无遮挡、固定场景 |

