问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

手把手搭建游戏AI—如何使用深度学习搞定流放之路

创作时间:
作者:
@小白创作中心

手把手搭建游戏AI—如何使用深度学习搞定流放之路

引用
1
来源
1.
http://www.0lu.com.cn/news/shou-ba-shou-da-jian-you-xi-ai-ru-he-shi-yong-shen-du-xue-xi-gao-ding-liu-fang-zhi-lu.html

近年来,科技巨头纷纷涉足游戏AI领域,DeepMind开源了星际2AI平台,OpenAI的人工智能系统也在Dota2中击败了顶级玩家。这些进展预示着AI将在越来越复杂的环境中向人类心智靠近。本文将手把手教你使用深度学习技术,为《流放之路》(PoE)开发一个游戏AI。

第一部分:概述

1. 顶层设计

《流放之路》(PoE)是一款类似于暗黑破坏神的动作类RPG游戏。我们的目标是开发一个基于视觉输入的游戏AI,使其能够在游戏地图中自主巡航和防御。AI的基本设计思路如下:

  • AI程序会不断从游戏中获取静态图像,并将其传递给卷积神经网络(CNN)。
  • CNN对图像进行分类,建立游戏世界的内部表征。
  • 根据内部表征,AI会规划一系列动作,并将这些动作转换为鼠标和键盘输入发送给游戏。

我们选择Python 3.6作为开发语言,主要使用以下库:

  • scikit-learn
  • TensorFlow
  • PyUserInput
  • win32gui
  • scikit-image

2. 免责声明

本文旨在探索人工智能和深度学习,不涉及任何版权或服务条款的侵犯。PoE的logo、美工均属于游戏开发商Grinding Gear Games(GGG)的财产,作者与GGG没有任何关系。

第二部分:为流放之路标定投影矩阵

1. 视觉输入的挑战

游戏AI与视觉输入交互的难点在于图像数据是2D的,而游戏世界是3D的。游戏引擎使用投影技术将3D环境渲染为2D图像显示在屏幕上。我们的目标是标定投影矩阵,使其尽可能准确地反映游戏世界。

2. 相机标定

相机标定是通过包含已知三维尺寸物体的图像来完成的。我们使用固定大小的箱子作为标定对象,通过TensorFlow构建非线性拟合模型。标定过程如下图所示:

3. 执行拟合

通过TensorFlow构建非线性拟合模型,标定投影矩阵。最终得到的投影矩阵如下:

方程式2:得到的投影矩阵

4. 结果

恢复出的相机位置为(5.322, -4.899, 10.526)。这个位置与直观感受基本一致,相机位于玩家前方约5个箱子长度,左侧约4个箱子长度,高度约10个箱子长度。

5. 假设和平移

假设角色仅在XY平面上移动,可以通过投影矩阵将像素坐标转换为世界坐标。考虑到相机的移动,需要在投影矩阵中加入平移矩阵。平移矩阵的计算如下:

方程式4:一个平移矩阵

第三部分:移动和导航

1. 移动地图类

AI需要维护一个世界地图数据结构,记录已访问位置及其类型(开放或障碍)。通过广度优先遍历可以找到最短路径。

2. 维度之间的映射

利用标定好的投影矩阵,可以将3D坐标转换为屏幕上的像素坐标。但是,直接点击鼠标移动角色时,位移技能并不准确,特别是在障碍物附近。

3. 闪电传送

为了解决位移不准确的问题,我们选择使用闪电传送技能。闪电传送只有两种结果:成功传送到目标位置或传送失败。这有助于保持AI的内部地图与实际位置的一致性。

4. 运动检测器

为了检测传送是否成功,我们构建了一个二值分类器,输入是角色周围70×70的矩形区域图像。通过手动构造数据集训练分类器,可以准确预测传送状态。

第四部分:实时屏幕捕捉和底层命令

1. 可用的库

使用pyscreenshot和ImageGrab等库进行屏幕捕捉效果不佳,帧率低且无法实现实时交互。因此,我们选择使用Windows API来优化性能。

2. 使用Windows API

通过win32gui库获取游戏窗口句柄,然后使用Windows API捕获游戏画面。需要注意以下几点:

  • 游戏窗口有无用的边框,需要去除
  • 图像边缘需要丢弃一些像素,使得高度和宽度分别为7和9的倍数
  • 位图数据需要从BGRA转换为RGB格式

3. 使用并行

为了实现实时捕捉,我们将屏幕捕捉逻辑放在单独的线程中,并使用线程锁确保数据安全。这样可以实现64 FPS的理论最大处理速度。

第五部分:基于TensorFlow的CNN实时障碍物和敌对目标检测

1. 分类系统架构图

AI需要从游戏画面中识别障碍物、敌人和物品。我们采用以下方案:

  • 将画面划分为7行9列的网格,每个单元格大小为88×84像素
  • 使用三个CNN分别检测障碍物、敌人和物品
  • 通过运动检测过滤静止的物品

2. 数据集

数据集包含14,000多个图像,大小为164MB,分为11个文件夹。数据集的截图如下:

3. 训练

采用适度的CNN架构,包含两个卷积和池化层序列以及三个全连接层。在NVIDIA GTX 970上训练需要5到10分钟,交叉验证准确率可达90%。

4. 使用并行以获得更好的表现

为了提高性能,CNN检测任务采用多线程并行执行。通过互斥锁确保数据安全。

5. 结果

最终的AI能够实现在《流放之路》中自主巡航和防御。以下是一个演示视频:

PoE AI素材

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号