状态:草案(2026-10-26),已反映实测。 标注为“论文”的数字是打开原始论文和官方仓库确认的值,其余数字是我们通过公开视频和合成图像亲自测量的值。手机现场视频的准确率尚未实测。文献目录中未能查阅到原文到底的,已在参考文献中如是说明。 编写规则:实测数据为基础,未能测出的标记为“未实测”。
目录
1. 导图:什么模型在哪里运行
自动判定的识别部分是几个模型和几个传统算法的组合。
| 位置 | 使用者 | 类型 | 训练 |
|---|---|---|---|
| 寻球 | BlurBall | 神经网络(149 万参数) | 使用作者权重原样 |
| 寻台 | EfficientTAM S → 基于颜色 | 分割模型 + 后处理 | 使用作者权重原样 |
| 球台顶点 | 冻结的 EfficientTAM 编码器 + 小型头部 | 神经网络(头部约 64 万) | 我们训练(2026-10-25) |
| 球台追踪 | 金字塔 Lucas–Kanade + RANSAC | 传统算法 | 无 |
| 画面 → 球台平面 | 单应性矩阵 | 几何 | 无 |
| 过滤假反弹 | 1D CNN | 神经网络(1.8 万) | 我们训练(2026-10-13) |
| “需要确认” | 逻辑回归 | 19 特征线性 | 我们训练(2026-10-14·16) |
| 事件与裁判 | 手写规则 | 规则 | 无(第 3 篇) |
| 姿态 | RTMPose | 神经网络 | 仅用于教练,不用于计分 |
| 声音 | — | — | 未输入引擎 |
本文将自上而下依次解释原理,并并排记录论文的思路与我们的用法。球和球台模型的脉络在前系列 第 2 篇·第 3 篇中有更详细的说明,因此这里将重申要点,并把重点放在 之后的变化与 我们训练的内容上。
2. 球:不猜坐标,绘制地图
为什么困难
乒乓球直径为 40mm。在缩减为 512×288 的画面中只有几个像素大,快速的球在单帧曝光期间会拉长成模糊的长条状条纹。球经常被球拍和身体遮挡,白球容易与白衣、灯光、墙面花纹混淆。
脉络:TrackNet → WASB → BlurBall
TrackNet(2019)[3] 展示了两种思路。首先,不直接用两个数字预测球的 (x, y),而是让网络在球可能存在的地方绘制隆起山丘的 热力图(heatmap)。卷积神经网络的结构对每个位置做出相同的判断,因此输出空间地图符合其结构,且凭借平滑的标签使得训练更加稳定。其次, 连续输入 3 帧 。单张图片无法分辨白点是球还是杂物,但三张图片就能看出运动的是球。
WASB(2023)[2] 以适用于多种运动的基准线为目标,结合了三点:全程保持分辨率的小型 HRNet 系列主干网 [16]、随距离衰减的稀疏热力图与 quality focal loss,以及通过匀加速运动模型预测下一个位置并丢弃远离候选的推理方式。
BlurBall(2025–2026)[1] 是我们的球模型。核心在于标注标签的位置。传统数据集将模糊球的 前端作为球的位置,但论文指出这具有不对称性,且丢弃了包含在模糊中的速度信息。因此,该模型将球的位置标注在 模糊的中点,并同时标注模糊的方向 (θ) 与半长度 (l) 作为标签。正确的热力图也不仅是一个点,而是覆盖连接模糊两端的整个条纹。其结构是在 WASB 的 HRNet 主干网上增加了通道注意力机制(Squeeze-and-Excitation)。
用阈值(论文中为 0.7)切割输出热力图以形成连通域,对这些像素进行主成分分析(PCA),主轴方向即为模糊角度,主轴上投影范围的一半即为模糊长度。置信度是连通域值的 平均值。因为如果使用总和,较长的模糊会占优势(论文)。模糊向量是曝光时间内的速度线索,论文报告称,在对前 3 帧拟合二次多项式时加入该向量,轨迹预测的平均误差从 84.4px 降低到了 53.0px(论文)。我们目前尚未将模糊方向用于判定。要将模糊转换为速度,必须知道相机的曝光时间,但手机的曝光时间可能会随每帧变化。
我们的用法
- 权重 5.8MB,输入为 3 帧 512×288 帧的窗口。实时路径仅使用窗口 最后一帧 的热力图(为了不等待未来的帧)。
- 作者权重 不经微调 原样使用。读取时校验 sha256 并在
weights_only=True中读取(第 1 篇)。 - 如果存在多个候选,则选择紧邻上一球位置、在 512 画面基准下 80px 范围内的候选中分数最高的一个。这是对 WASB “从预测中丢弃远离的候选”极度简化的版本。
- 在寻球前,每帧将亮度 0.5% 和 99.5% 的分位数扩展到 0 和 255(
TTSCORE_BRIGHTEN,无需训练)。在合成“昏暗”条件(亮度 ×0.25 + 噪声)下,实时路径直接测试 7 场比赛的正确数从 34 提升至 51(McNemar p=0.0001),在干净视频中为 53 对 54,损失不显著(2026-10-14,院长 E18)。笔记本电脑 CPU 上的计算耗时为中央 1.6ms。实际昏暗乒乓球馆手机视频的收益尚未实测。
实测
| 测量 | 条件 | 值 |
|---|---|---|
| 精确率 / 召回率 | 公开测试 7 场,60fps,标记 3,483 帧,512×288 半径 5px,服务器 GPU(24GB 级)(2026-10-11) | 0.9817 / 0.9785,位置 RMSE 0.594px |
| 速度 | 同 GPU,fp32,单窗口 | 3.42ms/帧 |
| 其他实验室视频 | 实验室 3 场,侧面 / 斜向 | 0.929 / 0.860, 0.894 / 0.820 |
| 国际转播 | 正确答案不是人工标注而是自动追踪结果(因此称为“一致度”) | 0.815 / 0.722 |
公开测试赛几乎完美的原因之一需要谨慎阅读。由于 BlurBall 的训练视频列表未公开,我们不知道它是否与我们用于测试的公开比赛重叠。因此,这些数字不能作为泛化性能来解读,而是连同其他实验室及转播视频的数字一并记录。
微调版本:关闭的原因
为了增强对复杂背景和昏暗条件的适应能力,我们以生产权重作为教师模型,制作了自蒸馏微调版(clutter-v1)(院长 E31)。混合了 20% 干净视频、40% 复杂背景、昏暗、低分辨率、模糊、JPEG、抖动以及 30fps,在笔记本电脑 GPU(8GB 级)的一次性 Pod 中训练了 69 分钟、8,934 步。在合成退化环境下,球的召回率在强退化下从 0.752 提升至 0.949,在昏暗下从 0.685 提升至 0.924。然而,由于在实际路径测试中未能满足开启条件之一(“漏掉的错题不得多于生产环境”,10 比 8),故 将其关闭。
3. 球台:寻找、确认与追踪
要判断球“落在了哪一边”,就需要球台的四个顶点。球台的处理分为三个阶段。比赛开始前 寻找一次, 确认找到的矩形是否确实是球台,之后每一帧 进行追踪
图:寻台链条、与顶点模型合并、光流追踪
寻找链条live/tablemodels.py寻找是一个按顺序尝试多个模型、失败则转入下一个模型的链条( sam3 → efficienttam → color )。实时工作进程的设置为 EfficientTAM S → 基于颜色 ,但由于下述原因,首个栏目的 SAM 3 实际上并未被调用(2026-10-25 生产工作进程状态确认,院长 E44)。录制回放工作进程为 efficienttam → sam2 → color 。
SAM 2[4] 是一种逐帧输入并进行分割的模型。每帧的图像编码器运行一次,当前帧特征与 记忆库(最近的帧以及用户提供点与框的帧的特征)进行交叉注意力计算,从而在记住过去分割物体的同时观察当前帧。它还有一个独立的遮挡头,用于预测物体是否在当前帧中可见。在我们的用法中,核心是提示分割:“如果在球台位置打几个点,就会输出该物体的掩码”。
EfficientTAM[5] 是 SAM 2 的轻量化版本。论文认为 SAM 2 较重的原因在于分层图像编码器和记忆模块,因此将编码器替换为无分层的普通 ViT(Tiny/Small),并利用记忆中的空间邻近 token 几乎相同的性质,对键和值进行 2×2 平均池化,将 token 数量减少到 1/4。论文报告称,其准确率与 SAM 2 (HieraB+) 相似,在 A100 上快约 2 倍,参数少约 2.4 倍(论文)。尺寸分别为 Ti 1,800 万、S 3,400 万。由于论文摘要和正文表格中的数字不一致,手机上的速度在此不作转述。
SAM 3[6] 是像“table tennis table”这样的 简短文本寻找与该概念相对应的所有物体。其特点是将“该概念是否在这张图里”这一presence token拆分为“有吗?”和“在哪儿?”两个独立部分。由于不需要人工打点,这是最适合首帧自动初始化的原理。然而, 我们目前还无法使用它。
- 权重采用需要获得访问批准才能获取的方式(门控机制),在批准前无法获取。
- 工作者镜像使用的是 Python 3.11,而 SAM 3 要求 3.12 及以上版本,因此在加载阶段失败并跳转到下一格。这就是第一篇中“不烘焙镜像而直接加载代码”的部署方式所付出的代价。
- 它拥有 8.48 亿参数,体量较重。比起实时循环,它更适合用于初始化或辅助标注。
- 就条款而言,许可证(SAM License)并未阻止商业使用,但与 Apache 和 MIT 不同,它附加了单方面更改条款、诉讼时终止、禁止反向工程以及出口管制等条件。若要在商业服务中使用,必须首先进行法律审查。
基于颜色是在没有 GPU 时的替代路径。它通过球台顶面的颜色和白色线条来寻找矩形。服务器端是 ttscore/tablefind.py,浏览器端也有一份相同思路的副本。
| 模型 | 无需手动抓取,四个顶点全部在 20px 以内 |
|---|---|
| EfficientTAM S | 57% |
| EfficientTAM Ti | 53% |
| SAM 2.1 tiny | 45% |
| 基于颜色 | 9% |
条件:公开数据集的查找条件 7 × 103 张 = 721 张,相同的后处理,2026-10-13(docs/tt/PERFORMANCE.md 2.12)。因此,运行时的第一格是 EfficientTAM S。
重新检查找到的矩形
分割模型找到了“某物”,并不保证那就是一张乒乓球台。通过七项检查重新审视找到的矩形(ttscore/tablecheck.py,检查名称包括 color·facing·tall·flat·uneven·spill·noline)。例如:顶面颜色是否像乒乓球台、矩形的方向与高度及扁平程度是否像乒乓球台、边长是否均匀、是否溢出球台之外、是否能看到白线等。只要命中其中任何一项,置信度就会降至“确定”阈值 0.55 以下,屏幕会向用户请求“请点一下”(轻触乒乓球台一下)或“请手动指出”(直接指出四个顶点)。
追踪:金字塔 Lucas–Kanade 与 RANSAC
查找是一项耗时 1-2 秒的繁重任务,无法在每一帧中进行。为了确保即使在手机晃动或转播镜头移动时也不会丢失顶点,在找到后会 使用光流进行追踪(live/tablecv.py).
- Lucas–Kanade[9]:假设“小窗口内的亮度即使移动也保持不变”,通过图像的空间梯度迭代求取两幅图像的偏差。由于这是针对单个窗口的小最小二乘问题,因此速度很快。
- 金字塔[10]:由于小窗口无法捕捉大幅运动,因此从将图像缩小为多级金字塔的最顶层求出大致位移,并向下传递到低层进行精细调整。我们的设置为窗口 21×21,金字塔最多到原图上方三层。
- 优质特征点[11]:梯度矩阵小特征值较大的点(角点)更容易被追踪。首先在将乒乓球台矩形扩大 12% 的位置(白线、球网、角点、球腿)进行选择,如果因表面无纹理而点数不足,则从整个屏幕中进行补充。这是因为手部晃动会导致整个屏幕一同旋转。
- 前后往返检查与 RANSAC[14]:必须丢弃像运动员和球这样单独运动的点。如果将从“基准 → 当前”移动的点再次移回“当前 → 基准”后偏差超过 1.5px,则将其丢弃,并使用剩余的点求取 RANSAC 单应性矩阵(3px 阈值)。
- 防止累积误差:如果将帧与帧之间串联起来,误差会不断累积,因此始终 直接从基准画面 转换到当前帧。上一帧的结果仅用作初始估计。
- 切片与找回: 通过缩小到 64×36 的画面的差异来检测画面转换(切片),当切片后返回相同的相机画面时,利用已保存的基准画面(最多 4 张)的 ORB 特征,无需模型即可直接匹配。
稠密光流 Farnebäck[12] 仅用于衡量整个屏幕运动量的实验,对于乒乓球台追踪而言,稀疏的 Lucas–Kanade 才是正确的选择。因为运动的物体只有一个矩形,且必须在每一帧中都快速处理。
合成实验表明了为什么追踪如此重要(2026-10-13,馆长 E12)。如果直接使用屏幕上的球坐标,在摄像机平移和缩放的视频中,测试比赛的准确率从 50 崩塌至 24-40,而如果通过正确的单应性矩阵还原回平面,则完全恢复了正常。更有趣的发现是, 比起准确度,抖动才是破坏判定的元凶。每一帧单独估计出的单应性矩阵仅凭 2px 的抖动就丢失了 5-10 个回合,但在时间上连续(传播型)的估计即使在 5px 误差下也表现得与上限一样好。弹跳判定观察的是画面 y 轴的 V 字形,因为帧与帧之间的抖动会制造出虚假的 V 字形。因此,在实际运行中通过光流(60Hz)在每一帧中进行平滑追踪。
从四个顶点到乒乓球台平面:单应性矩阵
平面上的点在摄像机画面中通过一个 3×3 矩阵 H 进行转换[13]。除去缩放比例后,H 具有 8 个自由度,由于一对对应点提供两个方程,因此 4 对点即可确定该矩阵(四点中不能有三点在同一条直线上)。如果用屏幕上的四个顶点 ↔ 实际乒乓球台的四个顶点(2.74m × 1.525m)来构建 H,就可以将弹跳瞬间的球转换为以米为单位的乒乓球台坐标(ttscore/table.py).
这里有两个陷阱。
- 它仅适用于平面上的点。 空中的球不在平面上,因此仅在球接触乒乓球台的瞬间使用。在弹跳瞬间,球心也比接触点高出 20mm 的半径,因此会进行相应补偿。
- 仅凭四个点无法知道哪一条边是长边。 任何矩形都可以通过两种方式转换为长方形。如果有人类或数据告知最后一条边,代码就会使用该边;如果没有,则使用在乒乓球台两侧分别点下的点;如果连这也没有,则通过两个消失点的正交条件求出焦距,计算实际长度比来确定。
4. 我们训练的三种模型
从这里开始,不再使用作者的权重,而是我们自己训练的模型。这三个模型都很小,并且都在“过滤或确认规则或大模型已经完成的工作”的位置上。
① 过滤虚假弹跳:1.8 万参数 1D CNN
问题。 第 3 篇中的裁判系统只要有一个弹跳判断出错,顺序就会整体错乱。规则所产生的弹跳中,夹杂着将击球误读为弹跳、过网的球发生晃动等虚假情况。
模型。 这是一个观察球轨迹短窗口的小型 1D 卷积神经网络(ttscore/bounceveto.py). 输入是判定帧及其前 16 帧的 9 个特征(是否看到球、检测置信度、网基准 x·y、速度、是否在球台顶面上、是否在网带内、是否在端线外),在经过三个卷积层后,小型 MLP 输出弹跳、击球和过网的概率。参数量为 18,179 个。
使用方法:仅用于过滤。 利用该模型对弹跳进行 不重新创建, 仅丢弃规则产生的弹跳中正负 2 帧内概率均低于 0.3 的弹跳。这一决策源于实验。如果仅让模型来拍摄弹跳,在不使用前瞻(未来帧为 0)时会崩塌(无法看到弹跳刚结束的画面,导致概率向前扩散),而对于过滤而言,由于规则已经建立好了位置,0 前瞻就已经足够了(馆长 E01)。因此延迟增加为 0,在笔记本电脑 CPU 上每帧计算耗时约 0.1ms。
训练。 通过球轨迹以及弹跳、球网、击球标记,以 60fps 偶数帧 + 30fps 副本 + 对坐标进行 15%·30% 遮挡的副本混合进行学习。使用笔记本电脑 CPU 进行了训练(2026-10-13,馆长 E01·E05)。混入 30fps 副本的原因是,最初的版本在 30fps 输入下反而崩塌了 6–11%p(分布外)。混入后的版本在 30fps 下不再有性能损失。此后,学习型模块始终混入 30fps 副本的规则(馆长规则 R2)便由此产生。
实测(保持实时路径不变,公开测试 7 场比赛 × 退化 11 条件,回合×条件 627,2026-10-13,馆长 E08):
| 正确 | 未经确认的错误 | 需要确认 | |
|---|---|---|---|
| 仅规则 | 496 | 50 | 353 |
| 规则 + 过滤 | 527 | 34 | 302 |
| 对照组:使用检测置信度 0.7 进行过滤(无学习) | 446 | 66 | — |
在成对比较中为 +4.9%p(由于在 11 种条件下重复计算了相同的 57 个回合,因此并非独立,区间较为乐观)。对照组非常重要。在干净的开发比赛中,“丢弃检测置信度低的弹跳”取得了与学习过滤相同的分数,但在实际退化条件下却完全崩塌。因为当环境变暗时,即使是真正的弹跳,检测置信度也会随之下降。 学习过滤的好处并非来自“丢弃置信度低的弹跳”,而是来自观察轨迹的形状。
我们还发现了一个局限性。如果弹跳附近被遮挡导致 V 字形消失,通过填充进行插值的轨迹中概率会变得很低,从而丢弃了真正的弹跳(馆长 E11 的遮挡子集 41 → 38)。因此,如果在弹跳附近有看不到球的样本,就会暂停过滤(馆长 E17)。
② 修正“需要确认”:19 特征逻辑回归
正如在第 3 篇中所看到的,“置信度 < 0.6”无法区分错误(AUC 0.51)。我们训练了一个逻辑回归模型,用引擎在判定瞬间已经知晓的 19 个数值来输出 判定错误的概率(ttscore/reviewcal.py).
逻辑回归的好处有两个。训练数据(通过各种退化条件运行的判定)不需要太大,并且可以将结果向人类解释。线性模型可以直接读取每个特征“将结果向错误方向推动了多少”,从而直接从这些贡献中生成芯片的理由(“丢失了球”、“回合很长”)。每次判定的计算仅为一个内积。
训练材料是按原样运行实时路径的判定以及该回合的胜者正确答案。v2 在相同的特征中加入了 标签修正。这是因为在正确答案标签将多个回合捆绑为一个的地方,引擎正确的判定被误学成了“错误”(馆长 R7·R8,E25)。阈值是通过学习比赛单位的 5 折交叉验证选出的,v2 的阈值是 0.0442。结果见第 3 篇第 5 节的表格。未经确认的错误(包括幽灵球)从 20 减少到 8,需要确认的次数从 450 增加到 497。
需要注意的一点。由于修正是在 球模型生成的判定分布上学习得到的,因此如果更换球模型,也必须更换修正模型。如果在微调的球权重上直接套用 v2,未经确认的错误从 14 增加到 28(馆长 E31)。因此,我们为其专门学习了对应的 v3。
③ 乒乓球台顶点模型:冻结的编码器与小型热力图头部
问题。 2026年10月25日,我们在 35 张新图片(26张联赛转播图、4张4K球友会侧面图、2张1934年老胶片图、3张实验室对角线图,全部为可商用公开视频)上测试了生产环境的查找链路在何处失败,结果是: 无需点选且确定&正确 0/35 。分析原因发现,在侧面和对角线视角下,网会把顶面切开,导致分割掩码几乎总是 半个,算法会把得分更高的大面积地板和墙壁掩码往上提。我们测试了七种后处理修补方法(网格提示、扩展下限、白线阈值、合并半边、半边检查等),但没有一种能够满足“在任何地方都不变差、并在新批次中变好”的标准。这是掩码拼接矩形方式的局限性。
想法。 不通过掩码,而是 直接预测顶点 。就像人体姿态估计为每个关节绘制热力图一样[15][16][17][18],我们用热力图输出乒乓球台的四个顶点和球网的两端。
结构。 冻结 生产环境查找链路已经在使用的 EfficientTAM S 的图像编码器(相同权重,Apache-2.0),并在其 64×64×256 特征之上堆叠一个包含几层卷积的小型头部(约 64 万参数),输出两张 128×128 的热力图。一张对应四个顶点,另一张对应球网两端。由于球台是对称的,我们不给顶点命名(如左上等),而是按顺时针顺序读取四个峰值。损失函数是针对 σ 4px 高斯真值的加权 MSE。
为什么要冻结。 实际训练图片只有 12 张。有分析指出,当预训练特征很好且训练条件与使用条件不同时,如果在头部处于乱猜的初期连同主干网络一起训练,可能会扭曲预训练特征,导致分布外性能变差[19]。由于该论文主要讨论分类任务的线性头部,我们仅将其作为原理层面的依据。这里也有实用的考量:生产环境已经拥有相同的编码器权重,无需下载新的权重或包。我们尚未进行解冻编码器的实验。
训练数据:合成 80%,真实 20%。 仅使用可商用数据。
- 合成:使用我们的代码渲染乒乓球台(规格 2.74 × 1.525 × 0.76m,球网 15.25cm),并随机组合相机(距离 2.4–15m,视场 35–100°,高度和倾斜度)、光照、模糊、噪点、JPEG、黑白、地面、背景墙、相邻球台和人物面板。没有使用外部图片。由于渲染器准确知道顶点坐标,因此无需手动标注。球网端点标注定义为球网与长边相交的 球台高度的点(长边的中点)。
- 真实:来自 2015 年斯洛文尼亚联赛转播(Wikimedia Commons,CC BY 3.0)的 与测试区间不重叠的 12 张图片。通过缩放、平移、旋转、颜色和左右翻转进行了数据增广。
- 排除的数据:与测试使用的球友会视频属于同一球馆的其他视频、与测试的实验室视频属于同一实验室/相机的其他视频。虽然做好了标注,但没有放入训练集中。如果放入,测试结果就会过于乐观。非商业数据集仅用于测试。
这种设计遵循了域随机化[20][21]的思想。其理念是,如果刻意将渲染变得极其不切实际并大幅改变,真实视频就会成为模型见过的无数种变形中的“又一种变形”。仅使用合成数据训练并辅以少量真实数据的流程也是 [21] 所展示的方向。在乒乓球领域,已有研究仅用真实标签训练 2D 球/球台检测,而 2D → 3D 轨迹则仅用符合物理规律的合成数据训练[22]。
训练配置为 2,500 轮 × 批大小 12(= 3 万张图片),AdamW 优化器,固定随机种子,在笔记本 GPU(8GB 级别)上,单次运行的 Pod 大约各耗时 20 分钟(共 5 个)。未进行挑选,直接使用了最后的权重。
解码:不要相信峰值大小,要相信几何学。 最初的解码方案(预注册:四个顶点峰值的最小值 ≥ 0.5 即为确定)被否决了。通过合成数据学到的峰值大小在真实图片中几乎总是超过 0.5。这就是 过度自信。在许多情况下,三个顶点是正确的,而第四个顶点贴在了记分牌或球网柱上。
因此,我们设计了第二种解码方案 (d2)(ttscore/tablekp.py)。从顶点热力图的前六个峰值中选出四个来构建凸四边形,仅凭该四边形计算 球网端点应当在的位置,并将其与球网热力图的峰值进行匹配。
- 四边形两条对角线的交点,即使在透视投影下也是真实乒乓球台的 中心(射影中心)。
- 延长两条长边相交得到的消影点与该中心连成的直线,就是透视投影下“球网放置的直线”。
- 该直线与两条长边的交点就是球网端点应当在的位置。
由于球网和顶点是 分别输出的热力图,两者在几何上吻合是独立于峰值大小的依据。确定的条件是“峰值最小值 ≥ 0.5 且球网端点距离 ≤ 12px”。12px 不是在测试集上调出来的,而是在 验证集(300张合成图 + 4张未参与训练的真实图)上从 8、12、16、24 中挑选的。验证集中合成数据的确定&错误从 54–68 降到了 5–9。
该计算仅使用乒乓球台平面上的点。球网顶端高出平面 15.25cm,因此不能放入单应性矩阵中,但我们的球网端点标签是球台高度的点,并且 它不参与单应性计算,仅用于检查以及确定“哪条边是端边” 。单应性矩阵仅由四个顶点计算得出。
合并:策略 D。 顶点模型并不替代原有的查找功能,而是结合两者使用。
| 原有查找 | 顶点模型 | 结果 |
|---|---|---|
| 确定 | 确定 | 如果顶点在 20px 范围内则为确定(使用顶点模型坐标),如果不一致则提示人工“请轻触一下” |
| 否 | 确定 | 以顶点模型结果为准判定为确定 |
| 确定 | 否 | 保持原有结果不变 |
| 否 | 否 | 保持原有结果(不确定)不变 |
采用条件在查看结果前已确定并写入档案(预注册)。要求在 35 张新图片中确定&正确增加,且在任何批次中确定&错误都不能增加(固定随机种子的中位数)。
实测:研究测试(测试 204 张,确定&正确 / 确定&错误,2026-10-25,档案 E43, docs/tt/PERFORMANCE.md 2.19):
| 批次 | 张数 | 生产环境原有 | 顶点模型 + 策略 D(固定随机种子中位数) |
|---|---|---|---|
| 公开批次(非商业,仅用于评估) | 142 | 67 / 15 | 79 / 15 |
| 按拍摄条件划分的 27 个片段 | 27 | 4 / 3 | 7 / 3 |
| 联赛转播(与训练区间相同转播的其他区间) | 26 | 0 / 1 | 4 / 1 |
| 4K 球友会 · 老胶片 · 实验室对角线 | 9 | 0 / 3 | 0 / 3 |
| 总计 | 204 | 71 / 22 | 89 / 23 |
仅使用合成数据训练的版本(采用相同的解码)在公开批次上的确定&正确更多 (+24),但确定&错误也有所增加,因此未能满足条件。可以说是 12 张真实图片压制了过度自信。使用生产环境代码重新运行的结果(种子 2 权重,仅头部 2.5MB)为 89 / 22,单次查找在笔记本 GPU 上多耗时 40ms。
坦诚地列出三个局限性。
- 测试了两次。 d2 解码是在查看了第一次解码的测试结果后设计的。虽然阈值是通过验证集挑选的,但设计本身受到了测试结果的影响。
- 收益集中在一侧。 35 张新图片的 4 个收益全部来自与训练区间相同的转播的其他区间,公开批次的收益则产生于侧面画面。4K 球友会、老胶片和实验室对角线的收益依然为 0。 现有数据未能证明能够泛化到其他球馆或其他转播。
- 标签不是由人工标注的。 12 张真实训练图片和 35 张新测试图片的顶点是由 AI 从业者在 2 倍放大网格中读取,被遮挡的远处顶点则是通过计算消影点标出的(大约 ±5px)。
实测:在生产环境中启用后(2026-10-25 夜间 – 10-26 凌晨,档案 E44)。2026-10-25,我们在生产环境实时工作流中启用了顶点模型。启用后,将 212 张测试图片以与相机记分牌相同的 JPEG 质量 70 发送给生产环境工作流,所有 212 个响应均记录了顶点模型已运行。我们完整模仿了界面流程(无需点选确定则结束,否则轻触一次,再不然则手动指定四个顶点),并使用包含正确答案的 3 个批次共 204 张图片进行了统计。由于无法关闭生产环境的基准对照组(顶点模型关闭状态),因此在笔记本 GPU 的临时 Pod 上使用相同的 JPEG 格式运行了相同代码。
| 指标(204张) | 关闭 | 开启 |
|---|---|---|
| 无需点选且确定&正确 | 61 | 84 |
| 无需点选且确定&错误 | 26 | 23 |
| 弹出“请轻触一下”的次数 | 117 | 97(−17%) |
| 进入“请直接指定”的次数 | 88 | 73 |
| 顶点模型增加的时间(服务器 GPU,预热后 211 次) | — | 中位数 25ms |
| 单次查找全过程(相同条件,包含测试连接) | — | 中位数 1.73 秒,p95 2.14 秒 |
并非只有收益。顶点模型新产生错误确定的情况有 5 起(最多 114px — 与训练区间相同的转播的其他区间),消除了 8 起,总数从 26 降至 23。仅看按拍摄条件划分的 27 个片段批次,确定&错误从 3 个增加到了 4 个。由于未触发关闭条件(确定&错误超过基准或出现错误),我们决定 保持开启状态。
这次对比中混杂了一些波动。基准对照组在不同的 GPU 上运行,在 204 张图片中,原有查找的置信度有 14 张与生产环境不同(GPU 差异)。此外,在 JPEG 70 质量下,原有查找的表现弱于无损图片(71/22 → 61/26),因此不能直接与研究测试的数字进行横向对比。我们没有在真实的浏览器中进行全流程点击测试,上表只是对界面流程规则的模拟。
5. 姿态与声音:未纳入的信号
姿态 (RTMPose):仅用于教练
RTMPose[7] 采用自顶向下的方法,先检测人体方框 (RTMDet),然后裁剪出每个人体估计姿态。头部使用 SimCC[8],将关键点位置问题转化为 x 坐标分类和 y 坐标分类 两个问题。其核心思想是将一个像素细分为多个格子,从而在低分辨率下也能获得亚像素级的精度。
TT Lab 仅将此模型用于 教练画面的精准分析(ttcoach/pose.py)。将其加入得分引擎的实验进行了两次,均被否决。
- 如果用姿态来消除边界误判,公开比赛 12 场比赛中局胜者的准确率从 93.1% 下降到了 87.6–92.0%(PERFORMANCE 2.9.5)。
- 如果将姿态结合到伪边界过滤中,在遮挡区间表现稍好一些,但并未超过仅使用规则的效果。最重要的是,姿态估计在 GPU 上每帧耗时 24.6–25.0ms,超出了新模块 5ms 的预算限制(档案 E11)。属于“无法实现实时”。
声音:未纳入引擎
球触碰球台的时间非常短,只有 1.3–1.8ms,因此声音能比视频帧间隔(30fps 时为 33ms)更精确地指示「何时」发生击球[23]。在干净的录音数据集中,我们的分类器也能以 99.3% 的准确率区分乒乓球和球拍的声音。但在实际训练场的录音中,我们未能确认其对得分效果的提升(PERFORMANCE 2.7·2.9.6,前系列 第 6 篇)。在干净录音中表现出的性能,在噪声和邻近球台声音的干扰下大幅下降。
因此,实时路径 不接收声音。 相机记分板在打开相机时不会请求音频(getUserMedia({audio:false})),录像分析也会直接丢弃声音。在我们本次的调查范围内,未找到结合视频、声音和姿态的乒乓球得分判定论文(附带说明:我们的搜索范围较窄)[24][25]。
6. 总结
- 球追踪使用的是 BlurBall,它属于「热力图 + 多帧 + 模糊中心」这一技术脉络的终点,我们直接使用了作者的权重。由于训练数据未公开,公开测试的数字不能直接解读为泛化能力。
- 乒乓球台是通过分割模型先定位一次,再通过七种方式进行复核,最后利用金字塔 Lucas–Kanade 和 RANSAC 在每一帧中进行跟踪。打破判定结果的往往不是顶点误差,而是 帧间抖动。
- 我们训练的集合都很小,它们的作用是 过滤或核对 规则和大模型的结果。分别是 1.8 万参数的过滤模型、19 特征的回归模型、64 万参数的头部模型。
- 顶点模型在运营中将「请轻触定位」的操作减少了 17%,但向其他体育馆的泛化能力尚未显现。适用于其他体育馆的商业化实际数据将是下一个课题。
乒乓小贴士。 顶点模型刚开始时坚信自己全对。于是我们让它再次确认「网端应该在的位置真的有网端吗」,它就变得谦虚多了。
参考文献
- T. Gossard, F. Radovic, A. Ziegler, A. Zell. "BlurBall: Joint Ball and Motion Blur Estimation for Table Tennis Ball Tracking." CVPR Workshops (CVsports), 2026. arXiv:2509.18387. 代码 MIT。
- S. Tarashima, M. A. Haq, Y. Wang, N. Tagawa. "Widely Applicable Strong Baseline for Sports Ball Detection and Tracking." BMVC, 2023. arXiv:2311.05237。
- Y.-C. Huang, I.-N. Liao, C.-H. Chen, T.-U. İk, W.-C. Peng. "TrackNet: A Deep Learning Network for Tracking High-speed and Tiny Objects in Sports Applications." arXiv:1907.03698, 2019。
- N. Ravi 等人. "SAM 2: Segment Anything in Images and Videos." ICLR, 2025. arXiv:2408.00714. 代码与权重 Apache-2.0。
- Y. Xiong 等人. "Efficient Track Anything." ICCV, 2025. arXiv:2411.18933. 代码与权重 Apache-2.0.(会议收录情况通过其他论文的参考文献确认,未看到会议单页原件)
- N. Carion, L. Gustafson, Y.-T. Hu 等人. "SAM 3: Segment Anything with Concepts." ICLR, 2026. arXiv:2511.16719. SAM License (2025-11-19)。
- T. Jiang, P. Lu, L. Zhang, N. Ma, R. Han, C. Lyu, Y. Li, K. Chen. "RTMPose: Real-Time Multi-Person Pose Estimation based on MMPose." arXiv:2303.07399, 2023。
- Y. Li, S. Yang, P. Liu, S. Zhang, Y. Wang, Z. Wang, W. Yang, S.-T. Xia. "SimCC: A Simple Coordinate Classification Perspective for Human Pose Estimation." ECCV, 2022. arXiv:2107.03332。
- B. D. Lucas, T. Kanade. "An Iterative Image Registration Technique with an Application to Stereo Vision." IJCAI, 1981, pp. 674–679。
- J.-Y. Bouguet. "Pyramidal Implementation of the Lucas Kanade Feature Tracker: Description of the Algorithm." Intel Corporation, Microprocessor Research Labs, 2000.(正文未能打开,仅确认了参考文献及 OpenCV 中的引用)
- J. Shi, C. Tomasi. "Good Features to Track." CVPR, 1994, pp. 593–600。
- G. Farnebäck. "Two-Frame Motion Estimation Based on Polynomial Expansion." SCIA, 2003, LNCS 2749, pp. 363–370。
- R. Hartley, A. Zisserman. Multiple View Geometry in Computer Vision, 2nd ed. Cambridge University Press, 2004. 第 2 章与第 4 章。
- M. A. Fischler, R. C. Bolles. "Random Sample Consensus: A Paradigm for Model Fitting with Applications to Image Analysis and Automated Cartography." Communications of the ACM 24(6):381–395, 1981。
- A. Newell, K. Yang, J. Deng. "Stacked Hourglass Networks for Human Pose Estimation." ECCV, 2016. arXiv:1603.06937。
- K. Sun, B. Xiao, D. Liu, J. Wang. "Deep High-Resolution Representation Learning for Human Pose Estimation." CVPR, 2019. arXiv:1902.09212。
- X. Zhou, D. Wang, P. Krähenbühl. "Objects as Points." arXiv:1904.07850, 2019。
- J. Tompson, A. Jain, Y. LeCun, C. Bregler. "Joint Training of a Convolutional Network and a Graphical Model for Human Pose Estimation." arXiv:1406.2984, 2014。
- A. Kumar, A. Raghunathan, R. Jones, T. Ma, P. Liang. "Fine-Tuning can Distort Pretrained Features and Underperform Out-of-Distribution." ICLR, 2022. arXiv:2202.10054. 仅作为原理层面引用。
- J. Tobin, R. Fong, A. Ray, J. Schneider, W. Zaremba, P. Abbeel. "Domain Randomization for Transferring Deep Neural Networks from Simulation to the Real World." IROS, 2017. arXiv:1703.06907。
- J. Tremblay 等人. "Training Deep Networks with Synthetic Data: Bridging the Reality Gap by Domain Randomization." CVPR Workshops, 2018. arXiv:1804.06516。
- D. Kienzle, K. Ludwig, J. Lorenz, S. Satoh, R. Lienhart. "Uplifting Table Tennis: A Robust, Real-World Application for 3D Trajectory and Spin Estimation." arXiv:2511.20250, 2025。
- T. Gossard, J. Schmalzl, A. Ziegler, A. Zell. "Sound-Based Spin Estimation in Table Tennis: Dataset and Real-Time Classification Pipeline." IEEE STAR, 2025. arXiv:2409.11760。
- S. Tsuji 等人. "Audio-Visual Self-Supervision for Frame-Level Player-wise Offensive Shot Detection in Table Tennis Matches." MMSports '24, 2024. doi:10.1145/3689061.3689064.(文献仅通过检索摘要确认)
- X. Zhou, Q. Huang, L. Xie, S. Cox. "Detection of Ball Hits in a Tennis Game using Audio and Visual Information." APSIPA ASC, 2012。
- 我们的测量:代码仓库
docs/tt/PERFORMANCE.md2.1·2.8·2.12·2.19,研究日志 E01·E05·E08·E11·E12·E17·E18·E25·E31·E42·E43·E44。代码live/blurball.py·tablecv.py·tablemodels.py,ttscore/table.py·tablekp.py·bounceveto.py·reviewcal.py.
延伸阅读
- 前系列 TT Score 模型剖析 第 2 篇:寻找球, 第 3 篇:寻找球台.
- 视觉模型解读 第 1、3 篇:U-Net 与 HRNet, 第 10 篇:SAM 2 与 EfficientTAM, 第 11 篇:SAM 3.
- 视觉模型解读 第 2、5 篇:光流, 第 7 篇:姿态热力图, 第 9 篇:球追踪.
- 本系列 第 5 篇:数据、许可与训练过程:训练的运行方式与位置,以及面向商业服务的训练数据原则。