第五篇结尾我们写过一句:"技术没有改变拳击的本质。"
那篇是收官篇。按理说系列到此为止。但收官之后,有一件事一直悬着:
系统报出来的"命中",到底是真的打中了,还是我们自己算出来的?
这个问题,之前我们答不了。不是不想答,是没有尺子——要判断一次接触算不算命中,机器说了不算,得人一帧一帧看。而人看,是有成本的。
所以我们花了两个小时,把一段 3 分钟的对练视频里抽出的 50 拳,逐帧看了一遍。
结果有点难看。但正因为难看,它比任何一次漂亮的跑分都值钱。
0. 先说结论:AI 报的 7 次命中,我们确认了 1 次
这段话我写得很直接,因为绕圈子没意义。
50 拳人工标完,和系统的结果一对照:
| 人:命中 | 人:不是命中 | |
|---|---|---|
| AI:命中 | 1 | 6 |
| AI:没报 | 9 | 34 |
读法:
- 系统判了 7 次命中,人工逐帧看完,只有 1 次是真的。另外 6 次,4 次是打空了,2 次是被对手格挡。
- 人工判了 10 次真命中,系统漏掉 9 次。这 9 次,全部是打在头上。
- 唯一那次对上的,系统说打在躯干,人看着是打在头——连部位都没对上。

这不是"精度低一点"的问题。这是两套判断几乎不重合。
说实话,看到这个结果的第一反应是:是不是我们对错了?
1. 第一次对齐,我们对出 0 条——然后发现是尺子拿反了
拿到人工标注后,第一件事是把两边对起来。我们按最直觉的方式做:拿时间对。
人工标的是这一拳发生在第几秒,系统记录的命中也在第几秒,两个时间对上就是同一件事。
结果:50 条事件,0 条对上。
系统全片报了 36 次命中,50 条抽样里一条都没撞上。概率上讲这不可能——除非不是概率问题,是我错了。
查下去发现:系统的"命中"时间戳,记的不是出拳那一刻,而是结算完成的那一刻。
一拳打出去,程序要等速度信号走完、确认这一拳结束了,才判定这一拳有没有命中、打在哪。这个结算比出拳晚——中位数晚了 1.5 秒,最远的一次晚了 7.4 秒。
所以拿"出拳时刻"去对"结算时刻",等于拿发令枪的时间去对终点线的时间,当然对不上。
改成物理上正确的归属方式——一次命中必然发生在某次出拳之后,把它归给同一个人、在这个时刻之前最近的那次出拳——才对得起来。
这里有个必须做的动作:换归属的时间窗口,看结论会不会变。我们对了四档窗口(1.5 秒、2.5 秒、3.5 秒、6 秒):
| 归属窗口 | AI 报命中 | 人工确认 | 误报 | 漏报 |
|---|---|---|---|---|
| ≤1.5 秒 | 6 | 1 | 5 | 9 |
| ≤2.5 秒 | 7 | 1 | 6 | 9 |
| ≤3.5 秒 | 7 | 1 | 6 | 9 |
| ≤6.0 秒 | 8 | 1 | 7 | 9 |
四档全一样:确认 1 次,漏报 9 次。
结论不受方法影响,这才敢写出来。如果换个窗口结论就翻,那说明测的不是事实,是方法。
2. 为什么会错成这样:一个"看起来很对"的物理判据
我们的命中判定用的是一个非常朴素、也非常经典的做法:减速结算。
逻辑是这样的:拳在空中的时候速度快,一旦打中东西,速度会突然掉下来。所以——速度从快变慢的那一瞬间,就是命中的那一瞬间。
这套逻辑在很多场景都成立,它便宜、实时、不需要额外数据。问题是,在拳台上,"减速"这件事不只由命中造成。
看人工标注的真实分布就明白了:
| 人工判定 | 数量(共 50 拳) |
|---|---|
| 命中 | 10 |
| 格挡 | 25 |
| 落空 | 15 |
| 存疑 | 0 |
一半的拳,是被对手挡下来的。
而拳被挡住,会减速吗?会,而且减得比打中身体还猛——格挡是主动的、硬的对抗,速度掉得更快。
于是"减速=命中"这条判据,在真实对练里,最大的一块命中信号来源恰恰是格挡。这不是算法写错了,是这条物理规则在这个场景里根本不成立。

打个比方。你在场边看一场足球,看不见球门,只能听声音。你规定:球速慢下来 = 进球了。
- 球进了网,会慢——对了;
- 球打在门柱上弹回来,也会慢——你判进球,实际没进;
- 球员一脚踢空、收脚缓冲,球也会慢——你还是判进球,实际连门都没碰。
我们的"减速判据",就是这个听声音的裁判。它不是不努力,是手里只有这一个信号。
更麻烦的是反过来那一半:真正的命中,有 9 次没被结算。
为什么?因为一记又快又重的拳打上去,有时候速度是"被截停"而不是"渐慢",信号形态和程序预设的不一样,结算流程没被触发。越重的一拳,越容易漏。
所以系统现在的命中判定,是一个双向都漏的筛子:把格挡和落空捞进来,把真命中漏出去。
3. 这条路我们试过,而且不止试过一次
到这儿必须交代一下,我们不是第一次撞这堵墙。
第一次:视觉大模型(VLM)。 想法很自然——让能看懂画面的模型来判。我们挑了 7 个样本,给足了帧数、分辨率、提示词。结果 7 次全错,三种错误模式:
- 拳绕过防守打到头,模型判"被格挡"(防守穿透漏判);
- 对手主动下潜躲开,模型判"命中"(躲避误读);
- 两人靠近但没接触,模型判"命中"(乐观补全)。
根因不是模型不够强,是给静态画面问时序物理问题。接触是过程,不是瞬间;单帧里没有"有没有碰到"这个答案。
第二次:几何规则。 算拳套和对手头部的距离、包围框的重合度。结果同样够不着——单目视频没有真实深度,画面里两人贴在一起,可能是真打上了,也可能是一个在前一个在后差了半米。
第三次:就是这次的人工真值。
三次试下来,结论收敛得很清楚:细粒度的命中判定,机器现在做不了,得人来做。
这不是悲观。这是把力气从"死磕一个够不着的指标"上挪开,挪到能做成的事情上。
4. 那这个数字还敢不敢给用户看?
不敢。所以不给。
我们内部给系统定了一条硬规矩:凡是人工真值校不出来的数字,一律不进用户报告。
具体到命中这件事:不报命中率,不做命中数对比,不当成训练效果指标。用户报告里能看到的,是出拳数、拳种分布、频率、连击、节奏、体力衰减、移动量——这些我们用人工真值核过,是可复现的。
这条规矩不是今天才有的。从第一版起,报告里就没有"命中率"这一栏,尽管它是所有拳击数据产品里最吸引眼球的一个。
原因和这次的发现一模一样:分母是估算的,两个数一除,误差会被放大成一个看起来很精确、实际很假的百分数。 用户看到"命中率 33%",会当成事实;而它其实是一个估算除以另一个估算。
这次的对照实验,等于给这条老规矩补了一份新的证据:不只是分母不可靠,连分子(命中)本身都不可靠。两个数都不可靠,还要相除,那就不是误差,是编故事。
5. 意外收获:顺手校准了拳种
这次人工标注顺带做了一件事:每一拳,标注的人可以顺便修正系统预判的拳种——刺拳、直拳、摆拳、勾拳。
50 拳里,18 拳的拳种被改了。
这个数字的意义在于:它白送给我们一份 50 条的拳种标定集。这批数据不是从公开数据集里扒来的,是本域、本机位、本人群的真实标注。
而拳种这个任务本身是可以学的——它不像命中判定那样依赖接触瞬间的物理细节,它看的是整段轨迹的形状。有真值、有形状、任务可学,这就有戏。
一件失败的事,顺手救活了另一件事。
6. 真正值钱的不是这个结果,是这 50 条数据
写到这里,得说说这件事改变了我们什么判断。
我们原本的逻辑是:算法领先 = 护城河。 做得比别人准,你就赢。
这次实验把这个逻辑敲了个裂缝。因为你会发现:算法这条路,你能走,别人也能走。减速判据你会写,别人也会写;换个模型、调调阈值,大家都在同一个量级里卷。而且我们自己的数据已经证明——你以为的领先,可能只是没拿真值照过镜子。
那什么不会被卷走?
被人逐帧校过的数据。
这 50 条标注,每一条都是一个人盯着屏幕、把一段 0.4 秒的片段反复放慢、判断这一拳到底碰没碰到、碰在哪。它不可复制,不可速成,也没有公开数据集能买——因为公开数据集里没有"教练认可的真值"这一层。

所以我们给这件事定了个目标:人工校准的真值标签,攒到 500 条。
50 条是第一批。按这个视频的量级,大概还需要 9 段同等长度的对练素材。它不快,但它是资产——每标一条,就多一份别人拿不走的东西。
算法的领先会过期,被校过的数据不会。
7. 这 50 拳还告诉我们的三件小事
技术细节之外,这次标注过程里有几个观察,可能对练拳的人更有用。
第一,格挡占了一半。
50 拳里 25 拳被挡,命中只有 10 拳。这个比例,和很多人的自我感觉是反的——打完一场,印象里自己打中了很多。实际是对抗中绝大部分输出,都被对方的防守吃掉了。
这意味着:提高命中的关键,可能不在"打得更快更重",而在"打得进去"。 怎么打进去,是假动作、是时机、是打完第一拳的第二拳——这些教练一直在教的东西,数据现在能佐证它了。
第二,"存疑"一栏,一条都没有。
这是我最意外的一项。50 拳逐帧看下来,标注者没有一次因为看不清而放弃判断。
说明什么?说明手机拍的视频,只要机位固定、两人不出画,人工判断是够用的。这是好消息——它意味着普通爱好者拍的素材,是可以产出有效真值的。
第三,机器和人不是替代关系,是分工关系。
机器 3 分钟跑完 146 拳的检测、跟踪、轨迹、拳种预判,人花两小时核对 50 拳的接触结果。机器负责"数得全、数得快、每次一样",人负责"判得准、看得懂"。
机器量,人定性。 这就是第二篇那个判断的现实版本,这次有了数字。
8. 续篇的意义:把镜子立起来
五篇收官的时候,我们说这套系统让人第一次"看见"自己的拳。
这一篇补上的是后半句:看见之前,得先确认镜子没变形。
如果系统报的东西是错的,那"看见"就不是帮助,是误导——一个练拳的人照着错误的反馈调整半年,比没有反馈更糟。
所以这次的 7 次里 1 次,虽然难看,但它是一次校准:它告诉我们哪一块镜子是弯的,也告诉我们要把这块镜子先盖起来,别让用户照。
接下来我们会做三件事:
1. 继续攒真值,往 500 条走,每段都留人工校准记录; 2. 换判据,把"减速"换成"接触形变 + 目标位移"——看拳套有没有被挤压、头部有没有后仰,而不是看速度掉没掉; 3. 保持不给,在人工真值校出来之前,命中这一栏,继续空着。
做技术最怕的不是发现错,是不知道自己错在哪。这次我们知道得很具体。
_数据不骗人。拳神也不该。_
👇 想看你的真实数据?点文章底部「阅读原文」进官网 boxingai.cloud,拍段 30 秒空击传上去,看你的趋势线——出拳频率、连击、节奏、体力、移动,哪一项在涨、哪一项卡住了,一目了然。(链接已带渠道标记,你的访问会被准确计入。说明:空击场景我们只给可复现的技术趋势,不报命中率、不写拳种识别率。)
