手把手搭建游戏AI—如何使用深度学习搞定流放之路
手把手搭建游戏AI—如何使用深度学习搞定流放之路
近年来,科技巨头纷纷涉足游戏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素材