连AI都在看《英雄联盟》游戏直播

简介:
本文来自AI新媒体量子位(QbitAI)

打游戏和看人打游戏,都是一种乐趣。

最近,吃鸡主播约战的事情峰回路转,最终还是没能上演。不光有人在游戏里使用外挂,看游戏直播的也有“外挂”,你信不信?这是真的。

观看游戏直播的群里体,现在多了一个特殊观众:AI。

AI在看哪个游戏的直播?不是最近大热的吃鸡,而是吃鸡制作人一直想要超越的巅峰:《英雄联盟》。

AI怎么看?以及为什么要看呢?

87466ea9c9158dbda0c867ac6b71191c986b0c53

Part I:为什么?

为什么一个人工智能要看游戏直播?实际上,直播背后是这样一种挑战——让AI实时理解视频中正在发生什么,以及预测未来会发生什么。

而游戏是最好的训练场之一。因为在游戏环境中,可以生成大量的训练数据,既容易又便宜。所以AI研究人员非常喜欢在游戏领域搞事情。

你应该知道,所谓视频,不过是快速变化的一组图片。速度大约是每秒显示30或者60帧画面。在《英雄联盟》这款游戏中,画面上有队友也有对手,每个玩家控制的游戏角色都不一样。对于一个看游戏直播的AI来说,起码要搞懂这几件事:

英雄是谁?出现在哪?他们攻击力有多强,以及如何攻击对手。

比方对于下面这么画面。

6bc30717c2da6cc6ea5dbf3c59079dc09dffc6ba

要能像下面这样提取出核心信息。

04a182a0a0106af9bd556b7c5855e5592cda8fb4

Part II: 如何做到?

怎么才能做到?先来看看整个流程。

首先引入一个直播视频流,抽出每一帧画面,然后用AI进行逐一分析。这里,通常使用OBS把捕捉的RTMP流,发送到我们的服务器上。

接着一个运行RTMP模块的Nginx服务器,会收集这些数据流。

然后一帧帧的画面被喂给AI,然后神经网络在每一帧画面上完成标注,抽取出游戏对战信息。这个AI运行在GPU服务器上。

简单来说,整个流程就是下面这张图。

9ae255fd29eab41a8f92ea1a5454efef06a057fd

Part III: AI的任务

在《英雄联盟》中,有上百种不同类型的英雄,AI需要能够认出他们。

3647ce4e5e865cf8fec7397424785bfc6f14c786

 四中不同的英雄

此外每个英雄都是一个能够全方位移动的3D模型,而且每个英雄都有不同的动作,AI需要在各种情况下认出对应的英雄,即便是乱战的背景下。

d29a08e56dd4766449a1797bc26636e0bff4c92e

 画面中的英雄会有各种变化

而且AI还需要搞清楚对手的位置。原因很简单,距离跟战斗息息相关。

由于是处理实时游戏直播,所以AI的处理速度得非常快,至少得能做到每秒处理60帧画面,也就是说每一帧的处理时间要在16毫秒之内。

这中间有些处理技巧,比方你可以投入更多的服务器来处理每帧画面。而且最近几年出现了很多处理实时视频的神经网络,直接从中选一个最好的来用就行。

Part IV:YOLO网络

YOLO是一个缩写,代表You Only Look Once。顾名思义,这个算法只看一眼,就知道一帧画面里都有什么(分类)以及都在哪里(定位)。之前的网络都是分两步完成,先进性分类,再进行定位。使用YOLO网络,两步变一步。

下面这个视频中,借用一段007影片,展示了YOLO如何工作。


YOLO网络是由一个传统的卷积神经网络,以及一个非常不同的最后一层以及损失函数组成。在最后一层中,YOLO网络需要包含分类和位置信息。

c2e9a45b9992ba444ac0f01a8e40e35a79808bc0

YOLO网络还需要进一步把输入分割成n×n个网格来描述位置,并在每一个单元上计算输出。

c4290e5006a8ed7f082f0202eea7783f9ca30e90

提高YOLO网络位置精度的诀窍是,仅对处于单元中间位置的对象进行预测。由于包含高度和宽度两个参数,所以对象可以跨越多个单元格。这种方法的缺点是,YOLO网络得想办法解决一个网格内的多个对象。解决的办法是复制每个网格中的输出层,这会导致非常大的输出层,参考如下公式:

n×n×m×(4+1+C)

关于YOLO,网上有很多相关资料可以进一步学习。

Part V:训练AI

想让AI干什么,就得用相应的数据训练。上文中的007视频是用现实世界中人和物的数据集训练的,想让AI理解电子竞技的视频流,我们需要用电子竞技视频流中的画面来训练它。

YOLO网络很有意思的一点是,由于它对每个网格都独立进行预测,我们可以用一个英雄来训练网络,当一帧画面中有多个英雄时,只要它们在不同的网格里,网络的操作是类似的。

这大大地简化了训练问题,因为我们我们只需要记录游戏中任何时间点,屏幕上只有一个已知英雄的画面。细节不重要,不过游戏支持训练模式,我们可以指定哪个英雄出现。

我们可以录制一个视频,然后从中提取图像。我们知道有一个已知的英雄,但在做更多工作之前,并不知道英雄出现在画面的什么位置。

输入画面看起来是这样的:

37f731ef3a1ac013cfb1492c8188c4d196376080

为了获取英雄的位置,我们可以利用它头上有个形状固定且不旋转的红条,也就是血槽这一事实。英雄可以在3D空间移动,但它头顶的红色血槽和他自己的相对位置总是固定的。

但还有一个要注意的小问题,不同画面上的血槽可能看起来不太一样,他可能是空的,也可能是满的,还有一些其他的视觉差异,比如说上面出现的数字。

03433253c856f4f87f10a9212190688a673cf1d6

所以,当我们寻找血槽时,需要一个无论它是满的还是空的,上面数字是什么,都能和它匹配上的特征。

很幸运,血槽周围区域和遮罩(mask)组合起来识别它。遮罩去除了有差异的区域,让一直不变的区域显示出来。

d17e6a5cce22735aaa76aac5eb8867de6bfa40b5

在OpenCV的代码里,就是这样:

cv2.matchTemplate(frame, template, cv2.TM_CCORR_NORMED, mask=mask)

由于视频有压缩,这种匹配永远不能达到完美,但只要我们能让匹配度维持在90%,就能从每一帧画面获取可靠的位置。

找到血槽的位置之后,我们可以断定英雄就在血槽下边。在一帧原始画面上运行图像分析,我们就得到了需要训练AI去识别的位置。

9ff95e16962b161ab03e10b27171c0fb7753d405

我们在一个小程序中运行图像匹配h器时,能以每秒60次的频率提取输入视频的帧,然后标记出角色和位置。这样,就能很快生成大量的训练数据。

实际上,我们还会选择以慢一点的速度来生成训练数据,每秒忽略一部分图像,这样能让图像之间差异更大。

最后,我们需要用这些输入图像和生成出来的角色、位置标签来训练AI。

我先尝试了用Inception v3模型进行迁移学习,来训练YOLO网络。网络在亚马逊AWS云p2.xlarge机器上,用每一类英雄1000张图的训练数据集训练48小时。

我想说,AWS的AI类服务还是挺贵的,每小时90美分,48小时的训练花了我40美元,几乎是普通服务器成本的10倍。

Part VI:AI表现如何?

我们用一些录制好的视频,试试看效果如何。首先,测试只有一个英雄的画面。


YOLO在这段视频中表现良好。英雄出现在画面中时,能被正确识别身份和位置。没有英雄出现的时候,网络也能正确对待。不错!

不过涉及到多个英雄时,效果就没那么好了。比方下面这段视频,画面中有两个英雄,开始他们相互接近,然后又各自逃开。


当两个英雄重叠时,AI有时只能辨认出一个英雄,而不是两个。坦白说这也不奇怪,毕竟人眼可能都很难弄清楚实际情况。比方下面这帧画面中,应该有两个英雄:牛头酋长(Ali)和盖伦(garen),但AI只能正确认出一个。

70f2b0b66792276847f0982ade6277747e790c78

还有一个问题。当两个英雄重叠时,AI有可能会把他们认成一个完全不同的英雄。这显然是一个不好的结果。比方下面这帧画面中,虽然只是一秒钟,但AI既没有认出Ali,也没有认出garen,却认为画面中是特兰德尔(trundle)。

b72c0ba19944da1bb1383168d4e6d256432142b2

当两个英雄分开,识别又正常了。

18c4f966269852a9ee217985c9842f8ba8aa5cfa

未来,我们可以有针对性的用重叠的英雄来训练AI。

Part VII:总结和后续

好的一面

  • 追踪英雄表现良好。大多数情况下,AI都能判断英雄的角色和位置。
  • 速度很快,每帧的处理时间为50毫秒。
  • AI可以在一帧内识别多个英雄,即便训练基于单个英雄完成。
  • 只在标准的云平台上就能做到这些。

差的一面

  • 还处理不好位置重叠的英雄。
  • 现在速度虽然不慢了,但想要达到每秒60帧的标准,必须使用多个GPU交错输出。

接下来,还想尝试不同的网络,不同类型的游戏。关键的是,想找到一个真实世界的案例,可以围绕直播视频用AI搭建一个产品。

好吧,今天就说到这里。

大吉大利,中午吃鸡。

本文作者:李林 问耕
原文发布时间:2017-09-09 
相关文章
|
3月前
|
人工智能 算法 数据库
给AI装上一个'超级大脑':信息检索如何改变RAG系统的游戏规则
从传统检索方法到现代向量检索,通过一个购物助手的故事,直观展示了不同检索技术的原理与应用。学会这些技巧,让你的AI不再是「记忆只有金鱼长度」的大模型!
200 24
|
3月前
|
机器学习/深度学习 人工智能 算法
当AI提示词遇见精密算法:TimeGuessr如何用数学魔法打造文化游戏新体验
TimeGuessr融合AI与历史文化,首创时间与空间双维度评分体系,结合分段惩罚、Haversine距离计算与加权算法,辅以连击、速度与完美奖励机制,实现公平且富挑战性的游戏体验。
|
11月前
|
存储 人工智能 运维
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
566 48
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
|
4月前
|
人工智能 JSON 程序员
别再和AI玩文字游戏:JSON提示工程让AI乖乖按表填空
厌倦了和AI玩猜谜游戏吗?JSON提示工程来拯救你!用咖啡订单的方式和AI对话,让每次交互都精准到位,告别模糊不清的回复,迎接可预测的AI输出时代。
|
8月前
|
人工智能 自然语言处理 前端开发
DeepSite:基于DeepSeek的开源AI前端开发神器,一键生成游戏/网页代码
DeepSite是基于DeepSeek-V3模型的在线开发工具,无需配置环境即可通过自然语言描述快速生成游戏、网页和应用代码,并支持实时预览效果,显著降低开发门槛。
1529 93
DeepSite:基于DeepSeek的开源AI前端开发神器,一键生成游戏/网页代码
|
9月前
|
人工智能 开发工具 C++
利用通义灵码AI在VS Code中快速开发扫雷游戏:Qwen2.5-Max模型的应用实例
本文介绍了如何利用阿里云通义灵码AI程序员的Qwen2.5-Max模型,在VS Code中一键生成扫雷小游戏。通过安装通义灵码插件并配置模型,输入指令即可自动生成包含游戏逻辑与UI设计的Python代码。生成的游戏支持难度选择,运行稳定无Bug。实践表明,AI工具显著提升开发效率,但人机协作仍是未来趋势。建议开发者积极拥抱新技术,同时不断提升自身技能以适应行业发展需求。
22599 18
利用通义灵码AI在VS Code中快速开发扫雷游戏:Qwen2.5-Max模型的应用实例
|
存储 人工智能 关系型数据库
拥抱Data+AI|解码Data+AI助力游戏日志智能分析
「拥抱Data+AI」系列第2篇:阿里云DMS+AnalyticDB助力游戏日志数据分析与预测
拥抱Data+AI|解码Data+AI助力游戏日志智能分析
|
人工智能 NoSQL 安全
MongoDB观点:让生成式AI成为业务增长的新动能,游戏公司可以这样做
游戏公司采用检索增强生成(RAG)技术,如MongoDB Atlas Vector Search,以提高AI输出的准确性和定制化服务。通过灵活的文档数据库如MongoDB Atlas,企业能更好地集成AI,确保数据安全并抓住创新机遇。ChatGPT标志着AI时代的转折点,游戏公司凭借大量数据优势,有望在这一变革中引领行业发展。
3094 3
|
人工智能 知识图谱
轻松搭建AI版“谁是卧底”游戏,muAgent框架让知识图谱秒变编排引擎,支持复杂推理+在线协同
蚂蚁集团推出muAgent,兼容现有市面各类Agent框架,同时可实现复杂推理、在线协同、人工交互、知识即用四大核心差异技术功能。
311 2
|
存储 人工智能 关系型数据库
拥抱Data+AI|玩家去哪儿了?解码Data+AI如何助力游戏日志智能分析
本文为阿里云瑶池数据库「拥抱Data+AI」系列连载第2篇,基于真实客户案例和最佳实践,探讨如何利用阿里云Data+AI解决方案应对游戏行业挑战,通过AI为游戏行业注入新的活力。文章详细介绍了日志数据的实时接入、高效查询、开源开放及AI场景落地,展示了完整的Data+AI解决方案及其实际应用效果。

热门文章

最新文章