2. 通过线性插值逻辑补全
网球场关键点检测
部分验证
开源方案会丢失或误判一些关键点
1. 对开源方案的模型进行微调
2. 通过其他非机器学习方法来判断(网球场的几个点特征过于明显,也许有更简单的方案)
网球场标准化
逻辑上没有问题
暂无
暂无
人物、网球轨迹投影到标准化网球场
逻辑上没有问题
暂无
暂无
数据整合
无需验证
暂无
暂无
数据分析框架搭建、可视化设计
无需验证
暂无
暂无
画面分类
图片上用白色框线标注的都是不同画面类型的固定元素
除了比赛画面,游戏中还有不少其他类型的画面会被一并录制下来,例如准备画面、分数画面和回放画面。这些画面都有如上图所示固定的特征,可以被用来排除画面,或者从画面中提取有用的数据(例如比赛得分)。
画面中还有一些其他元素,例如失分 / 得分类型(出界、没过网、两次落地),也可以通过机器学习进行提取。
整体来讲,这里没有难度。
人物追踪和网球轨迹追踪
我之前虽然做了一段时间的数据分析师和研发工程师,但没有真正上手过机器学习项目,更是对「计算机视觉」这听起来就十分艰深的领域望而却步。久闻 YOLO 大名,这次在 AI(以及投稿 DDL)的加持下,居然也能磕磕绊绊地上手了。
YOLO(You Only Look Once)是一种实时目标检测算法,广泛应用于计算机视觉领域,通过海量的真实世界数据集,对 80 个大类进行了预训练,其中就包含了 和 sport ball 。作为一名调包侠,我最先想到的,就是试试 YOLO 的基础模型表现如何,能少做一点是一点。
所有人都被识别为 `` 类别(受限于 GIF 大小,只截取了几秒钟,实际情况是每个人的 ID 都一直在变,如同我方后场)
游戏角色的设计更有卡通风格,和真实人类有一定不同,不过对每一帧画面识别出来「这是一个人」没有问题,置信度也在 90% 左右。但对于连续的多帧画面之间追踪「这是同一个人」,就有些问题了。可以发现,随着时间的推移,每隔几秒钟,游戏角色被分配到的 ID 就会变化。这就说明,虽然 YOLO 仍然认为「这是一个人」,但却不认为前后两帧是「同一个人」。这就会给后期的数据分析带来麻烦。
解决问题的思路有两个:
第一,降低 IoU 的门槛值。
虽然 AI 帮我写了代码,但仍需我们研究一下 YOLO 是如何跨帧追踪人物的,理解了模型的工作原理,才有可能提高其表现。模型中有一个参数是 IoU ( over Union),意为「前后两帧的检测对象之间,交叉重合部分占整体并集的比例」,取值范围在 0 到 1 之间,默认为 0.5。
IoU 设置得越高,越要求前后两帧检测对象之间变化较小(很符合直观逻辑)。 IoU=1 代表两帧的检测对象完全重合,那么自然可以判定为同一个对象;IoU=0 则意味着两帧中的检测对象毫无交集,例如严重跳帧的画面,尽管视觉上我们能肯定这就是同一个人,但模型无法识别。
将 IoU 降低至 0.1 后,问题并没有得到任何改善。我想到 录屏只有 帧,将视频转化为一帧帧的图像后,确实能发现前后帧之间同一个角色的变化较大,有时候是动作忽然大幅变化,有时候是人物角度发生变化。我想到,也许提高清晰度和帧率能够改善问题,便去 B 站上下载了其他玩家通过采集卡录制的 帧的视频,拿来做分析,发现是同样有这个问题。于是放弃了这个方案。
第二,不再关心 ID,只关心场上的四个球员。
YOLO 能够对画面中每一个出现的潜在对象进行检测,这就导致了一个副作用:游戏中的观众也会被识别并标注出来,一些圆形的元素也会被识别为网球。虽然可以通过一些方法(例如球场内外的坐标)将其过滤出去,但最好能在一开始就确保输出数据的精简干净,减少后续不必要的工作量。
于是我想到,不如对模型进行训练,训练它认识我球场上的每一个球员,而不是把他们统一识别为 而后赋予一个随时变化的 ID。但如何微调模型,这又涉及到了我的知识盲区,AI 给出了完整的工作流程,并告诉我可以试试 Label 进行数据标注,这是一个开源项目,可以部署到本地使用。
我将一个 30s 录屏转化为每帧一张图片,便得到了大约 900 张图片,然后从中每 10 张抽取一张进行数据标注。
Label 标注页面,可以看到场上的四个球员和空中的网球上都有边界框
开始标注的时候,我一边有点焦躁(因为很抗拒做这类数据苦力工作,并且还不知道费时标注的数据能不能用),一边却逐渐进入一种类似心流的状态。在做这些工作的时候,我完全不需要思考,只要鼠标在画面上拉上一个个边界框,然后点击「提交」即可,颇有种《人生切割术》中 们跟着直觉收集数字的沉浸感。
一个半小时后,我标注了 30 张图片,远远少于 AI 给到的几百张的建议。但我决定到此为止,先试试再说。毕竟,几百张图片的标注少说要耗掉一整天,万一最后还没效果,那可亏大了。
微调后的模型能够准确识别四个球员,场边的观众也不会被误识别了
不知道是因为游戏画面的特质,还是 YOLO 的基础模型太优秀了,我这 30 张图片的微量数据集,居然起到效果了,我换了另一段录屏来做人物追踪,可以发现四个球员基本都被标注上了,虽然 ID 在变化,但我可以直接用球员名字来定位了。追踪偶尔有丢失,这应该可以通过后续更丰富的数据集来解决,也可以通过线性插值的方式填补上。
Elisa、Tommy 以及我方前后场球员都被正确预测了,而网球则大部分和背景混到一起了
另外,我在标注的选手时候还顺手标注了网球,查看标注。但上文中的 GIF 可以看到,网球几乎没有被识别出来。通过模型训练后返回的 可以发现,网球基本都被识别为了 ,也就是和背景网球场混到一起了——这时候我才发现自己选择场地失误了,网球和草地球场都是绿色的,在 720P 的分辨率下确实模糊一团,有时我自己都看不清球在哪里。
红土球场和黄蓝网球对比更明显
换成红土球场后,网球是黄蓝的,对比相当明显。时间所限,我还没有对这个假设进行数据标注和模型训练,但我认为逻辑上是行得通的,特别是之后我会换成采集卡录屏,训练集数据量、画质和帧率的提升也会产生一定帮助。如果实在不行,网球还有地面上的深色投影可用,这个通过 的形状检测就可以识别,因此回溯其大致的轨迹还是能做到的。
识别网球场地关键点 & 形状透视变换 & 位置关系投射
左图:游戏中的网球场,看起来是一个梯形
右图:一个理想化进行网球轨迹分析的网球场平面图 (Photo by on )
由于游戏中相机视角是在一定高度从我方俯视场地,并跟随我方球员的位置进行一定的前后左右平移,这导致网球场地是一个一直在画面中移动的梯形。为了使得在后续数据可视化中能够将球员位置和网球轨迹映射到一个标准长方形场地上,还需要采集每一帧中场地的关键点,并通过一定的透视变换算法将其标准化。
注意网球场直线交点处的红点,便是开源项目的预测结果
我找到了一个 开源项目,试着运行了一下,能够检测出部分关键点,但整体效果不太好,有一些关键点的缺失和误判。不过,这说明项目的思路是值得参考的,至少有一部分的节点通了,也许后续我也可以像借助 YOLO 的基础模型那样,标注一些数据集来进行微调。
由于视角变换,有时候球场位于我方的一部分会在画面之外,这个时候可以通过其他关键点的位置信息、线条的比例关系、直角的扭曲程度等,来计算球场中部分缺失线段的汇合点。
这些还需要进一步实现(我认为可以做到),主要目的是为了能够分析「谁在何时何地将网球以怎样的速度和方向击出」这一比较细致的数据。
关于后续的数据分析
按理来说,作为一个数据分析师,我应该在这里提供一份完善的数据分析框架,让大家知道我会对哪些维度进行怎样的分析,有什么值得关注的亮点。
一方面是时间所限,这几天投入在了 YOLO 的学习和应用上,没有留够时间来思考一个逻辑严密的框架。只有前面的流程走通了,才有后面可供分析的数据。另一方面是,我确实还没想好这些数据应该怎么分析——作为一名运动苦手,除了 网球,我几乎没有所谓的「领域知识」。必须得拿到数据之后,边打边思考,才能产出有指导价值的框架。若是照搬 AI 提供的分析框架,未免有些「为了完成任务而糊弄一下」,有敷衍读者之嫌。
但根据我这些年从事数据分析的经验,精彩的观点往往产自框架之外。
各位可以参考「为自己寻找进步的『口径』」这一小节里,我提及的各类进步。这些自我观察虽是不成体系、没有完整数据支持的「感受」,但也确实体现了某些模式——毕竟,我们的大脑时时刻刻都在进行深度神经网络学习。同时,若感兴趣,还可以参考 这篇文章,我自认为这篇文章一定程度上体现了「从看似平平无奇的数据中发掘有价值的洞察并转化为解决方案」的能力,相信我对 网球的数据分析也会有别出心裁之处。
项目的预计产出形式一个应用 / 服务
一个输入 网球录屏后能够自动抽取、分析 NPC 对打的比赛数据(包括单场比赛和长期多维分析)的应用,这些分析会结合专业网球赛事的关注点和我在 2025 年打 网球积累的非常规维度,具有一定的个人特色。数据展现以可视化看板为主,并在网球平面图上还原对应轨迹,用户也可自行组合维度进行分析。
考虑到视频处理成本较高,如果是网页服务会按次 / 视频时长收费,如果是本地应用则支持买断。
几篇长文
2-4 篇长文,其中一篇会是我这一年在 网球上的进步(我相信到 2025 年年末至少能和传奇 NPC 打个有来有回),比如这些进步是如何在每一个微观层面上累积的、我又如何在这些失败和进步中去体会专业运动员在纪录片中的表现;另一篇则会是文章开头提到的,我如何将 网球融入我的专注力工具箱,实现整体精力管理能力的提升。
其他文章的方向和主旨不太确定,读者可以参考这两篇个人成长领域的文章(1 & 2),大概率当我充分掌握一项新技能时,我的内在又会发生一些良性的转变,我希望在少数派传递这份「可复制的希望」。目前能想到的选题包括:
教练的本质:在豆瓣发现了一本书名为 《教练的本质——回放式探究的运用指南》,还没有买来读,看简介似乎是一种可泛化、迁移的概念,还不确定是否能对我产生帮助,但这个书名确实吸引到了我。我的项目要解决的一个问题就是将「回放」分类汇总,以帮助用户产生洞见,从而调整行为,并最终取得进步。这种「回放」技术能否被运用到更多领域、如何确保它在其他领域能够和运动领域同样有效?陪练与刻意练习:传奇 NPC 非常难打,但我也能感受到,和他们对打几次之后,自己的反应速度提升了,再回头打超强 NPC,明显感觉比以前容易了,所以不少人把传奇 NPC 当高水平的陪练。而如何从陪练那里有效提升自己的水平,也是一个值得思考的话题。热手效应:该游戏中有一个机制,在网球抛出的最高点击球,可以发出高速球。这个时机很难把握,但我发现如果有一次成功,那么后续就很容易连续多次都发出高速球,而如果失败了,就会很长时间不能触发。同理,在《塞尔达传说》中,面对守护者发射的激光,只要我成功一次,一般就能连续三次将其盾反,但如果失败了,就倾向于一直失败,这显然不是随机分布的。有一本同名书专门讲了这个话题(不过评分比较低),我会在阅读后看看是否有可延伸的话题。与无意识合作:超强 NPC 和传奇 NPC 的前场选手会出其不意地截杀,当我思考要不要回击时,就会丢掉这一分,但其实我的手已经不自觉地抖动想要回击了——「自我」深思熟虑的倾向,破坏了身体的直觉——这让我想到了经典的网球书籍《身心合一的奇迹力量》所提到的「自我 1」和「自我 2」。在球场内外,我们的自我该如何与无意识合作?以及一个不算产出的目标
如果第二代 能在今年按时推出且向前兼容旧游戏,我绝对不做国行勇士,并且要联机和真人对打,达到 A 段。
希望我们找到各自进步的度量衡,并在赛场较量一番!
> 关注少数派小红书,感受精彩数字生活
> 实用、好用的 正版软件,少数派为你呈现