4. 数据集与评估指标

做目标跟踪算法落地,最怕什么?

怕你模型在实验室跑得飞起,一到真实场景就崩了。

为什么会这样?说白了,就是你在训练和测试时用的数据集,跟实际场景差距太大。今天我就把几个主流数据集和评估指标掰开揉碎讲清楚。这些内容,是我在多个落地项目中反复踩坑后总结出来的。

4.1 三大主流数据集:OTB100、VOT、LaSOT

先说说数据集。我个人习惯把数据集分成两类:一类是「学术标准」,用来发论文、刷榜;另一类是「工程标准」,用来验证算法能不能真干活。OTB100、VOT、LaSOT 这三者,恰好覆盖了这两个维度。

4.1.1 OTB100:入门必备,但别太当真

OTB100 全称是 Object Tracking Benchmark 100。它包含 100 个视频序列,每个序列都有 ground truth 标注。嗯,这里要注意——OTB100 的标注是 axis-aligned 的矩形框,也就是不旋转的。

我在项目中遇到过一个问题:用 OTB100 训练出来的模型,在检测倾斜目标时效果很差。后来才发现,OTB100 的标注方式决定了它对旋转不敏感。所以,如果你要做的是车辆跟踪、无人机视角跟踪,OTB100 只能作为参考,不能作为唯一标准。

OTB100 的评估方式也很经典:

  • One-Pass Evaluation (OPE):用第一帧的 ground truth 初始化,然后跑完整段视频
  • Spatial Robustness Evaluation (SRE):对第一帧的标注框做偏移或缩放,测试鲁棒性
  • Temporal Robustness Evaluation (TRE):从不同帧开始初始化,测试时间鲁棒性

我个人建议,如果你只是做算法对比,用 OPE 就够了。但如果是工程落地,一定要做 SRE 和 TRE,因为真实场景中第一帧的标注不可能那么精确。

4.1.2 VOT:挑战性更高,更贴近真实

VOT(Visual Object Tracking)挑战赛,每年都会更新数据集。跟 OTB100 最大的区别是:VOT 的标注是 rotated bounding box,也就是带旋转角度的。

为什么这个重要?你想想看,一个行人从远处走来,他的姿态在变,身体在旋转。如果用 axis-aligned 的框,框里会包含大量背景信息,这对跟踪器来说就是噪声。VOT 的 rotated box 更贴合目标本身。

VOT 还有一个特点:它会自动重置跟踪器。当跟踪器丢失目标时,VOT 会在 5 帧后重新初始化。这个机制很实用——我在做安防监控项目时,发现很多跟踪器一旦跟丢就再也回不来了。VOT 的重置机制正好模拟了这种「需要重新检测」的场景。

VOT 数据集有几个版本:

  • VOT2016:60 个序列,主要挑战是遮挡和运动模糊
  • VOT2018:60 个序列,增加了光照变化和尺度变化
  • VOT2020:60 个序列,引入了长时跟踪场景

我曾经在 VOT2018 上测试过一个轻量级跟踪器,结果在光照变化剧烈的场景下直接崩了。后来加了光照归一化模块,才勉强及格。所以,VOT 的挑战性确实更高。

4.1.3 LaSOT:长时跟踪的标杆

LaSOT(Large-scale Single Object Tracking)是目前最大的单目标跟踪数据集之一。它有 1400 个视频序列,每个序列平均 2500 帧。最长的序列超过 10000 帧。

为什么需要这么长的序列?因为真实场景中,目标可能长时间消失又出现。比如在商场里跟踪一个人,他可能走进店铺,几分钟后又出来。短序列数据集根本测不出这种能力。

LaSOT 的标注非常精细:

  • 每帧都有 axis-aligned 的 bounding box
  • 标注了目标的消失和重现时刻
  • 提供了 14 种属性标签(遮挡、形变、快速运动等)

我在做智慧零售项目时,就用了 LaSOT 来验证算法。结果发现,很多在 OTB100 上表现很好的跟踪器,在 LaSOT 上连 50% 的成功率都达不到。原因很简单——LaSOT 的长时序列对跟踪器的「记忆能力」要求更高。

核心总结:

  • OTB100:入门级,适合快速验证算法
  • VOT:中高级,适合挑战性场景
  • LaSOT:工程级,适合真实落地验证

4.2 评估指标:别只看一个数字

很多同学拿到一个跟踪器,只看一个指标就下结论。这是大忌。评估指标就像体检报告,每个指标反映的是不同维度的健康状况。

4.2.1 成功率图(Success Plot)

成功率图的核心思想是:计算预测框和 ground truth 的 IoU(交并比)。如果 IoU 大于某个阈值,就认为这一帧跟踪成功。

具体做法是:

  • 设定一个阈值范围,比如从 0 到 1,步长 0.05
  • 对每个阈值,计算跟踪成功的帧数占总帧数的比例
  • 以阈值为横轴,成功率为纵轴,画出一条曲线

这条曲线下的面积(AUC),就是成功率图的最终指标。AUC 越高,说明跟踪器在不同 IoU 阈值下表现越稳定。

我在项目中遇到过一个问题:两个跟踪器的 AUC 相同,但一个在低阈值下表现好,另一个在高阈值下表现好。这时候怎么办?我的建议是:看你的应用场景。如果允许一定误差(比如安防监控),低阈值更重要;如果需要精确定位(比如自动驾驶),高阈值更重要。

避坑指南: 我曾经用成功率图对比两个跟踪器,发现 AUC 相差 0.01,就认为一个比另一个好。后来发现,这个差异完全在统计误差范围内。所以,对比时一定要做显著性检验,或者至少看多次实验的平均值。

4.2.2 精确度图(Precision Plot)

精确度图的核心思想是:计算预测框中心点和 ground truth 中心点之间的欧氏距离。如果距离小于某个阈值,就认为这一帧跟踪成功。

具体做法跟成功率图类似:

  • 设定一个距离阈值范围,比如从 0 到 50 像素,步长 1 像素
  • 对每个阈值,计算跟踪成功的帧数比例
  • 以阈值为横轴,精确率为纵轴,画出一条曲线

常用的指标是 Precision at 20 pixels,也就是距离阈值设为 20 像素时的精确率。

嗯,这里要注意——精确度图有一个明显的缺陷:它只考虑中心点位置,不考虑框的大小和形状。也就是说,一个框即使大小完全不对,只要中心点靠近 ground truth,精确度指标也会很高。

所以,我个人习惯是:成功率图为主,精确度图为辅。如果两个指标冲突,优先相信成功率图。

4.2.3 EAO 指标:VOT 的专属指标

EAO(Expected Average Overlap)是 VOT 挑战赛使用的核心指标。它比成功率和精确度更复杂,但也更全面。

EAO 的计算过程是这样的:

  1. 对每个视频序列,计算每一帧的 IoU
  2. 当 IoU 降为 0 时(跟踪失败),跟踪器会在 5 帧后重置
  3. 计算从开始到失败之间的平均 IoU
  4. 对所有序列的平均 IoU 取平均,得到 EAO

EAO 的巧妙之处在于:它同时考虑了跟踪的精度(IoU 大小)和鲁棒性(失败次数)。一个跟踪器如果频繁失败,即使每次失败前的 IoU 很高,EAO 也不会高。

我在 VOT 竞赛中见过一个极端案例:某个跟踪器的精度很高,但鲁棒性很差,经常跟丢。它的 EAO 只有 0.2 左右,而一个精度稍低但从不跟丢的跟踪器,EAO 反而能达到 0.4。这就是 EAO 的魅力——它惩罚「不稳定」的跟踪器。

重要提醒: EAO 的计算依赖于 VOT 的重置机制。如果你用 OTB100 或 LaSOT 的数据集,不能直接套用 EAO。每个数据集都有自己的评估协议,不要混用。

4.3 知识体系结构图

下面这张图,是我对本章知识体系的梳理。它展示了数据集、评估指标和工程落地之间的关系。

目标跟踪数据集与评估指标知识体系 数据集 OTB100 VOT LaSOT axis-aligned rotated box 长时序列 评估指标 成功率图 精确度图 EAO 基于IoU 基于中心距离 精度+鲁棒性 工程落地验证 建议:多数据集 + 多指标联合评估 避免单一数据集和单一指标的偏见

4.4 我的工程建议

最后,分享几个我在实际项目中总结的经验:

  1. 不要只用一个数据集。我见过太多论文只在 OTB100 上测试,结果落地时一塌糊涂。至少用 OTB100 + VOT 或 OTB100 + LaSOT 的组合。
  2. 关注属性标签。每个数据集都提供了属性标签(遮挡、形变、快速运动等)。分析你的跟踪器在哪些属性上表现差,然后针对性优化。
  3. EAO 是工程落地的首选指标。因为它同时考虑了精度和鲁棒性,更贴近真实场景。
  4. 可视化结果比指标更重要。我曾经有一个跟踪器,指标很好看,但可视化后发现它一直在跟背景。所以,一定要看实际跟踪效果。

一个小技巧: 在做工程落地时,我会先用 OTB100 快速筛选候选算法,然后用 LaSOT 做深度验证,最后用 VOT 的 EAO 指标做最终评估。这个流程帮我节省了大量时间。

好了,数据集和评估指标就讲到这里。记住一句话:没有完美的数据集,也没有完美的指标。理解每个数据集和指标的优缺点,才能做出正确的工程决策。

可可精品资料库