TT Lab
博客

한국어 English 日本語 中文

开始
博客

博客

精确定位事件:E2E-Spot、T-DEED、AdaSpot —— 如何训练模型以准确命中「第几个帧」及 mAP@δ

状态:草稿 (2026-10-13),部分为实际测量值。 论文中的数值已通过打开原文并结合条件进行确认(AdaSpot 的会议信息已通过官方仓库标记确认)。亲自尝试的内容是笔记本 CPU 上的 numpy 示例(code/10_map_delta.py)。TT Score 的事件实测值记录在《TT Score 模型剖析》第 5 篇以及 2026-10-13 研究日志的「采用」栏中(进行中的研究,仓库之外)。本篇中的 PES 模型从未在乒乓球视频上运行过(未实测)。 2026-10-15 补充: 我们在 8GB 级 GPU 上重新测试了 AdaSpot(网球 small)和 E2E-Spot(网球,RegNet-Y 200MF)的公开权重速度,并将其附在第 6 节。乒乓球准确率需要重新训练才有意义,因此仍然属于未实测状态。 系列《阅读视觉模型 2》第 10 篇。前一篇: 小而快的球追踪。关于视频模型的基础知识,请参见 第 6 篇。

目录

1. 直觉:「什么时候」而非「是什么」

第 6 篇中的视频模型为整个片段附加了一个标签:「这 2 秒是在打乒乓球」。然而,若要进行评分,则需要一个不同的问题: 球击中接收方球台的瞬间准确地是第几个帧?

寻找这种「瞬间发生事件的准确帧」的工作被称为 精确事件定位(Precise Event Spotting, PES) 。与足球中的「进球」或「角球」这类允许 1–5 秒误差的行为检测(action spotting)不同,PES 要求精度在 1–2 帧 以内。网球的弹跳与击球、花样滑冰的跳跃着地、跳水的入水都是典型的任务。

这里有两个难点:

프레임마다 분류 → 봉우리 고르기 → δ 로 채점 클립 → 프레임별 특징(2D 망 + 시간 밀기) → 양방향 GRU → 프레임마다 (K+1)종 분류(+1 = 아무 일 없음) 정답 바운드 타구 실선 = 바운드 확률 · 점선 = 타구 확률 봉우리 하나 = 예측 하나(가까운 중복은 NMS 로 지운다) 채점 mAP@δ 예측을 확신 순으로 세우고, 같은 종류 정답과 |프레임 차| ≤ δ 이면 맞음(정답 하나에 예측 하나) δ=1: 정답 ±1프레임(60fps 면 ±17ms) 정밀도-재현율 곡선 넓이 = AP, 종류별 평균 = mAP
图:逐帧分类、挑选峰值,并以允许误差 δ 进行评分

2. 如何进行训练

E2E-Spot (ECCV 2022):对每个帧进行到底的分类

E2E-Spot 的结构在设计上非常简单。

  1. 在一个轻量级 2D 图像网络(RegNet-Y 200MF,由 ImageNet 初始化)中插入第 6 篇的 时间移位模块(GSM) ,在逐帧提取特征的同时混合相邻帧的信息。
  2. 在其之上叠加一层 双向 GRU 来观察整个片段的上下文。
  3. 对每个帧进行 (K+1) 类分类。K 是事件的种类(例如:近端弹跳、远端击球……),+1 表示「无事发生」。损失函数为 softmax 交叉熵。

训练方式的核心正如其名,即 端到端(end-to-end) 。它不是在预先提取的固定特征上仅训练头部,而是将 100 帧的片段(224×224)整体输入,连同图像网络一起训练。数据不平衡问题通过给事件类别的损失赋予 5 倍权重来解决。使用了裁剪、色彩抖动和 mixup 增强,在测试时将片段重叠一半并取平均值(引自论文)。

相比于仅在固定特征上训练头部的传统方法,它在 δ=1 时 mAP 领先了 4–11(引自论文)。这可以理解为预训练特征更侧重于「是什么」,无法捕捉到单个帧的微小差异。

T-DEED (CVPRW 2024):单独预测「相距多少帧」

如果只对每一帧进行分类,事件紧邻的帧也会看起来「像事件」,导致概率发生扩散。T-DEED 采用了双分支结构:

在测试时,利用分类来找到大致的位置,并通过位移来修正准确的帧。据论文报告,这种位移分支优于单纯将事件周边帧扩大为「正样本」的标签扩展(label dilation)方法(引自论文)。网络采用编码器-解码器结构,在缩减和放大时间分辨率的同时混合了多种时间尺度的上下文。

AdaSpot (CVPR 2026):将分辨率用在刀刃上

在网球和乒乓球中,事件的主角是一个小球。在缩减至 224px 的画面中,球几乎完全消失了。然而,如果以高分辨率观察所有帧,代价又过于高昂。AdaSpot 设置了两个分支:

  1. 低分辨率分支:以低分辨率观察整个画面。
  2. 挑选感兴趣区域(ROI):通过低分辨率特征的通道平均值制作「显眼区域」地图,在时空上进行平滑处理后,挑选出能够充分包含重要度的最小矩形,并从原图中裁剪出 112×112 的大小。 这个挑选过程不参与训练。 不需要单独的感兴趣区域标签。
  3. 高分辨率分支:仅以原始分辨率观察裁剪后的小区域。

损失函数为加权交叉熵(事件权重为 5),并且在两个分支各自挂载了辅助的 GRU 头部以增加损失(各占 ⅓)。论文指出,如果没有这些辅助损失,训练将会变得不稳定(引自论文)。

3. 评估:mAP@δ

PES 的评分机制如下:

  1. 将预测结果(帧、种类、置信度)按置信度从高到低排列。
  2. 如果与同种类正确答案的帧之差 小于等于 δ,则判定为正确。一个正确答案只能与一个预测结果配对。
  3. 精确率-召回率曲线下的面积为 AP,各类别的平均值为 mAP。

δ=1 意味着「正确帧或其相邻帧」。在 60fps 下为 ±17ms,在 25fps 下为 ±40ms,因此 即使 δ 相同,根据帧率的不同,实际允许的时间误差也各不相同。

我们在

code/10_map_delta.py 动手实践code/10_map_delta.out.txt中实现了这种评分,并针对 400 个事件(遗漏 5%,错误地点的虚假预测 5%)制作了三个具有不同时间误差的「模型」进行了评分( )。由于每一行都是随机抽取遗漏和虚假预测的,请 在同一行内

进行比较。 时间误差(标准差) δ=0 δ=1 δ=2
δ=4 0.759 0.914 0.914 0.914
0.3 帧 0.317 0.905 0.944 0.948
0.7 帧 0.039 0.339 0.667 0.928

2.0 帧 同一个模型(2.0 帧)根据 δ 的不同,得分会从 0.04 到 0.93 不等。 离开 δ 谈 mAP 数值是没有意义的。

并且,当 δ=0(精确到那一帧)时,即使时间误差只有 0.7 帧,分数也会暴跌至 0.3 左右。这就是论文开始单独报告 δ=0 的原因(见下方的 AdaSpot 表格)。

중복 그대로   δ=0: 0.294  δ=1: 0.654  δ=2: 0.739
NMS(±2) 뒤     δ=0: 0.208  δ=1: 0.690  δ=2: 0.875

我们还对重复预测进行了实验。在每个事件的 ±1–2 帧内,额外生成了 2 个置信度较低的预测。

重复预测会被当作「没有正确答案的预测」来计算,从而拉低精确率。通过使用 NMS 消除 ±2 帧内的重复项,δ=2 的分数从 0.739 恢复到了 0.875。相反,δ=0 的分数反而下降了。这是因为 NMS 留下的「最具置信度」的预测有时并不精确对应那一帧。后处理的好坏也因 δ 而异。

4. 论文数值 模型 数据 δ=0 δ=1 δ=2
条件(论文) E2E-Spot — 96.1 97.7 网球
200MF。网球 3,345 个片段·33,791 个事件,6 种(近端/远端 × 发球·击球·弹跳) E2E-Spot — 81.0 · 68.4 · 47.9 93.5 · 85.3 · 65.2 花样滑冰 (FS-Comp) · 跳水 · 体操
同一模型 T-DEED — 85.15 · 71.48 91.70 · 87.62 花样滑冰 (FS-Comp) · 跳水
200MF。800MF 跳水 73.23 · 88.88 AdaSpot 74.02 97.36 97.79 网球
RegNetY-400MF, 1,063 万参数, 56.78 GFLOPs, 3 个随机种子平均值 AdaSpot 55.38 69.37 69.94 F3Set(网球精细事件)
同上 E2E-Spot + MFS 36.43 69.50 78.12 乒乓球 (TTA)

手机拍摄 39 场比赛,30fps 720p,4,878 个事件 8 种

在手机拍摄的乒乓球(TTA)中,δ=1 为 69.50,比同系列模型在网球上的数值低了 25 分以上。球很小,事件密集(每 100 帧 7.73 个),且相机在晃动。F3Set 的乒乓球部分只有 42 个回合,因此训练数据也很少(引自论文)。

F3Set 论文指出,虽然 GPT-4V 能够识别项目和记分牌,但由于无法捕捉击球方向与帧之间的时间关系,因此被排除在对比之外(第 12 篇)。

Titi 一言。 当听到“找弹跳准确率 97 分!”时,请先问一句:“δ 是多少?”同一个模型在 δ=0 时可能得 4 分,在 δ=4 时可能得 93 分。我亲自打分验证过。

参考文献

登录后即可点赞

评论

还没有评论。

登录后即可发表评论