本项目探索了高性能零样本目标跟踪系统的演进之路,从最初的重型分割模型,到传统的计算机视觉方法,最终演变为基于 Transformer 并经 TensorRT 极致加速的实时跟踪系统。
我们评估了 5 个不同版本的跟踪系统。稳定性 (Stability) 与 速度 (Speed) 的权衡驱动了我们的研究方向。
| 版本 | 目录 | 核心算法 | 速度 (FPS) | 稳定性 | 关键特性 |
|---|---|---|---|---|---|
| v5 (最佳) | CV_TRACKING_FP32 |
OSTrack (TRT FP32) | 120+ | ⭐⭐⭐⭐ | 最佳平衡点。高精度,极致速度,健壮的 CUDA 内存管理。 |
| v4 | CV_TRACKING_ADVANCED |
OSTrack (TRT FP16) | 100+ | ⭐⭐⭐ | 速度快,但 FP16 精度在边界框回归时会导致轻微抖动。 |
| v3 | CV_TRACKING_INTER |
OSTrack (PyTorch) | 5~30 | ⭐⭐⭐⭐⭐ | 最稳定。官方参考实现。在 CPU/未优化 GPU 上较慢。 |
| v2 | CV_TRACKING |
CSRT + Kalman | 20+ | ⭐⭐⭐⭐ | "手术刀"式传统方法。适合简单运动,但在形变/遮挡下失效。 |
| v1 | CV_TRACKING_FAILED |
SAM + XMem + TRT | < 10 | ⭐ | 失败的实验。计算量过大,无遮挡恢复机制,无法实时。 |
- 稳定性:
CV_TRACKING_INTER>CV_TRACKING>CV_TRACKING_FP32>CV_TRACKING_ADVANCED - 速度:
CV_TRACKING_FP32>CV_TRACKING_ADVANCED>CV_TRACKING>CV_TRACKING_INTER
不同于传统的孪生网络 (Siamese) 分别处理模板和搜索区域,OSTrack 采用单流 (One-Stream) 架构,让模板和搜索区域的特征在早期就进行交互。
-
机制: 将模板
$Z$ 和搜索区域$X$ 的 Token 拼接输入同一个 ViT。 - 优势: 自注意力机制 (Self-Attention) 允许从第一层开始就进行双向信息流交互,提取出比后期融合更具判别力的特征。
- 原理: 在中间层计算 Token 相似度,提前剔除属于背景的 Token。
- 效果: 大幅减少了后续层的计算量,使推理速度提升约 40%。
CV_TRACKING_FP32 版本代表了我们优化的巅峰,实现了 120+ FPS 的性能。
我们使用 Python API 构建 TensorRT 引擎,而非简单的 trtexec。
- 精度选择: 显式选择 FP32 (32位浮点)。
- 原因: 虽然 FP16 理论更快,但实测发现它在边界框回归任务中引入了坐标抖动。FP32 保持了 PyTorch 版本的"像素级"稳定性,同时在现代 GPU 上仍能提供巨大的加速比。
- 显式 Batch: 配置 Batch=1 以优化延迟。
Python AI 推理的常见瓶颈是 CPU-GPU 数据传输。
- 锁页内存 (Pinned Memory): 使用
cuda.pagelocked_empty分配缓冲区。这允许 DMA 控制器直接将数据传输到 GPU,无需 CPU 参与。 - 持久化上下文: 手动管理 CUDA Context,避免每帧初始化的开销。
标准流程中,图像归一化会产生多次内存拷贝。
- 优化: 重写
preprocess函数,将归一化后的数据直接写入锁页内存缓冲区。 - 效果: 每帧减少 2-3 次大内存拷贝,显著降低 CPU 占用,解决"GPU 吃不饱"的问题。
为了稳定高速输出,我们引入了 指数移动平均 (EMA): $$ \text{State}{t} = \alpha \cdot \text{Prediction}{t} + (1 - \alpha) \cdot \text{State}_{t-1} $$
-
位置:
$\alpha = 0.7$ (高响应) -
尺寸:
$\alpha = 0.5$ (高平滑)
- Phase 1 (Failed): SAM + XMem. 试图用大模型做像素级分割。失败原因:算力要求过高,且无法处理遮挡后的重识别。
- Phase 2 (Traditional): CSRT + Kalman. 回归传统 CV。成功解耦了检测与运动预测,但在目标形变时失效。
- Phase 3 (Deep Learning): OSTrack (PyTorch). 引入 Transformer。解决了遮挡和形变问题,但 Python 推理速度受限。
- Phase 4 & 5 (Acceleration): TensorRT. 通过算子融合与精度调优,将 FPS 从 30 提升至 120+,最终在 FP32 版本达到速度与精度的完美平衡。
体验最佳版本 (CV_TRACKING_FP32):
- 进入目录:
cd .\CV_Project\CV_TRACKING_FP32
- 运行启动脚本:
run_trt_fp32.bat
- 上传视频,选择目标,享受 120+ FPS 的丝滑跟踪!