我们如何用神经网络取代运动侦察员


是的,的确,我们能够取代运动侦察员神经网络,并开始自动收集有关比赛的数据。 现在,我们对体育赛事的了解比对听众,甚至对裁判的了解要多。

我们( Constanta )专门从事IT博彩产品的开发:移动应用程序,站点,最近,我们正在开发计算机视觉和机器学习领域的项目。 将讨论其中之一。

在运动员争夺大小胜利的同时,庄家需要实时了解比赛的进程,以便重新计算系数,根据该系数,实际上可以接受投注。 为此,直接在操场上的运动侦察员使用智能手机上的特殊应用程序收集并传输大量数据。 侦察员和我们所有人都是同一个人,因此自然会产生与人为因素相关的风险。 我们的目标是最大程度地减少它们,同时增加数据收集和传输的数量和效率,此外-降低所有这些工作的成本。 一个小球飞过网球桌或足球场上的球-用于收集数据的计算机视觉系统的技术方面没有概念上的区别。 我们认为,立即为台球等具有大量相互作用的球的游戏构建一个系统会更有趣。


我需要所有球的坐标和速度以及提示。

请注意,在分析许多运动游戏以正确确定结果时,必须准确跟踪事件链。 因此,对负责确定这些事件的组件的可靠性提出了很高的要求。 让我们在一个简单的例子中进行解释:如果平均而言,玩家将所有球掷入口袋中进行20招,那么凭借确定击球结果的可靠性为99%,确定平局中获胜者的可能性仅为82%(0.99 20≈0.817)。 一场比赛最多持续赢得一名玩家的五场胜利,也就是说,平均7场比赛,进行5到9次平局。因此,平均而言,凭借这种确定事件的可靠性,可以以大约24%(0.817 7≈0, 24)。 但是最初出现错误的可能性仅为1%!

九池


从各种台球游戏中,考虑Pool-9。 赢家是将9号球塞进口袋的球员。 最初,“九”位于彩球菱形的中心。 母球应击中的瞄准球是桌上最小的球。 例如,如果玩家无法得分一个彩色的球或犯规,或者没有在洞中击中瞄准球或未在母球上得分,则此举归于对手。 为了正确地得分,有必要确定口袋里的球的击球以及导致球员更换的所有事件。

电脑视觉


首先,让我们谈谈神经网络如何接收数据。 输入信息流-从位于桌子上方的一台摄像机进行视频广播,并以每秒60帧的频率拍摄。


系统处理的视频流帧的示例。

通过神经网络处理视频流的关键阶段是语义分割。 这是计算机视觉的经典任务,其特征在于该算法应将图像像素分配给一个或多个类别。 简而言之,在视频帧上,您需要确定什么是什么。 神经网络产生“蒙版”,突出显示与例如球或球员相关的像素。 经过一系列的后处理算法后,球的“蒙版”变成坐标。 根据它们,在通过过滤器平滑之后,对于每个球,确定运动的速度和轨迹。 在此阶段,将跟踪低级或中间事件,例如球彼此之间以及与桌子侧面的碰撞。 接收到的数据被发送到规则处理模块,该模块实现游戏的整个逻辑。 最后,他将其提供给最终消费者,即 庄家,高级别赛事:将球撞到口袋,犯规,动作转变以及实际上是比赛的结果。


系统的总体方案。

为了解决该问题,首先,必须找到桌子在框架上的位置以及框架上所有的球。 动作的另一个重要参与者是提示,由他确定击打的方向,并因此确定提示球的路径。 玩家在桌子上弯腰,部分遮盖了相机。 从游戏分析的角度来看,它们是“异物”,就像是球的架子,还有手机,手套,餐巾和其他根据玩家的意愿出现在桌子侧面的东西。 因此,获得了几种用于图像语义分割的目标类别:桌子,桌子的侧面,口袋,球杆,异物,当然还有球。 此外,每个球都根据其颜色由单独的类别表示。

对于语义分割,使用具有LinkNet-34体系结构的全卷积神经网络。 它工作相对较快,并且已在计算机视觉竞赛的各种“战斗”任务中证明自己。 为了确定以上类别的类别,仅使用一个神经网络即可解决计算机视觉的所有问题。


LinkNet-34网络体系结构(请参阅arXiv )。

输入图像,并在输出处获得所有必需类别的“蒙版”堆栈。 “预测掩码”是具有从0到1的值的数字的二维数组。“掩码”的每个元素的值对应于网络的置信度,即相应像素属于此“掩码”的类别。 对于像素的最终分类,通过阈值滤波器对获得的预测进行二值化。

您可以训练神经网络,以使用相应的“蒙版”对大量示例中的像素进行分类。 为此,我们收集了很多视频,分为帧,然后标记部门为它们手动准备了“蒙版”。 在困难的情况下,需要其他数据集。 例如,当一个球“跳进”一个口袋或站在桌子旁边靠近它的地方时,阴影就会落在它上面,因此颜色看起来会有所不同。 或者,当玩家打断菱形时,球会沿着复杂的路径快速飞行,这就是其图像模糊的原因。 如果神经网络“看到”了一些这样的例子,那么正确的分类将很困难。


图像及其对应标记的示例。 神经网络的任务是从输入图像中获取此类“蒙版”。

更快,更快,甚至更快...


数据的最终用户需要实时信息(甚至更好-比实时更快)。 使用了多种技术来加快神经网络的速度,例如将数据包归一化与2D卷积(BatchNorm Fusion)结合使用,从而使您可以获得一个没有多层的等效网络。 与在视频卡上处理前一帧并行地准备和加载新帧也得到了很好的结果。 另外,在gpu上进行了部分人员准备操作和“蒙版”的后处理。 甚至一个简单的想法也有助于减少每一帧的总处理时间-在将二进制二进位化后以uint8的形式而不是从float32网络接收到的结果,将网络的结果从视频卡传输到RAM。

结果,一帧的语义分割以及所有所需的预处理和后处理平均仅花费17 ms! 对于系统的运行,仅一张游戏视频卡就足够了。

有冲突吗?


我们通过“蒙版”确定球的坐标,但首先我们需要排除仅类似于球的事物,例如,球员T恤上的圆形条纹。 启发式在这里发挥作用:众所周知,球的形状和大小以及它们相对于过去的位置。 此外,如果一切与“遮罩”保持一致,则将其质心用于处理。


台球选手在开发者的可怕梦想中。

乍看之下很奇怪,但事实是,即使对于静止的球,确定球的位置的结果在不同的框架之间也会有所不同。 解释很简单-真实视频的“噪声”,即视频流压缩伪像,再加上确定运动球模糊图像位置时的错误,必须使结果平滑。

根据从网络接收并在先前帧中确定的球的坐标,将速度估算为数值导数。 在系统操作过程中,根据数据的可用性和诸如冲突之类的事件,可以自适应地选择要考虑的点数及其之间的间隔。 然后,有关球的位置和速度的信息将发送到卡尔曼西格玛点滤波器 。 它使您可以消除嘈杂的数据,这对于确定速度及其方向尤其重要。 此外,动态模型的结果可用于预测不久的将来。


演示了通过卡尔曼滤波器平滑确定球的位置和速度的方法。
左: Raw:直接测量的结果,球的矢量对应于速度,数字表示速度的估算值; UKF:过滤结果。
右:使用卡尔曼滤波器平滑球速度方向的示例。 蓝色显示测量结果,红色-过滤结果。 方向上的突然跳跃对应于球的碰撞。

有关球的状态和轨迹的数据可以确定所谓的低水平事件的发生,即使它落在“帧之间”。



球在击球过程中移动得如此之快,以至于通常没有框架直接显示事件,例如,球的碰撞。 因此,对于所有类型的交互(球彼此碰撞,与木板碰撞或掉入洞中),首先构建可能事件的列表。 有两个条件。 首先,球的紧密紧密的相互布置。 当缓慢移动时,在确定速度和轨迹时会存在较大的相对误差,因此,相互作用对象之间的距离很重要。 其次,在球的高速运动中,可能的事件由从动态模型获得的轨迹的交点确定。 这种方法提供了非常不错的好处:能够提前一点预测口袋中球的可能命中的能力。


在菱形从球中初始破裂期间,视频流的顺序帧。 没有描述球轨迹的模型,很难确定母球面对哪个球。

速度矢量的方向和大小的变化使我们能够判断是否发生了事件,即碰撞。 如果球滚入口袋,则“消失”。 但是有一个重要的观点:必须使用其轨迹上的数据并验证球是否被精确地锤击,并且不会由于玩家的手或其他物体意外地在球的上方而从摄像机的视野中消失。

如果出了什么问题? 假设某些事件是由于丢帧或桌子上悬挂着玩家的身材而导致的。 这种遗漏对于游戏逻辑至关重要。 节省了启发式自动校正系统,可以提高系统的稳定性。 例如,如果检测到母球击中并且目标球掉入洞中,但未检测到母球碰撞并且其他球保持静止,则逻辑上是将母球与目标球相加。

那我们玩还是不玩?


球滚动,碰撞,掉进口袋里……但是比赛真的在那一刻进行了吗? 或者相反,桌上的所有东西似乎都动摇不了...那么游戏已经停止了吗? 对这些问题的正确答案可能与碰撞的定义一样重要。 当玩家准备击打,思考击打,瞄准时,没有动作。 但是它确实发生了,反之亦然,在非游戏时刻,桌上的生活可以非常动态地进行:堵塞的球从一个口袋移到另一个口袋,在犯规后将母球安装在桌子上时可以在桌子周围滚动,并且这样做包括了球杆的尖端(非常类似于打击!) ) 如果可以很容易地确定当前击球的终点-在正确击球之后,所有球都停止移动,那么从开始到现在,一切都不太清楚。 当然,您可以训练神经网络来检测视频中的事件,包括母球上的真实母球打击。 然后,您可以进行一组启发式分析,分析提示的位置和角度,提示的轨迹和速度以及提示球撞击后的提示球的轨迹。 我们走了第二条路,结果是一个非常快速和可靠的算法,它确定了游戏的当前状态。


系统正在尝试了解游戏是否已经开始。

谁最终赢了?


所有有关低水平事件的数据(击打母球,球的位置和碰撞,落入口袋)都发送到模块,该模块从其顺序确定是否发生了犯规或球已正确落入洞中,移动已经过去或比赛结束。 公正的模块得分并宣布获胜者。 它的独特之处在于它可以在没有任何自动更正和启发式的情况下正常工作,只需正式应用游戏规则即可。 规则块可以完全替换,从而使您可以将其适应比赛的当地规则,而无需在系统中进行大量干预,也可以使用它来处理其他类型的台球游戏。
由于无人驾驶汽车仍没有完全摆脱机舱内的负责监控安全性的测试工程师,因此我们的规则模块允许通过Web界面进行外部手动控制。 如果自动系统出现故障,可能需要干预。 此外,您需要手动输入视频流中未包含的数据:有关新手玩家的信息,在游戏中通过语音宣布的特殊点击数等。 一个人可以一次监视多个游戏。

如何运作


成功启动和设置系统后,我们不仅开始接收所需的数据,还发现了很多有趣的东西。 因此,有时候法官在桌子旁无法确定母球是击中瞄准球还是站在附近的另一个。 虽然我们系统的客观视图使我们能够看到实际情况如何发展。 另外,该系统收集了大量有用的信息,可用于进一步分析,而一个人根本无法实时确定和传输这些信息:球的位置和速度,每个球杆的击球参数。


当前,该系统可以正常运行并由博彩公司使用。 将来,计划改进该系统,包括添加自动识别玩家,自动确定首发结果的功能。


系统工作方式的技术可视化。 “母球”旁边的球表示母球面对的第一个球;反之亦然。 “状态”-系统的状态:当球运动时,它可以是“等待”-直到玩家击中,然后是“比赛”。 “玩家”-当前玩家; 球周围的数字表示以厘米/秒为单位的速度估算值。

Source: https://habr.com/ru/post/zh-CN430030/


All Articles