想象一段半场三对三的训练视频:两名球员在弧顶交叉掩护,身体有大约半秒钟叠在一起。这半秒里,画面里的骨架线条发生了一件很有意思的事,穿红衣的那个人,骨架在交叉之后“跳”到了对面穿白衣的人身上。视频继续播放,系统仍旧认真地统计着“红衣球员的下蹲深度”,只是统计的对象已经换了人。这类错误不会报警,数据看起来一切正常,因此比“识别失败”更危险。
多人运动和身体遮挡,是姿态识别在真实训练场景里最先撞到的墙。实验室里一个人站在空白背景前的数据集,很难暴露这个问题,而球场、健身房、训练营里,人总是挤在一起、被器械挡着、被自己的手臂挡着。下面按“什么被挡住了、系统怎么找人、怎么记住谁是谁、什么时候该闭嘴”的顺序,说明od体育在这个问题上的思路。
三种遮挡,性质完全不同
笼统地说“被遮挡”,会掩盖很多差别。至少有三种情形,处理方式并不一样。
- 自遮挡。身体的一部分挡住另一部分:侧面拍深蹲时靠近镜头的手臂挡住躯干,投篮时手挡住脸,跑步时前摆的手臂挡住髋。它几乎不可避免,而且大量发生在动作最关键的时刻。
- 他人遮挡。另一个人的身体覆盖了目标,多见于团队运动和双人对练。这种遮挡最麻烦,因为被遮住的部位和遮住它的部位都属于“人”,模型很容易把两个人的肢体连到一起。
- 器械与环境遮挡。杠铃杆、球、球拍、球网、器械的护架、柱子,都会切断关键点的可见性。杠铃杆压在肩上时,肩、肘的关键点位置会被同时打乱。
三种遮挡的共同点是:模型对被挡住的关节点通常仍然会输出一个位置,而不是“找不到”。这个位置是靠训练数据里的规律推断出来的,也就是“这种姿势下,被挡住的肘大概在哪”。推断合理时,看起来非常自然;推断错误时,骨架依然像模像样,只是不对。所以遮挡问题的关键,并不在于模型能不能画出骨架,而在于系统能不能知道哪些点是“看见的”,哪些点是“猜的”。
先找到人,再找关节,还是先找关节,再拼成人
多人姿态估计有两条常见路线,理解它们的差别,有助于判断遮挡下会出什么错。公开研究里,自顶向下的做法是先用检测器框出每个人,再对每个框单独估计关键点;自底向上的做法是先在整张图上找出所有的关节点,再想办法把关节点分配给各个人。OpenPose 属于后者的代表,HRNet、RTMPose、ViTPose 常被用在前者的流程里,MediaPipe/BlazePose 更偏向单人场景,常与检测环节配合使用。这里不比较谁更好,只看它们各自的弱点。
| 路线 | 基本做法 | 人多时的优点 | 遮挡时的典型问题 |
|---|---|---|---|
| 自顶向下 | 先检测人框,再逐框估计关键点 | 每个人的关键点质量通常较高,归属明确 | 人框重叠严重时,检测器漏框或合并框,框里出现两个人的肢体 |
| 自底向上 | 先找全图关节点,再分组成人 | 计算量受人数影响相对小,不依赖人框 | 肢体交叉时分组容易出错,把A的手腕连到B的肘上 |
这两种路线各有场景。人数少、动作幅度大、需要每个人关键点质量高的训练视频,更适合自顶向下的流程;人数很多、画面拥挤的场景,自底向上的思路有其优势。实际系统往往在两者之间取舍,再靠后处理弥补短板。无论哪一条,遇到两个人肢体重叠的那几帧,结果的可靠性都会下降,需要后面的环节来兜底。
ID 换错:轨迹跟踪的老问题
单帧里找对了人,只解决了一半。训练分析关心的是“同一个人在整段视频里的动作序列”,所以还要把每一帧里的人连成轨迹,这就是多目标跟踪。常见的思路是给每个人分配一个ID,然后逐帧根据位置、运动趋势和外观特征,判断这一帧的哪个人是上一帧的哪个人。位置和运动趋势靠“上一帧他在哪、朝哪走”来预测,外观特征则用衣服颜色、体型、球衣号码等来辅助。
问题恰恰出在这些依据靠不住的时候。两个人交叉时,位置重叠,运动预测失效;两人穿同色队服,外观特征几乎没有区分度;一个人被完全挡住几帧再出现,系统要决定“这是原来的他,还是一个新来的人”。判断出错的后果是ID切换:A的轨迹在交叉之后被接到了B身上。对训练分析来说,这意味着A在整段视频里的“动作曲线”里混进了一段B的数据,任何基于这条曲线的结论都不能信。
更值得注意的是,ID切换很难被事后察觉。骨架看起来正常,坐标也连续,只有当你回放视频,才会发现“这里换人了”。因此在设计上,od体育更倾向于在轨迹里加入“交叉事件”的标记:一旦两人的框大面积重叠、或某个ID短暂消失又出现,就把这一段视为不确定区间,把交叉前后的两段轨迹分别处理,不随意接起来,或者交给用户确认。宁可把一条轨迹拆成两段,也不要强行拼成一条。
置信度与插值:补全是把双刃剑
被遮挡的关节点通常置信度较低。处理这些低置信度点,有三种常见做法:直接丢弃、用前后帧插值补全、用时序模型预测。插值有明显好处:短暂的遮挡在前后帧的位置基本连续,补一下曲线更平滑,后续计算也更方便。但它有个隐含假设:这段时间里动作是平滑连续的。
在运动里,这个假设常常不成立。想象一次投篮出手,手腕在球出手的瞬间被球挡住了两三帧,这恰恰是腕部发生快速屈曲的时刻。前后两帧的腕部位置一插值,得到的是一条平缓的曲线,把最关键的那个“快速拨动”抹平了。类似地,深蹲最低点被杠铃或手臂遮挡时,插值出来的最低点常常比真实的更浅,因为端点的最低值被平均掉了。
所以,od体育在处理时会区分“遮挡时长”和“动作是否处于快速变化阶段”:短时间、动作平缓时,允许插值并标注为“补全”;遮挡时间长、或恰好覆盖动作转折点时,宁可让这段缺失,不参与关键指标的计算。补全的数据也不应该和实测数据混在一起,而应保留标记,让后续计算和报告能够区分。拍摄条件如何影响关键点质量,可以对照阅读《手机单摄像头能做到专业动作分析吗?od体育姿态识别的精度边界在哪里》,那里从镜头、光线和帧率的角度补充了单目分析的限制。
团队运动里的遮挡:篮球和足球各难在哪
篮球场地小、人密、身体接触多,遮挡主要是“近距离的他人遮挡”,问题集中在关键点分组和ID切换上。足球场地大,摄像机拍到的人在画面里往往很小,遮挡主要发生在禁区、角球区这类人员聚集的区域,另外,转播镜头的切换、变焦、摇镜,让画面坐标系一直在变化,追踪难度进一步上升。
在足球战术分析里,遮挡问题的后果有时比动作分析更大。要判断阵型、跑位或防守间距,系统必须先知道“每个人是谁、在哪”,只要几个ID在密集区域换错,平均位置就会被污染。比如判断一支球队是四后卫还是三后卫,依据的是一段时间内球员的平均位置和角色,ID在交叉跑位中被换过一次,就可能让一名边后卫“被算成”位置完全不同的中场球员。这一类问题在《433真的一直是433吗?od体育AI如何识别比赛中的动态阵型变化》里有专门的分析,那篇文章讲的是阵型识别的思路,追踪质量正是它的前提,值得对照阅读。
模拟场景:一次三对三训练的分析
假设一个业余球队在室内球场做三对三半场训练,用一台固定在看台高处、约四十五度俯视的手机拍摄,画面里共有六人,红白两队各三人,红队穿深红背心,白队穿浅色上衣。以下均为示例,不代表真实比赛数据。
系统检测到六个人,为每人建立轨迹。前二十秒,球员间距较大,轨迹连续,关键点置信度普遍不错。在一次弧顶挡拆中,两名红队球员和一名白队防守者叠在一起,大约持续了半秒。系统识别到这段时间三个人的框大面积重叠,且其中一名红队球员的两个手腕关键点置信度骤降,于是将这段标为“交叉不确定区间”,把这名球员前后两段轨迹分开保存。挡拆结束后,有两个红队球员穿着相同的背心,系统无法仅凭外观判断谁是谁,于是同时保留两种匹配假设,并结合他们进入交叉前的运动方向进行排序,最终以中等置信度给出了匹配,并在报告里注明“交叉后身份匹配为推断,建议核对”。
对使用者来说,这个报告的价值在于:它没有假装知道全部。前二十秒的跑位与站位分析可以直接使用,挡拆那半秒的结果需要回看视频确认,之后的数据则带着“身份为推断”的标记。教练可以先用前者,再花一分钟核对后者,比拿到一份看似完整但可能张冠李戴的数据要靠谱得多。
什么时候应该放弃输出
多人场景中,放弃输出是一种功能,而不是一种缺陷。以下几种情形,系统更适合直接说“这一段不分析”。第一,关键部位在关键时间段内持续被遮挡,例如动作分析的核心关节连续多帧置信度过低。第二,身份匹配的不确定性无法通过运动趋势和外观特征消除,比如两人穿同色服装且长时间纠缠在一起。第三,画面里的人过小、过糊,关键点的位置误差已经大于动作本身的差异。第四,涉及需要精确判断的场合,比如对抗中的犯规与否,这类判断本来就应该由裁判或教练来做,AI只能提供画面线索。
拍摄时也有办法减少这些问题:让摄像机架高一点,用俯视角度减少人与人之间的前后遮挡;让参与训练的队员穿颜色明显不同的服装;需要精细分析某一个人的动作时,让他单独做一次,不要混在多人对抗里。这些做法听上去笨,却比任何后处理都有效,因为遮挡是信息在拍摄时就丢了,算法再聪明,也只能在缺失的信息上做推断。
最后是隐私。多人场景意味着画面里可能出现并未同意被分析的旁人。od体育的设计原则是分析对象由用户明确选定,其余人员的关键点不参与生成个人报告,也不在历史记录里留存,是否保存原始视频由用户决定,具体功能以App内实际提供的选项为准。这也是一条取舍:多人对抗里能得到的信息很多,但并不是能看到的一切都应该被记录。