9

GameAISDK模仿学习研究

 3 years ago
source link: https://www.lanindex.com/gameaisdk%e6%a8%a1%e4%bb%bf%e5%ad%a6%e4%b9%a0%e7%a0%94%e7%a9%b6/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

GameAISDK模仿学习研究

2021/02/08 · Leave a comment

模仿学习(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训练过程

整体流程可以参考下图:

%E6%A8%A1%E4%BB%BF%E5%AD%A6%E4%B9%A0%E5%A4%96-1024x418.png

训练核心主要利用了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

Leave a Comment Cancel reply

Your email address will not be published.

在此浏览器中保存我的姓名、电子邮件和站点地址。

1 Trackback

  1. GameAISDK模仿学习研究 – 闪念基因 – 个人技术分享 (Pingback)

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK