第一篇讲了六个难点,第二篇讲了数据底座和 AI 的边界。这篇回答最关键的问题:在零穿戴、单目、野外、不拍脸这四条限制下,我们到底用了哪几个方法把六个难点拆开,最后落到一份"用得上"的数据。
这篇的讲法先理一下:先把四个算法的名字列出来,再把名字解释清楚,然后讲每个算法是怎么实现的,最后讲它们分别解决了什么具体问题。
0. 这篇文章讲的四个算法
先把名字摆出来,心里有个谱:
1. 方法一:约束驱动的问题降级(问题重构)——一套把"难任务"换成"可解子任务"的方法论,落地的具体算法是局部 Z-score 突变检测(方法二)与 2D 相对运动学量化 2. 方法二:无参时序突变出拳检测(局部 Z-score 突变检测 / Local Z-score Spike Detection)——属于变点检测(Change Point Detection)家族,用统计突变数拳,不认拳种 3. 方法三:BoxLock 频率解耦的检测-追踪(Tracking-by-Detection 拳击变体)——贵的少跑、便宜的多跑,没把握就重来 4. 方法四:ReID 指纹 + 开局锚定的身份闭环(Re-identification)——人是特征,不是红蓝衣服,也不是站左边还是右边
1. 名词解释(先把名字弄懂)
这篇只用到四个关键名词,先列出来:Z-score、BoxLock、yolo11n、ReID。
下面逐个解释:
Z-score(标准分):衡量一个数值偏离平均水平多少。比如平时出手速度有个均值,某一下的速度比均值高出好几倍"标准差",就认为这是一次出拳的突变。
BoxLock:是我们给"检测—追踪频率解耦"这套方案起的名字。Box 指目标框(检测出来的手套框),Lock 指锁定追踪。它本身不是某个新模型,而是一种架构思路:把"检测"和"追踪"两种操作按频率分开跑——检测贵就少跑,追踪便宜就多跑,追踪没把握就退回检测重来。
yolo11n / glove_detector_v3:我们用的目标检测模型,负责在画面里框出手套的位置。
ReID(重识别):给同一个人提取稳定的外观特征,让他转身、换位也能被认出来,而不是靠衣服颜色。
- * *
2. 四个算法的实现原理
名字懂了,下面讲每个算法到底是怎么做出来的。
2.1 方法一:约束驱动的问题降级(更接近"问题重构")
先说清它到底是什么算法:方法一不是一个神经网络,也不是某个现成模型,而是一套"把难任务换成可解子任务"的方法论,更接近"问题重构"(problem restructuring)——不是数学上严格的约束松弛。它自己不产出任何数字,而是决定后面用哪个算法、把哪个问题先放下。它落地成两个具体算法:把"认这一拳是什么"重写成"检测速度突变"(也就是方法二),把"单目 3D 重建"重写成"2D 相对运动学量化"。正是这套思路,决定了后面三个方法长什么样。
拳击场景里很多事,不是"做不出来",是"在这几条限制下做不出来":比如认"这一拳是刺拳还是勾拳",需要大量逐拳标注,业余视频里根本凑不齐;单目 3D 重建,误差大、算得慢,还违规。硬上更大的模型,只会撞在"没数据"和"不合规"两堵墙上。
方法一的做法是主动把问题改简单,改成限制内能做的版本:
- 认"这一拳是什么"改不成,就先改成"有没有出拳":只检测手套速度是不是突然变快,不再问拳种。拳种认不了,但出拳数得清、节奏算得准——先把能可靠量化的拿到手。
- 3D 重建做不了,就退一步,只看画面里能看到的相对运动:关节相对位移、手套相对速度。不重建绝对的三维坐标,只量化看得见的相对变化。
这套思路是我们"不做评分、做数据快照"的底子:靠重新定义问题,把做不了变成做得了,并且老老实实标出哪些还做不到。改简单不是为了偷懒,是为了可靠。
2.2 方法二:无参时序突变出拳检测(局部 Z-score 突变检测)
先说清它到底是什么算法:方法二的核心算法是局部 Z-score 突变检测(local Z-score spike detection),属于变点检测(change point detection)家族——不训练任何分类器,只检测手套 / 手腕速度序列里的局部统计突变。方法一把"认拳种"降级成了"检测速度突变",方法二就是用这个具体算法把降级后的事做出来,而且一个标注都不用——因为长尾场景最缺的就是标注。
具体做法:盯着手套或者手腕关键点的速度,用滑动窗口算局部均值和标准差,连续几帧速度超出局部均值 2~3 倍标准差,就记一次候选出拳;再用最小间隔(比如 150 毫秒内只留一个峰)把一次出拳的"加速 + 减速"合并成"一次",避免一拳算两下。一个标注都不用。
打个比方:不要求你认出每只鸟是什么品种,只要求你发现鸟群突然起飞的那一下。起飞瞬间速度曲线一定有个尖峰,谁都能数。方法二干的就是"发现起飞",不是"识别品种"。
但得诚实:速度突变不是出拳的充分条件。快速收拳、摇闪、防守移动,速度同样会突然变快,纯速度阈值会把它们误计成出拳——这是现在计数假阳性的主要来源,也是为什么我们反复说"数拳可靠,但拳种认不了"。这部分得靠后面的学习模型去分,而不是再加阈值。
它守住我们一个原则:大模型不数拳,定量永远交给计算机视觉加规则。方法二是纯规则,不沾大模型;"这一下是刺拳还是交叉拳"那是语义层的事,留给多模态大模型去解读,绝不让它来数数。
2.3 方法三:贵的少跑、便宜的多跑,没把握就重来
拳击的动作对算法很不友好:手套尖速度 8 到 15 米每秒(职业选手峰值,业余者通常更低),单帧之间位移大、运动模糊普遍;一次出拳真正加速的那段只有 200 到 400 毫秒,边界很难切;两拳互相遮挡、贴身纠缠,检测器很容易漏。这几样叠在一起,"每帧都检测"在业余视频上既慢又容易累积误差——逐帧全检测的 baseline 只有 4.4 帧每秒。
方法三的核心,是把检测和追踪按频率分开跑:
- 检测(用的 yolo11n、glove_detector_v3)隔一阵才跑一次:只做初始化和定期校准,把最贵的操作压到最低频;
- 追踪(CSRT 精度高、MOSSE 极快、KCF 折中)每帧都跑:按目标大小动态选一个,用便宜的填满检测的空档;
- 多级判断:追踪一旦没把握了,就退回检测重新初始化,避免误差越积越多、一漏就断。
这里有一个容易被忽视的真相:模型快,不等于系统快。yolo11n 纯推理能压到 26.6 毫秒一帧(约 37 帧每秒),但那只是检测、不含追踪和后处理。我们拿同批素材对比:逐帧全检测 baseline 仅 4.4 帧每秒,换成 BoxLock 间歇检测后 12.3 帧每秒——提速来自架构,不是单个模型。另一批真实对练素材实测约 12.8 帧每秒(已含 BoxLock + 后处理),瓶颈确实在追踪和后处理。很多"我们模型很快"的说法,把这一点藏起来了。
2.4 方法四:人是特征,不是红蓝衣服,也不是站左边还是右边
对练里两人会换位、转身。两个直觉上的笨方法会翻车:按位置认人——开局红方在左、蓝方在右,换位之后左边站的是蓝方,按"左边就是红方"去数就数错;按衣服颜色——多数时候拳套红蓝固定、颜色是稳特征,但当两人戴同色训练拳套、或贴身转身外观模糊时,颜色也会失效。贴身纠缠时外观短暂失效。
方法四把"认人"从单一代理(位置或颜色)换成"外观特征 + 运动轨迹"的融合,并且用开局锚定加人工兜底形成一个闭环:
- 开局红蓝只是第一帧的参考,不是全程依赖;
- 之后按特征追人,人盯人,不是盯"当前左边那个人";
- 换位不换人,和我们人工记的口径天然一致;
- 展示时因此把"红方 / 蓝方"改成了没有歧义的"选手A / 选手B"。
这一条的价值不在于多准,在于口径对得上:算法数出来的选手A,和教练盯的那个穿黑裤子的是同一个人。贴身看不清时,靠架构上留好的人工兜底,而不是指望一个模型硬扛。
- * *
3. 它们分别解决了什么问题
四个算法的原理讲完了,回过头看:它们各自对应文章开头说的六个难点里的哪一个,又为什么难。
| 难点 | 用的方法 | 它怎么针对性解决 |
|---|---|---|
| 认拳种 / 单目 3D 在限制下做不了 | 方法一 把问题改简单 | 认"什么拳"改测"有没有拳"、单目 3D 改看相对运动,先把能算准的拿到手 |
| 无法逐拳标注 + 非出拳动作也提速 | 方法二 测速度突变数拳 | 绕开"没样本就识别率为 0"的死局,用统计规则把"有没有出拳"做成可复现基线(收拳 / 摇闪的假阳性留待学习模型解) |
| 动作太快、实时跟不上 | 方法三 检测和追踪分开跑 | 贵的少跑、便宜的多跑,4.4→12.3 FPS;追踪没把握就退回检测,对应"看不清就不出数" |
| 两人换位转身认错人 | 方法四 按特征认人 | 身份是特征不是位置,开局锚定加人工兜底,换位不换人,身份一模糊就不算 |
多说一句难点本身为什么难:
- 标注贵 / 假阳性:精确区分刺拳勾拳需要逐拳标注,业余视频凑不齐;更要命的是收拳、摇闪、防守移动的速度也会突变,纯速度阈值容易把它们误计成出拳——这恰是计数假阳性的根因,不只是"没数据"。任何"识别率百分之多少"都是在编。
- 极端时序 / 实时性:手套尖速度 8–15 米每秒(职业选手峰值,业余者通常更低),加速相只有 200–400 毫秒,漏检和漂移随时发生,逐帧全检测又太贵。
- 身份一致性:换位、转身、贴身让位置和外观都不可靠,朴素策略必然数错人。
四个方法串起来看:方法一决定"什么问题值得做",方法二在没数据的情况下把数数做可靠,方法三在速度上把追踪做稳,方法四在一致性上把口径对齐。它们单独都是成熟技术,合在一起只为一个目标——一份可信、能复现、并且诚实标出边界的数据。
- * *
4. 下一步算法研究方向
前面四个方法是 1.0 阶段:用现成技术凑在一起,在四条限制下把系统从做不了拉到"能用"。下面 4.1–4.6 是往后想做的方向,顺带交代。先说清口径:出拳计数(数"有没有出拳")是可靠的、可复现的,前面说的节奏、连击都基于它;而精确动作分类(区分刺拳 / 直拳 / 勾拳)F1 只有 0.053,稀有拳种召回还是 0,真实素材实时性 12.8 帧每秒。0.053 是"这一拳到底是什么类型"的分类 F1,不是计数。分类近乎失败,不是部署问题,是规则方法本身的天花板——用规则、用阈值、用统计突变,能绕开没数据把数数做稳,但绕不开"这一拳到底是什么动作"这种需要理解的判断。要变好,得从规则换成学习,而且还是在数据依旧很少的前提下学。
4.1 从规则到学习:把数不清的交给模型
- 出拳检测:从速度突变规则,换成骨骼序列的时序模型(ST-GCN、LSTM 加注意力、轻量 Transformer)做"出拳 / 非出拳"的二分类。把"速度阈值"换成"学动作的动力学时序模式",对不同人风格更稳,能显著压住收拳 / 摇闪带来的假阳性。
- 拳种识别:从普通分类器(稀有类召回 0),换成度量学习(对比、三元组)加骨骼数据增强(加噪声、镜像、时间扭曲)加主动学习补标。不要求每类大量样本,学"拳种之间能分开的距离",用难例去补稀有类。
- 追踪:从相关滤波(快速运动、遮挡会退化,换位会串号),换成检测跟踪一体(ByteTrack、BoT-SORT)加骨骼外观特征。检测保底、外观关联,遮挡时靠骨骼特征重认,换位不丢人、不串号。
4.2 升维:从单帧平面到带时间的立体动作
现在的姿态底座是 YOLOv11-pose 的单帧平面,转身、下潜会有前后深度的歧义,动作理解停留在投影上。往后想引入带时间的姿态(MotionBERT)和三维姿态(4D-Humans、图到 SMPL),把单帧平面升到"三维运动",解决单人遮挡和尺度歧义——转身、闪避也能评,动作语义更准。更重要的是,三维运动能让我们"看不清就沉默"这条原则更聪明:系统能判断哪一段轨迹可信、哪一段该跳过,而不是只靠简单阈值。
4.3 让大模型做"翻译"(对应我们的原则)
这是最贴合我们定位的一块。计算机视觉加规则负责定量(数拳、算速度、连击、节奏),多模态大模型负责把数据翻译成人话——"你第三回合节奏塌了,因为连击占比从 40% 掉到 22%"。大模型只做语义,绝不数拳,正好落实"大模型不数拳"。这一层把冰冷的数据变成训练者听得懂的反馈,是"训练助手"真正的入口。
4.4 根据数据缺口给建议(对应我们的原则)
数据本身不是目的。我们想做的建议引擎遵循"建议必须有数据依据":规则从数据缺口触发——比如"连击占比低加节奏塌"就建议"练 1-2-3 组合衔接";"出拳频率逐周下滑"就建议"检查训练量或疲劳"。每条建议都能回链到具体指标,不空谈。
4.5 让数据自己滚起来
现在稀有类靠人工标注,长尾没解。想引入主动学习(自动挑最不确定的难例)加自监督预训练(用海量无标注视频先学通用表征)。要说明:2.0 的标注不是凭空来的——来自 1.0 系统产出 + 人工在环校准的逐年积累,主动学习只是加速这条路:模型自己标难例给人复核,形成闭环,长尾慢慢收窄、数据自我增殖。
4.6 边缘实时与量化(谨慎边界)
- 边缘实时:把模型从 fp32 量化到 INT8 或 FP16,推理和展示分离,目标把实时性从 12.8 帧每秒提到 30 以上,现场拍完立刻出数据。纯软件路线,不引入任何外部硬件,契合我们"零穿戴、单目"的定位。
老实说投入产出:马上能做(不依赖硬件)的是出拳的时序模型二分类、追踪换 ByteTrack、把速度突变升级成学习,直接打在 F1=0.053 和召回=0 两个最痛的点上;中期是三维姿态、自监督预训练;谨慎或暂时不碰的是视频大模型(成本和延迟都不匹配业余场景,而且解释性差,违背"AI 点评必须挂靠真实数字")、不碰人脸(合规)、不盲目上单目 3D 重建(不在约束场景里误差太大)。
1.0 用规则把数据跑起来,2.0 用学习把数据做细,而学习的燃料是数据自己滚起来的飞轮。
- * *
5. 小结 + 下篇预告
这篇按"名字 → 解释 → 原理 → 解决问题"的顺序,把四个方法讲了一遍:
- 方法一 把问题改简单:做不了就先做能做的版本,认拳种改成测速度突变、单目 3D 改成看相对运动;
- 方法二 测速度突变数拳:零标注把数拳做成可复现基线,也守住"大模型不数拳";
- 方法三 检测和追踪分开跑:贵的少跑、便宜的多跑、没把握就重来,速度从 4.4 提到 12.3 帧每秒,也落实"看不清就不出数";
- 方法四 按特征认人:人是特征不是颜色,开局锚定加人工兜底,换位不换人,落实"身份一模糊就不算"。
难点一到六的答案,一半在数据(第二篇),一半在算法(本篇)。但一份数据到底可靠到什么程度?哪些场景能给、哪些场景宁可沉默?和学术、和商业系统比,拳神在数据这条路上处在哪一格?
下一篇:达到的水平——用工程实测指标、与学术和商业系统的对比、一张行业差异矩阵,以及最关键的"诚实边界",把我们现在能提供的数据的真实可靠性钉死。
_数据不骗人。拳神也不该。_
