Skip to content

EscoffierZhou/Zero_shot_tracking

Repository files navigation

🚀 零样本目标跟踪

本项目探索了高性能零样本目标跟踪系统的演进之路,从最初的重型分割模型,到传统的计算机视觉方法,最终演变为基于 Transformer 并经 TensorRT 极致加速的实时跟踪系统。

📊 性能基准评测 (Benchmark)

我们评估了 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

🏗️ 系统架构与算法原理

1. OSTrack 核心架构图 (One-Stream Transformer)

不同于传统的孪生网络 (Siamese) 分别处理模板和搜索区域,OSTrack 采用单流 (One-Stream) 架构,让模板和搜索区域的特征在早期就进行交互。

2. 核心机制解析

A. 单流框架 (One-Stream Framework)

  • 机制: 将模板 $Z$ 和搜索区域 $X$ 的 Token 拼接输入同一个 ViT。
  • 优势: 自注意力机制 (Self-Attention) 允许从第一层开始就进行双向信息流交互,提取出比后期融合更具判别力的特征。

B. 候选消除 (Candidate Elimination)

  • 原理: 在中间层计算 Token 相似度,提前剔除属于背景的 Token。
  • 效果: 大幅减少了后续层的计算量,使推理速度提升约 40%。

⚡ 极致优化:TensorRT FP32 (CV_TRACKING_FP32)

CV_TRACKING_FP32 版本代表了我们优化的巅峰,实现了 120+ FPS 的性能。

1. 编译策略 (Compilation)

我们使用 Python API 构建 TensorRT 引擎,而非简单的 trtexec

  • 精度选择: 显式选择 FP32 (32位浮点)。
    • 原因: 虽然 FP16 理论更快,但实测发现它在边界框回归任务中引入了坐标抖动。FP32 保持了 PyTorch 版本的"像素级"稳定性,同时在现代 GPU 上仍能提供巨大的加速比。
  • 显式 Batch: 配置 Batch=1 以优化延迟。

2. CUDA 内存管理 (Memory Management)

Python AI 推理的常见瓶颈是 CPU-GPU 数据传输。

  • 锁页内存 (Pinned Memory): 使用 cuda.pagelocked_empty 分配缓冲区。这允许 DMA 控制器直接将数据传输到 GPU,无需 CPU 参与。
  • 持久化上下文: 手动管理 CUDA Context,避免每帧初始化的开销。

3. 零拷贝预处理 (Zero-Copy Preprocessing)

标准流程中,图像归一化会产生多次内存拷贝。

  • 优化: 重写 preprocess 函数,将归一化后的数据直接写入锁页内存缓冲区。
  • 效果: 每帧减少 2-3 次大内存拷贝,显著降低 CPU 占用,解决"GPU 吃不饱"的问题。

4. 时序平滑 (Temporal Smoothing)

为了稳定高速输出,我们引入了 指数移动平均 (EMA): $$ \text{State}{t} = \alpha \cdot \text{Prediction}{t} + (1 - \alpha) \cdot \text{State}_{t-1} $$

  • 位置: $\alpha = 0.7$ (高响应)
  • 尺寸: $\alpha = 0.5$ (高平滑)

🛤️ 研究演进路径

  1. Phase 1 (Failed): SAM + XMem. 试图用大模型做像素级分割。失败原因:算力要求过高,且无法处理遮挡后的重识别。
  2. Phase 2 (Traditional): CSRT + Kalman. 回归传统 CV。成功解耦了检测与运动预测,但在目标形变时失效。
  3. Phase 3 (Deep Learning): OSTrack (PyTorch). 引入 Transformer。解决了遮挡和形变问题,但 Python 推理速度受限。
  4. Phase 4 & 5 (Acceleration): TensorRT. 通过算子融合与精度调优,将 FPS 从 30 提升至 120+,最终在 FP32 版本达到速度与精度的完美平衡。

🚀 如何运行

体验最佳版本 (CV_TRACKING_FP32):

  1. 进入目录:
    cd .\CV_Project\CV_TRACKING_FP32
  2. 运行启动脚本:
    run_trt_fp32.bat
  3. 上传视频,选择目标,享受 120+ FPS 的丝滑跟踪!

About

2023级计算机视觉实践课作业:零样本跟踪

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published