状态:草稿(2026-10-13)。 论文中的数据是在打开原文并核对条件后确认的,而 TrackNetV2·V3 因为无法打开论文正文,是通过摘要、官方代码库和后续论文的描述进行确认的(已作相应标注)。亲自尝试的是笔记本电脑 CPU 上的 numpy 示例(
code/09_ball_labels.py)。 我们视频中测得的球体检测准确率和速度在 TT Score 模型剖析第 2 篇中。 本篇不重复这些实测数据,仅探讨「学习原理与谱系」。 2026-10-15 补充: 将此前未实测的 TOTNet(公开乒乓球权重)和 TrackNetV3(RacketVision 权重)放入同一测试中重新测试,并将结果总结在第 8 节(详细表格在第 2 篇中),同时修正了对 TrackNetV2·V3「未确认」内容的重新查证。 系列「阅读视觉模型 2」第 9 篇。从这里开始是「体育」主题。
目录
- 1. 难点所在:三种不平衡
- 2. 像素不平衡:如何改变损失函数
- 3. 时间不平衡:如何展示帧
- 4. 条件不平衡 1:遮挡(TOTNet)
- 5. 条件不平衡 2:模糊(BlurBall)
- 6. 论文数据
- 7. 局限性
- 8. 与我们项目的关联
- 参考文献
1. 难点所在:三种不平衡
TT Score 第 2 篇已经详细记录了「为什么难」,这里只搬运要点。在缩减为 512×288 的帧中,乒乓球直径只有 3 个像素左右,在曝光时间内会拖影成球体直径数倍的长度,并且经常被手和球拍遮挡。从学习的角度来看,这就转化为了三种不平衡。
- 像素不平衡:热力图中的几乎所有格子都是「非球体」。
- 条件不平衡:大部分训练数据都是清晰可见的球体,被遮挡的球、拖影的球以及静止的球非常罕见。然而,错误往往就发生在这些罕见的情况下。
- 时间不平衡:球的位置在每帧之间变化,如果只看单张图像,是无法分清球和日光灯的。
下面的谱系可以看作是一部逐一处理这三种不平衡的历史。
2. 像素不平衡:如何改变损失函数
直接计算:懒惰预测的诱惑
code/09_ball_labels.py 用绘制了在 512×288 热力图上半径为 2.5 个格子的球体圆盘(WASB·TrackNetV3 的标签大小)。
[1] 공 원판(반지름 2.5) 칸 수 20 / 전체 147,456 = 0.0136%
在 1 万个格子里有 1.4 个是球体。在这样的问题中,模型最先学会的是 回答「任何地方都没有球」。光凭这一点就能猜对 99.99% 的格子。我们对比了回答「全都是 0.01」的懒惰预测与在球体位置涂上 0.6 的预测之间的损失。
게으른 예측 공을 맞힌 예측 차이(학습 신호) 차이 / 게으른 손실
BCE 0.010674 0.010118 0.000555 5.2%
WBCE 0.000613 0.000012 0.000601 98.0%
게으른 예측의 손실 가운데 「공 아닌 칸」 몫: BCE 94.1%, WBCE 0.2%
在普通的二元交叉熵(BCE)中,懒惰预测 94% 的损失是 由已经猜对的「非球体格子」的微小损失累积而成的。即使猜中了球,损失也只能减少 5% 左右。学习信号被背景噪声淹没了。
TrackNet(2019):256 级分类
最初的 TrackNet 是通过 256 类分类进行训练的,即在热力图的每个格子中选择 0–255 的亮度之一。标准答案是画在球心上的、已放大到 0–255 的 2D 高斯分布图(σ² = 10)(论文)。输入 3 帧,输出最后一帧的 1 张热力图。
TrackNetV2(2020)·V3(2023):类似焦点损失的加权 BCE
从 V2 开始,损失函数发生了变化。我们在后续论文和 V3 官方代码中确认的公式如下(未能打开 V2 论文正文)。
WBCE = −[ (1 − p)² · y · log p + p² · (1 − y) · log(1 − p) ]
对于已经猜对的格子(在非球体格子里 p 接近 0),会乘以 p² 使得损失几乎变为 0。 减弱简单格子的声音 是核心所在,这与计算机视觉领域的焦点损失(focal loss, γ=2)形式相同。在上面的计算中,WBCE 将「非球体格子」的占比从 94% 降到了 0.2%,并且在猜中球体时损失减少了 98%。现在,相同的差值(0.0006)能够左右整个损失了。
V2 还将输入 3 张图改为 一次性输出 3 张图(3-in-3-out),大幅提升了吞吐量(摘要:2.6 → 31.8 FPS)。V3 则将每个比赛预先计算好的 背景(各帧的中位数) 一同输入,使得更容易找出「与背景不同的东西」,并将标准答案绘制为半径 2.5 的二元圆盘(官方代码)。对于丢失球体的区间,会通过一个专门训练的小型网络(InpaintNet)来填补,该网络在故意遮挡轨迹坐标后进行填补学习。
WASB(2023):仅对困难样本使用平滑标签
WASB 在小型 HRNet(自始至终保持球体分辨率的网络)中 使用质量焦点损失。起初使用二元圆盘标准答案进行训练,从第 20 个 epoch 开始, 仅挑选出位置没对准的训练样本 ,将标准答案改为实数值高斯分布(边缘最小值为 0.7)并继续训练(HLSM,论文)。这就相当于:对容易猜对的样本用锋利的标准答案教学,对困难的样本则用「大致在这个附近」的宽容标准答案教学。在没有预训练的情况下,从头开始训练了 30 个 epoch。
在推理时,通过 0.5 阈值切割热力图来寻找区域,并使用热力图值加权的中心作为位置。并且附加了一个简单的在线追踪:丢弃与前几帧预测位置距离太远的候选(论文)。此后处理代码可在 TT Score 第 2 篇中找到。
3. 时间不平衡:如何展示帧
| 模型 | 输入 | 使用时间的方式 |
|---|---|---|
| TrackNet | 3 帧 → 1 张 | 按通道堆叠并在第一层中混合(第 6 篇中的「早期融合」) |
| TrackNetV2 | 3 帧 → 3 张 | 同上。输出也是每帧一张 |
| TrackNetV3 | 帧 + 背景 | 单独告知「静止的东西」。曾担心接近静止的球会被当成背景抹去,但实测后发现,恰恰相反,它找几乎静止的球找得最好(第 8 节) |
| TrackNetV4 | 帧 + 运动图 | 对黑白帧差分的绝对值施加带有 2 个学习参数的正规化,并乘以注意力图 |
| TOTNet | 5 帧 | 在每帧的 2D 卷积后通过 3D 卷积来混合时间维度 |
| TrackNetV5 | 3 帧 + 方向图 | 将差分分为 + 方向和 − 方向(朝哪个方向运动)输入,由小型 Transformer 以残差形式修饰初版热力图 |
V4 和 V5 的运动图是对第 5 篇中光流(optical flow)的一种非常廉价的模仿。光流计算的是「往哪里移动了多少」,而差分只看「哪里发生了变化」。这一系列的主张是,对于小球来说,这就足够了。V5 在训练时对初版热力图施加了 10% 的 Dropout,以防止修饰阶段直接照搬初版(论文)。
4. 条件不平衡 1:遮挡(TOTNet)
TOTNet(2025)正面应对被遮挡的球。在训练中改变了三个方面(论文,部分数值见官方代码库)。
- 人为制造遮挡。 用周围的平均颜色覆盖目标帧的球体区域,以模仿被遮挡的球。同时随机覆盖其他帧的区域,防止模型通过寻找「被覆盖的痕迹」来投机取巧找球。
- 根据可见度采用不同的标准答案和权重。 可见或部分遮挡的球采用单像素标准答案, 完全遮挡的球采用扩散的高斯分布 标准答案,画面外则没有标准答案。损失是对 x·y 1D 分布(与 TTNet 形式相同)施加的 BCE,并根据可见度等级乘以相应的权重(代码库示例 [1, 2, 2, 3]:越遮挡权重越重)。
- 5 帧 3D 卷积。 能够从前后帧中连接球的轨迹来填补被遮挡的帧。
5. 条件不平衡 2:模糊(BlurBall)
BlurBall(2025, CVPRW 2026)的核心思想在于标签。
- 在拖影的正中心打位置标签。 不是拖影痕迹的前端(最近的位置),而是中心。中心对应曝光的中点时间,是恒定的。拖影的半长和角度也一同被标了标签(26 个在线视频,64,119 帧,62% 的帧包含拖影)。
- 将标准答案热力图扩展到整个拖影线段。 不是球心的一个点,而是沿着拖影线段涂抹标准答案。WASB 的损失和困难样本处理(HLSM)保持不变,只是将平滑的标准答案扩展成了线段。
- 拖影的长度和角度不进行单独回归。而是对切割热力图得到的区域进行主成分分析(PCA)来提取(论文)。
示例的最后一部分通过思想实验展示了为什么「中心」作为标签很好。在球速 20m/s、曝光 1/120 秒(拖影约 17cm)的情况下,如果让一个人仅凭单帧画面去指出「拖影的前端」,会分不清哪一边才是前端。
한 장만 보고 「끝점」 을 찍으면 앞뒤를 헷갈려 오차 표준편차 8.3cm, 「가운데」 는 방향과 무관해 0cm
前后傻傻分不清楚的假设虽然有点极端,但「中心」即使不知道方向也依然在同一个位置这一点,与假设无关,始终成立。
6. 论文数据
由于数据集、运动项目和判定距离各不相同, 切勿在不同表格之间进行横向比较。 请仅在同一张表格内部进行对比。
| 模型 | 数值(论文) | 条件 |
|---|---|---|
| TrackNet | 单帧 F1 92.5 → 3 帧 98.2,未混合比赛的 10 折交叉验证 F1 84.3 | 网球单场比赛 20,844 帧随机 7:3 划分,误差在 5px 以内 |
| TrackNetV2 | 新比赛测试 Acc 85.2 / P 97.2 / R 85.4,31.84 FPS(输入 3 张输出 3 张的版本) | 羽毛球 18 场比赛 55,563 帧(摘要·学会记录 ICPAI 2020。正文收费无法打开,测量 GPU 未确认。V3 论文引用原 V2 准确率为 87.72%) |
| TrackNetV3 | Acc 97.51, F1 98.56, 25.11 FPS | 羽毛球测试 3 场比赛 29 个回合,288×512,4px(官方代码库·论文)。FPS 为 8 帧集成值,若去掉集成则在 75 FPS 以上。代码库和论文中均未提及 GPU。同表中 V2 的 Acc 为 94.98 |
| TrackNetV4 | 羽毛球 V3 准确率 95.7 → +运动显著图 96.4 | 基于 4px。在网球比赛级别划分中也 +0.6 |
| WASB | F1 网球 95.6 · 羽毛球 93.1 · 足球 88.2 · 排球 88.0 · 篮球 82.6 | 4px,参数量 150 万 |
| TOTNet | 乒乓球 (TTA) 完全遮挡 RMSE 37.30 (WASB) → 12.31,光流增强版 7.19. OpenTTGames 准确率 0.84 (WASB) → 0.97 | 5px(完全遮挡为 10px)。868 万参数,28.08 FPS(光流版 12.19),未列出硬件 |
| BlurBall | 乒乓球 F1 96.52 (WASB 96.00),79 FPS,拖影误差长度 1.5px · 角度 6.5° | 4px,149 万参数,推测为桌面级 GPU |
| TrackNetV5 | F1 0.9859 (V2 0.9677) | “TrackNetV2 数据集” 4px。1,477 万参数,数据中心推理 GPU 上约 114 FPS。正文与结论中的运动项目表述不同 |
TrackNet 的“随机帧划分 98.2 对比赛分离交叉验证 84.3”是对整个领域的警告。 如果同一比赛的相邻帧同时进入训练和测试,分数就会虚高。 这就是 V4 论文指出这一点并制定新划分规范的原因。
7. 局限性
- 判定距离 4–5px 是基于 512×288 分辨率。 换算成 1080p 也就 15 个像素左右,在球桌上只有几厘米。它是否足以区分弹跳的“界内/界外”需要另行评估。
- 训练视频与测试视频的重叠。 BlurBall 的 26 个训练视频列表未公开,因此不清楚是否与 OpenTTGames 重叠(TT Score 2 篇)。不能将球检测质量直接等同于泛化性能。
- 实时与录像。 V3 的轨迹填补需要未来帧。TOTNet 公开代码的默认设置是预测 5 帧窗口的 最后一 帧,从而在没有未来帧的情况下运行(也有查看前后帧的设置,我们在测试中确认其与最后一帧相符),但计算量很大。在 8GB 级 GPU 上,单个窗口耗时 259.5ms。
8. 与我们项目的关联
- 实测见第 2 篇。 TT Score 以 BlurBall 为基础,在 OpenTTGames 的 7 个测试比赛中直接测量了精度 0.982、召回率 0.979,弱点(静止球 0.790、遮挡球 0.863),服务器 GPU 3.4ms/帧,以及在 OpenTTGames 之外的性能下降。与 WASB、TrackNetV2 等对比模型的劣化条件结果也在该篇中(TT Score 模型解剖第 2 篇)。
- 遮挡依然是弱点。 遮挡球 0.863 正是 TOTNet 针对的场景。因此,我们将 2026-10-15 发布的乒乓球 (TTA) 权重直接应用于相同的测试(OpenTTGames 7 场测试比赛,3,483 张图片,5px),结果与球员重合的球的召回率 0.403 甚至不到 BlurBall 的一半,整体召回率也只有 0.686。论文中 OpenTTGames 0.97 的准确率是使用 OpenTTGames 训练的模型所取得的数值,因此在其他球馆学习到的权重无法直接搬过来。相反,通过三个项目的转播学习到的 TrackNetV3(RacketVision 权重)在从未看过 OpenTTGames 的情况下,精度达到 0.983、召回率达到 0.981,达到了 BlurBall 的水平,并且对几乎静止的球识别得更好(0.956,而 BlurBall 为 0.790)。不过,重叠球的召回率为 0.823(TT Score 模型解剖第 2 篇第 6 节)。在这个实验中,“训练方法是否针对遮挡”的影响不如“使用了什么视频进行学习”大。由于 TTA 训练数据是研究专用的,其权重的的使用条件也需要仔细甄别。
- 蒸馏的教师候选。 前后帧结合的 V3 式填补,以及用我们的视频重新训练的 TOTNet 等模型,正适合第 4 篇中的“录像教师”角色。
TT 的一句话。 由于球只占屏幕的 0.01%,如果盲目教导,模型首先学会的只会是说“没有球”。减少简单格子权重的损失函数可以纠正这个坏习惯。自此以后,就是一场关于如何更频繁、更沉重地展示遮挡、拖影等罕见情况的较量。
参考文献
- Huang et al., TrackNet: A Deep Learning Network for Tracking High-speed and Tiny Objects in Sports Applications, AVSS 2019. https://arxiv.org/abs/1907.03698
- Voeikov et al., TTNet: Real-time temporal and spatial video analysis of table tennis, CVPR 2020 Workshops. https://arxiv.org/abs/2004.09927
- Sun et al., TrackNetV2: Efficient Shuttlecock Tracking Network, ICPAI 2020. https://doi.org/10.1109/ICPAI51961.2020.00023
- Chen & Wang, TrackNetV3: Enhancing ShuttleCock Tracking with Augmentations and Trajectory Rectification, ACM MMAsia 2023. https://doi.org/10.1145/3595916.3626370 · 仓库 https://github.com/qaz812345/TrackNetV3
- Raj et al., TrackNetV4: Enhancing Fast Sports Object Tracking with Motion Attention Maps, ICASSP 2025. https://arxiv.org/abs/2409.14543
- Tang et al., TrackNetV5: Residual-Driven Spatio-Temporal Refinement and Motion Direction Decoupling for Fast Object Tracking, arXiv 2025. https://arxiv.org/abs/2512.02789
- Tarashima et al., Widely Applicable Strong Baseline for Sports Ball Detection and Tracking(WASB), BMVC 2023. https://arxiv.org/abs/2311.05237
- Xu et al., TOTNet: Occlusion-Aware Temporal Tracking for Robust Ball Detection in Sports Videos, CVIU 2026. https://arxiv.org/abs/2508.09650
- Gossard et al., BlurBall: Joint Ball and Motion Blur Estimation for Table Tennis Ball Tracking, CVPR 2026 Workshops. https://arxiv.org/abs/2509.18387
- 示例代码与输出:
code/09_ball_labels.py,code/09_ball_labels.out.txt