ProgTrack: A Multi-Object Tracking Algorithm with Progressive Matching Strategy¶
会议: CVPR 2026
论文: CVF Open Access
代码: 无
领域: 视频理解 / 多目标跟踪
关键词: 多目标跟踪, 无人机, 渐进式匹配, 上下文增强ReID, 全局运动信息
一句话总结¶
ProgTrack 模仿人眼"先大后小再补漏"的跟踪习惯,把无人机多目标跟踪拆成"大目标用 IoU、小目标用上下文增强 ReID、剩余难匹配目标用目标间相对位置"三阶段渐进匹配,再配一个能扛遮挡/掉检的纯卡尔曼滤波(PKF),在 VisDrone2019 和 MDMT 上把 MOTP/IDF1 刷到 SOTA。
研究背景与动机¶
领域现状:无人机多目标跟踪(UAV-MOT)目前主流走 Track-by-Detection 范式——先用检测器(如 YOLOX)逐帧出框,再用卡尔曼滤波预测位置、用匈牙利算法把上一帧轨迹和当前帧检测框配对。匹配线索无非两类:运动信息(以 IoU 为代表)和外观信息(以 ReID 为代表)。
现有痛点:无人机视角下这套传统流程频繁翻车,作者归纳了四类典型失败场景:① 多尺度目标——小目标像素少、框小、外观特征羸弱,ReID 提不出有效特征;② 复杂背景/遮挡——背景或遮挡物干扰外观、还会改变目标框大小;③ 镜头抖动/旋转/缩放——导致相邻帧目标位置剧烈漂移,普通卡尔曼滤波和 IoU 都对不上;④ 目标高度相似——比如路上一排车,外观特征根本分不开。
核心矛盾:这四类场景背后是同一个根本矛盾——单一匹配线索(运动 or 外观)对所有目标"一视同仁"地用,但不同尺度/状态的目标对线索的可靠性截然不同。大目标 IoU 就够了,硬上 ReID 反而慢;小目标外观弱,单看外观必错;被遮挡/抖动的目标连框都坏了,运动和外观都失效。
切入角度:作者从人眼跟踪机制获得灵感。人眼跟大目标时只用简单的局部运动判断(类似 IoU);跟小目标时会下意识借助背景——背景在相邻帧几乎不变,靠"目标相对背景的位置"来锁定;遇到目标尺寸/外观突变(遮挡)时,则退而求其次看"该目标相对周围其他目标的相对位置",因为镜头抖动和遮挡都不改变目标之间的相对位置关系。
核心 idea:把"用什么线索"和"目标的难度/状态"绑定起来,做多阶段渐进匹配——先匹配最容易的大目标(LMI/IoU),再匹配需要上下文的小目标(CE-Feature),最后用全局相对位置(GMI)兜底剩余的难匹配目标,每一阶段只处理它最擅长的那批目标,逐步收缩候选。
方法详解¶
整体框架¶
ProgTrack 接收两个输入:frame_{t-1}(已带 ID 和类别的上一帧轨迹)和 frame_t(待处理新帧)。匹配前先做两件准备:用本地训练的 YOLOX 在 frame_t 上检测出 detections_t;用改进的 PKF 策略基于上一帧轨迹预测出当前帧位置 predictions_t。随后核心是三阶段渐进匹配——把检测框按尺度分流,每阶段用一种匹配策略,匹不上的目标逐级下放到下一阶段,最后再用 PKF 后处理兜住掉检的轨迹。
第一阶段用 LMI(局部运动信息) 匹配大目标,具体实现就是 IoU——大目标框大、帧间重叠稳定,IoU 又快又准。第二阶段对小目标用 CE-Feature(上下文增强特征) 匹配,由 CE-ReID 网络提取融合了背景上下文的判别性特征。第三阶段对前两步剩下的难匹配目标用 GMI(全局运动信息) 匹配,由 GRNED 模块利用"目标间相对位置不变"来配对。三阶段都匹不上的轨迹交给 PKF 后处理:不立刻丢弃,而是继续预测跟踪一段时间,扛过短暂遮挡/掉检。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
A["frame t-1 轨迹 + frame t 新帧"] --> B["YOLOX 检测 + KF 预测<br/>得到 detections / predictions"]
B --> C["阶段一·LMI 匹配<br/>大目标用 IoU"]
C -->|剩余未匹配 小目标| D["阶段二·CE-Feature 匹配<br/>CE-ReID 提上下文增强特征"]
D -->|仍未匹配 含遮挡/抖动| E["阶段三·GMI 匹配<br/>GRNED 用目标间相对位置"]
E -->|仍未匹配的轨迹| F["PKF 后处理<br/>掉检也续跟 30 帧"]
F --> G["状态管理 + KF 更新<br/>输出 frame t 轨迹"]
关键设计¶
1. 三阶段渐进匹配:按目标难度分流匹配线索,逐级收缩候选
这是 ProgTrack 的灵魂,直接针对"单一线索对所有目标一刀切"的痛点。它模仿人眼"先匹配易匹配的大目标,再匹配难匹配的小目标,最后处理剩余混合尺度目标"的渐进过程:第一阶段只用 LMI(IoU)匹配大目标——大目标框大、相邻帧重叠率高,IoU 成功率高且计算延迟低,没必要上重型 ReID;第二阶段把目光转向小目标,因为小目标外观弱,改用融合背景的 CE-Feature;第三阶段处理前两步遗留的"硬骨头"(严重遮挡、镜头抖动导致框和外观都坏掉的目标),既有大目标也有小目标,改用对位置突变鲁棒的全局相对位置匹配。
这种"分而治之"的好处是:每个阶段只面对它最擅长的目标子集,匹配难度被显著降低,且候选集逐级收缩(大→小→剩余),错误不会在一锅烩里互相污染。和 ByteTrack 那种"高分框先匹、低分框补匹"的两段式相比,ProgTrack 的分层依据是目标的尺度/状态而非检测置信度,更贴合无人机场景里"尺度极不均匀"的本质矛盾。
2. CE-ReID 模块:给小目标的外观特征注入背景上下文
这是第二阶段 CE-Feature 策略的具体实现,专治"小目标外观判别力弱"。核心观察是:小目标自身像素信息有限,但它相对周围背景的位置在相邻帧几乎不变——于是把背景上下文编码进特征,就能造出更有区分度的特征。模块由三部分组成:SCA(空间与通道注意力)模块借鉴 CBAM 思路,对目标区域图在空间和通道两个维度做池化,concat 后经激活得到局部注意力分数,与目标区域图点乘得到 Local Texture Feature(局部纹理特征);CDSPC(上下文深度可分逐点卷积)模块输入"带上下文的目标区域图",先用深度可分逐点卷积充分提取目标与上下文特征,再把目标区域 mask 掉只留上下文,得到 Context Attention Feature(上下文注意力特征),它编码了上下文本身以及"上下文—目标"的特征级关系;最后融合模块把两者拼成 CE-Feature。
训练时对 Local Texture Feature 和 CE-Feature 分别算损失,总损失 \(\text{CombinedLoss} = \text{LocalFeatureLoss} + \text{ContextEnhancedFeatureLoss}\);推理时只输出 CE-Feature 作为 ReID 特征,送进匈牙利算法构造代价矩阵。一个反直觉但合理的结论:背景越复杂,CE-Feature 提升越大——因为更丰富的上下文提供了更多判别线索。实验里 CE-ReID 的 AUC 达 0.950,高于 DeepReID 的 0.917 和 FastReID 的 0.931。
3. GRNED 模块:用目标间相对位置兜底遮挡与镜头抖动
这是第三阶段 GMI 策略的实现,针对前两步匹不上的根因——遮挡破坏外观和框的完整性、镜头抖动(旋转/平移/缩放)让目标坐标剧烈漂移,此时单目标的运动和外观线索都废了。但作者发现一个关键不变量:无论镜头怎么抖、目标怎么被遮,场景里目标之间的相对位置关系几乎不变。GRNED 据此分三步匹配:① 帧内 GMI 提取——对 frame_{t-1} 里每个 \(\text{target}_i\),算它到同帧其他所有目标的欧氏距离集合 \(v_i = [d_{1-i}, d_{2-i}, \dots]\),排序后向量化,这个有序向量就成了该目标的"相对位置指纹";② 跨帧 GMI 匹配——遍历两帧的指纹向量对 \((v, v')\) 算欧氏距离填进代价矩阵 \(C\),再做 min-max 归一化以消除帧间缩放带来的距离突变:
当目标全遮挡或移出视野导致两帧向量长度不等时,用贪心算法从较长向量里"以最小代价丢弃部分元素"来对齐长度、同时最大化相似度;③ 匈牙利匹配——在归一化代价矩阵上求最优一一匹配。这一招把"绝对坐标"换成"相对拓扑",正是它抗抖动、抗遮挡的根本原因。
4. PKF(纯卡尔曼滤波):掉检也不丢轨迹,续跟扛过短暂遮挡
针对"目标上一帧还在、这一帧没检出"的掉检场景。出发点是:如果目标位于画面中心区域却没检出,大概率是被遮挡而非真的离场,此时不该停止跟踪。传统做法是用高斯/线性插值后处理估位置,但对实时任务不可行。PKF 的解法是即便没有检测结果,也继续用卡尔曼滤波纯预测续跟 30 帧:若 30 帧内重新检出且匹配成功,就回到正常的状态管理与 KF 更新;否则放弃续跟、保留最后位置 30 帧。关键改动在更新公式——因为没有检测观测值 \(y_t\),最终结果不再用观测加权,而是直接令 \(\hat{x}_t = \hat{x}_t^-\)(预测即输出):
普通 KF 一掉检就停跟,PKF 则把轨迹"撑"过短暂遮挡/掉检窗口,从而显著减少轨迹断裂和 ID 切换。
实验关键数据¶
主实验¶
在 VisDrone2019(17 序列 6635 帧)和 MDMT(28 序列 11762 帧、3581 个 ID)两个无人机数据集上对比 10 个 SOTA 跟踪器。红/青分别表示最优/次优。
| 数据集 | 方法 | MOTA↑ | MOTP↑ | IDF1↑ | IDs↓ |
|---|---|---|---|---|---|
| VisDrone2019 | StrongSORT (TMM'23) | 40.3 | 73.4 | 49.4 | 21102 |
| VisDrone2019 | GeneralTrack (CVPR'24) | 39.4 | 73.5 | 47.5 | 22803 |
| VisDrone2019 | DiffMOT (CVPR'24) | 38.8 | 73.9 | 47.2 | 21634 |
| VisDrone2019 | ProgTrack (本文) | 40.2 | 77.5 | 52.8 | 21295 |
| MDMT | StrongSORT | 57.1 | 74.3 | 66.8 | 26134 |
| MDMT | BoT-SORT | 56.4 | 74.7 | 67.6 | 26084 |
| MDMT | ProgTrack (本文) | 57.2 | 77.3 | 69.2 | 25536 |
在 VisDrone2019 上 ProgTrack 的 MOTP(77.5)和 IDF1(52.8)双双第一、MOTA(40.2)与最强的 StrongSORT(40.3)持平;在 MDMT 上三项核心指标全部第一。代价是速度——FPS 仅 6.5/6.7,明显慢于 ByteTrack(~29),属于精度换速度。
消融实验¶
在 VisDrone2019 上以 ByteTrack 为 baseline 逐模块叠加:
| 配置 | MOTA↑ | MOTP↑ | IDF1↑ | 说明 |
|---|---|---|---|---|
| baseline (ByteTrack) | 34.7 | 72.1 | 47.2 | 起点 |
| + CE-ReID | 38.4 | 73.8 | 48.1 | MOTA 大涨 +3.7,外观判别增强 |
| + GRNED | 39.7 | 76.8 | 48.9 | MOTP 大涨 +3.0,抗位置漂移 |
| + PKF | 40.2 | 77.5 | 52.8 | IDF1 大涨 +3.9,轨迹连续性 |
关键发现¶
- 三个模块各管一项核心指标,分工清晰:CE-ReID 主要拉高 MOTA(特征判别力→整体跟踪准确性),GRNED 主要拉高 MOTP(相对位置匹配→定位精度),PKF 主要拉高 IDF1(续跟→身份一致性、减少 ID 切换)。这种"一模块对一指标"的干净对应,反过来佐证了三阶段设计确实在解各自瞄准的问题。
- CE-ReID 的优势随背景复杂度上升:ReID 对比中 CE-ReID 的 ROC-AUC 0.950 显著高于 DeepReID(0.917)和 FastReID(0.931),且背景越复杂上下文线索越丰富、提升越明显——这与"借背景锚定小目标"的设计直觉一致。
- 精度提升以速度为代价:6.5 FPS 远低于实时阈值,对真实无人机实时跟踪是明显短板。
亮点与洞察¶
- 把"线索选择"和"目标难度"解耦绑定:最巧妙之处是不再纠结"哪种匹配线索更好",而是承认不同目标该用不同线索,按尺度/状态分阶段渐进处理——这种"分而治之 + 候选逐级收缩"的思路可迁移到任何"异质样本难度差异大"的匹配/检索任务。
- "相对位置不变量"是抗抖动的好抓手:GRNED 把绝对坐标换成"目标间相对距离的有序指纹",用拓扑不变性绕开镜头抖动——这个 trick 对所有"全局几何形变但局部结构稳定"的场景(如卫星图配准、动态相机 SLAM 关联)都有启发。
- PKF 把后处理插值搬进在线滤波:用"无观测时直接预测即输出"的极简改法实现实时续跟,避开了离线插值,适合任何对掉检敏感的在线跟踪。
局限性 / 可改进方向¶
- 速度是硬伤:6.5 FPS 难以满足无人机机载实时需求,三阶段串行 + CE-ReID 重型特征提取是主要开销,作者也把优化 CE-ReID/GRNED 列为未来工作。
- GRNED 依赖足够多的共视目标:相对位置指纹需要场景里有多个目标共存,目标稀疏(只有一两个目标)时相对拓扑信息不足,第三阶段可能失效。⚠️ 论文未给出目标数极少时的退化分析。
- 贪心对齐可能引入误匹配:当两帧目标数不等时靠贪心"丢弃元素"对齐向量长度,这一步在大量目标进出视野时的鲁棒性存疑,论文未充分量化其失败率。
- 30 帧续跟阈值是固定超参:PKF 续跟 30 帧、保留 30 帧均为硬编码,对不同帧率/运动速度的泛化性未验证。
相关工作与启发¶
- vs ByteTrack:ByteTrack 按检测置信度做两段式匹配(高分先匹、低分补匹);ProgTrack 按目标尺度/状态做三段式匹配并各配专属线索。ProgTrack 在 VisDrone2019 上把 IDF1 从 47.x 提到 52.8,但 FPS 从 ~29 掉到 6.5。
- vs StrongSORT:StrongSORT 走"强 ReID + 运动补偿"路线,MOTA 略高(40.3 vs 40.2);ProgTrack 靠 GRNED 的相对位置匹配在 MOTP(77.5 vs 73.4)和 IDF1(52.8 vs 49.4)上明显领先,定位与身份一致性更强。
- vs FairMOT(Joint-Detection-and-Track):FairMOT 用共享 backbone 联合优化检测与 ReID 分支;ProgTrack 坚持 Track-by-Detection 范式,把创新全压在"匹配阶段",证明在无人机场景下精细化匹配策略比端到端联合训练更对症。
评分¶
- 新颖性: ⭐⭐⭐⭐ 渐进式三阶段匹配 + 相对位置不变量 GRNED 的组合在 UAV-MOT 里思路清新
- 实验充分度: ⭐⭐⭐⭐ 双数据集对比 10 个 SOTA + 逐模块消融 + ReID 单独 ROC 对比,较扎实
- 写作质量: ⭐⭐⭐⭐ 人眼类比贯穿全文、动机—设计映射清晰,但部分公式排版凌乱
- 价值: ⭐⭐⭐⭐ 对无人机/动态相机多尺度跟踪有实用价值,但 6.5 FPS 限制了落地