录像很长,值得回看的很短
教练拿到一场比赛的完整录像,通常不会从头看到尾。他要找的是几类东西:丢球是怎么来的,边路突破为什么屡屡得手,某个替补上场之后节奏哪里变了。这些问题指向的其实只是全场里零散的一小部分画面。
以下为模拟场景:一场90分钟的业余足球比赛,去掉伤停、死球和场地外的镜头,真正发生进攻、防守转换和射门的时间合计大约八分钟。让人一段一段拖进度条,二十分钟会过去;让系统把这八分钟标出来,才谈得上第二步分析。半岛体育视频AI要解决的第一个问题,就是这个“标出来”,术语叫时间定位,也就是回答某件事从视频的第几秒开始、到第几秒结束。
为什么逐帧识别不够用
很多人对视频AI的第一印象是识别:这里有一个人,那里有一个球。这一步当然需要,但它只回答“画面里有什么”。一张截图里,一名球员脚下有球、身前有防守人,你无法判断他是刚接到传球,还是正准备起脚射门,还是已经射完球在庆祝。
体育事件是时间序列,不是一张图片。传球有发出和到达,抢断有接触的瞬间,也有随后的控球权转换;射门之后球是进了、被扑了、还是打偏了,要看后面几秒。模型如果只看单帧,就像只看一部电影的某一张剧照来猜情节。所以事件检测的输入必须是一段连续的画面,最好还带上声音和比分牌信息,输出则是“类型加起止时间”的一条记录。
近期公开的研究里,长视频理解被反复强调的一点正是这个:动作识别可以在几秒的短片段上做得很好,但一旦要在几十分钟的视频里定位事件,模型必须同时处理很长的上下文和很细的时间精度,这两件事天然冲突。
三段式流程:粗筛、候选、精定位
把两个冲突的要求拆开,是最实际的办法。系统不对整场录像做昂贵的精细分析,而是分三段逐步收窄范围。
| 阶段 | 输入 | 做什么 | 输出 | 可以容忍的错误 |
|---|---|---|---|---|
| 粗筛 | 低分辨率画面、运动量、镜头切换、音频能量 | 快速划出“可能有事发生”的时间窗 | 几十个候选窗口 | 宁可多留,不可漏掉 |
| 候选事件 | 候选窗口内的连续画面、球和人的轨迹 | 判断事件类型:射门、传球、抢断、犯规、死球等 | 带类型和置信度的事件 | 类型可以先给多个可能 |
| 精定位 | 事件前后的高分辨率画面、比分牌、哨声 | 确定起点和终点,合并重复检测 | 起止时间和事件链 | 边界误差要尽量小 |
粗筛的原则是宽松。它的任务不是判断,而是把明显没有事情发生的部分,比如球在场外、球员列队、长时间的回放和广告,先剔除掉。这一步如果误杀了真实事件,后面无论多精细都补不回来,所以阈值宁可设得低,多放一些窗口进入下一段。
候选事件阶段才开始认真“看”。系统在窗口里跟踪球和球员的位置变化,结合动作识别模型给出类别。精定位则是最费力的一段:事件的起点不是“球被踢出的那一帧”,而是整个动作意图开始形成的位置,终点也不一定是球入网的一帧,还包括庆祝或重新开球的必要停顿。
足球:一个进球之前的十五秒
还是以模拟场景为例。下面是某场足球比赛录像中一次进球的处理过程,时间是录像时间,数字均为帮助理解的模拟值。
- 第 61:12–61:15:防守方在中场被对方前锋压迫,出现一次抢断。粗筛因画面运动量陡增,将其放入候选窗口。
- 第 61:15–61:19:抢断后球权转换,持球球员向前推进。系统识别到攻防转换,事件类型暂标为“反击”。
- 第 61:19–61:22:一次向边路的直塞传球,球的轨迹被标记为穿透防线。这一步是后来判断“关键传球”的依据。
- 第 61:22–61:25:边路球员下底传中,禁区内多人跑位。
- 第 61:25–61:26:射门,球入网。比分牌变化被OCR识别,哨声和观众声音同时升高。
- 第 61:26–61:32:庆祝与重新开球前的停顿,作为收尾部分保留。
如果只检测“球进网”这一件事,系统得到的是 61:25 这一秒。可对一个想学习这次反击的教练来说,有价值的是 61:12 起的整条链。精定位阶段的工作,就是把这五六个小事件串成一个完整的“进球回合”,并把起点回溯到抢断。这个回溯长度并不固定,有些进球来自一脚长传,回溯只需要三四秒;有些来自持续的阵地进攻,回溯要到半分钟以前。更细的起点选择可以参考进球前到底应该从哪里开始剪。
篮球:一个回合里的多个动作
篮球比足球更密。24秒的一次进攻里,可能依次出现持球推进、无球掩护、挡拆、突破分球、防守协防、外线出手,最后才是投篮和篮板。这几个动作各占一到三秒,动作幅度小,球员之间经常重叠。
模拟示例:一次进攻回合从 12:40 开始,到 13:04 结束。系统在候选事件阶段把它切成若干个子事件,每个子事件有自己的置信度。挡拆在 12:47 前后被识别,因为两名进攻球员的位置在半秒内急速靠近再分开;突破发生在 12:52,协防在 12:54,最后一次分球和三分出手在 12:58。如果检测只保留最后的出手,这个回合最有战术价值的部分,也就是挡拆造成的错位,就丢了。
因此篮球事件的定位单位更接近“回合”,而不是“投篮”。回合的起止通常由控球权变化决定:对方投篮未中后的抢到篮板,或对方得分后的发球,是新回合的开始。这也解释了为什么篮球视频需要额外关注比赛时钟和24秒计时器,它们提供了很硬的时间锚点。
声音和比分牌,是视觉之外的时间锚点
画面并不总是可靠。远景机位里球只有几个像素,球员被遮挡时轨迹会断,转播切镜头时人物瞬间换了位置。这时候其他信号能帮上忙。
哨声是最干净的一种:裁判吹哨的时刻,比赛状态一定改变,无论画面上球在哪里。观众声音的突增可以指示某个事件的“发生点”,往往比视觉上判断得更快。比分牌和比赛时钟通过OCR读取,提供了独立于画面内容的时间坐标:比分变化的那一帧,是进球事件的硬性终点。
这些信号不用来单独下结论,而是用来互相印证。视觉认为这里有射门,音频也在同一秒有明显起伏,OCR读到比分同时变化,三个信号一致,事件的置信度就高;如果只有一个信号说有事,系统会把它放入“待复核”,而不是直接输出。多信号如何进一步融合,可参考为什么既要看比赛又要听比赛。
一个典型的误判案例
再说一个失败情形,仍是模拟示例。一场足球比赛里,某次角球开出之前,双方球员在禁区内互相拉扯抢位,人群聚集,运动量很高,观众也在起哄。粗筛把这段判为高活跃度窗口,候选阶段的动作识别模型看到大量人员快速移动,倾向于把它归类为“射门前的混战”。
实际上球还没有开出,这段时间更像一次“事件前的准备”。如果不加处理,系统会把这一段当作一个事件的开始,并把边界提前几秒,导致最终片段里出现一段对观看者毫无意义的拉扯。
比较稳妥的修正办法有两条。第一,引入死球状态:在裁判允许开球之前,球处于静止或在边线外,事件的起点不应早于开球时刻。第二,检查事件链的完整性:一个“射门前混战”如果之后没有射门,就应降级为普通背景事件。这样的规则简单,却挡掉了不少低级误判。
模型的限制与目前的处理方式
必须承认,事件检测目前仍有明显短板,而且不同场景差异很大。转播画面的镜头切换和回放会打断连续性,系统必须分辨回放与直播;业余比赛常常只有一台固定机位,球在远端时几乎看不清;夜间灯光、雨天和逆光同样会削弱识别。手机拍摄的竖屏、抖动画面更难,这一点在手机视频关键片段识别里有专门说明。
另一个限制是标注口径。什么算一次“关键传球”,什么算“一次有威胁的进攻”,本身就有争议,不同教练对“关键”的要求不同。因此系统输出的是带置信度的候选,而不是不可更改的结论;边界模糊的事件会保留调整空间,让使用者自己拖动起止点。
我们目前的设计思路是:宁可多标几个候选、让人快速确认,也不要为了显得干净而漏掉真正的事件。事件检测只是入口,之后才是战术理解与推理,这部分在让视频模型理解这一球为什么出现中继续展开。对于一个想从九十分钟录像里节省二十分钟拖进度条时间的人来说,能稳定给出“大致在这里,请你确认”的入口,已经是相当有用的东西。