Press "Enter" to skip to content

GameAISDK模仿学习研究

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

模仿学习(Imitation Learning,后面简称IL)的思想就和它的名字一样,借助“专家”示范样例,机器会记住这些样例,并模仿着做。

 

GameAISDK中的IL沿用了上述思路,使用训练集和验证集两个样本集,样本由截屏与行为的映射信息组成。训练成模型后传入截屏进行行为预测,预测结果为对应需要执行的行为。

 

一些名词解释

UI – 用户界面,这里指游戏里用户可以点击、滑动的特定按钮与区域;
SDKTool – GameAISDK自带的客户端工具,用来设置UI识别行为与样本录制;
Adb – Android调试工具;
Minicap – 效率很高的截屏工具;
LSTM – 长短期记忆人工神经网络;
GRU – LSTM变体,有比较优于LSTM;

配置与样本录制

 

配置上面和IL直接相关的主要有两个配置文件:ImitationAction.json和ImitationLearning.json

 

ImitationAction.json主要是配置模仿行为, 官方说现在支持点击,滑动,罗盘。但是罗盘不好用,经过测试只有点击和滑动是好用的 。

 

ImitationLearning.json主要是IL训练与预测相关的配置,官方文档对配置字段都有解释,这里提一个 非常有用的字段actionAheadNum 。

 

actionAheadNum的作用是把截屏对应的行为提前,比如有100组截屏与行为的对应,如果actionAheadNum=8那幺调整过后截屏[0]=行为[8],截屏[1]=行为[9]依次类推下去。

 

它可以比较好的修正因为预测耗时和网络传输耗时导致行为“反应慢”的问题。缺点是有时候小概率会有“非预期”的结果。

 

样本录制的原理是用了Adb与Minicap,默认是1秒10帧,这个速率可以调整。一个需要注意的点是:因为游戏场景和大厅场景一般来说有很大的不一样,如果你是在进入游戏场景之前就开始录制,出游戏场景之后才结束录制,那幺可以“掐头去尾”,把与游戏场景不相关的截屏去掉(同时注意修改excel文件),可以提高训练准确率。

 

IL训练

 

预处理

 

GameAISDK会根据isSmallNet这个配置将样本图片预处理成50×50(默认配置isSmallNet=true)或者150×150的图片。这一步根据样本大小,持续1分钟至10分钟不等,当时主要是利用Opencv的库。

 

这幺做的目的在保留特征信息的情况下,降低计算量,具体为什幺是50×50或者150×150,这个有待官方说明,可能只是一个经验值。 但是150×150的尺寸非常不好用,实际使用下来预测误差相对有点大 。

 

IL训练过程

 

整体流程可以参考下图:

训练核心主要利用了Tensorflow Keras,使用了自行构建了CNN网络,以50×50图片尺寸为例,网络构成如下:

 

卷积->卷积->池化->卷积->卷积->池化->卷积->卷积->归一化->稠密->修正线性单元

 

最终每次迭代都会产生模型h5文件,但是实际使用只有当中没带下标的一个。使用GPU能显着降低训练时长,若使用GPU需要注意隐藏的坑,因为GameAISDK默认Cuda和Cudnn版本问题可能会和显卡驱动不匹配。

 

若更新Nvida这一套开发组件,Tensorflow对应也需要升级,Tensorflow升级了在训练那块的代码也需要修改(特别是从1.x->2.x很多库位置与接口都变化了)。这点在上篇博文也提到过,属于搞AI人人都要经历的环境问题。

 

模型预测

 

在AIClient利用了Adb与CloudScreen(应该是鹅厂wetest的组件,未开源),默认是1秒10帧,每帧的图像经过预处理发送至Agent那边做预测,将预测的结果反馈至手机(中间一些消息传递工程化的东西这里不详述了,否则又是一长篇)。

 

从预测到反馈至手机这里其实这里有很多“理想与现实的差距”,做到完全模仿是不可能的,随着游戏模仿的深入误差会不断加大,为什幺?

在样本录制的时候误差就产生了,比如按压行为,我们实际按压的是180ms,但是样本记录了2帧,也就是200ms。你可以说增大帧率,这样确实可以减少误差,但是不能消除误差,而且增大了样本体积,加长了训练时间,是一个tradeoff;
进行模型预测时,截屏从手机端网络传输至GameAISDK,预测后行为返回手机端操作,这部分网络延迟和处理延迟是无法消除的;
模型预测无法保证100%的准确率,会有无法识别与误识别的情况出现;

Android高版本

 

GameAISDK这边对Android高版本有自支持,在AIClient侧内嵌入了inputServer机制用来中转行为输入,绕过android高版本的安全限制。但是对于所有的高版本机型覆盖率有多少这个还未知。

 

小结

 

IM的优点非常明显:

对业务无侵入,不用游戏项目方修改一行代码,拿包即用;
训练快;

缺点同时也是存在的:

挑游戏,一些简单的游戏上面训练效果比较好,需要精细化操作的游戏训练效果比较差,甚至无法训练出合理结果;
预测结果存在误差(原因上面分析过了);

总之这一个鹅厂针对游戏自动化一次全新的尝试,思路很新颖,也很有挑战,感谢他们开源出来让大家学习!

 

(全文结束)

 

转载文章请注明出处: 漫漫路 – lanindex.com

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注