Windows下基于TensorFlow平台的Unity3D机器学习

2018-11-26 09:33赵勇张引琼
电脑知识与技术 2018年23期
关键词:工具包小球代理

赵勇 张引琼

摘要:本文主要介绍如何在Windows操作系统下,搭建使用TensorFlow,借助Unity机器学习代理工具,以3D平衡小球为例,让板子上面的小球通过TensorFlow训练学习,能够自动调节保持平衡不掉落,从而实现Unity3D机器学习工具的学习与应用。

关键字:TensorFlow;unity;机器学习

中图分类号:TP391 文献标识码:A 文章编号:1009-3044(2018)23-0255-03

Abstract: This paper mainly introduces the method of setting up Tensorflow and its using in the Windows. Taking 3D balance ball as an example, let the ball learn to adjust itself automatically and keep the balance on the board through Tensorflows training, so as to implement the study and application of Unity3D machine learning tools.

Key words : TensorFlow Unity Machine learing

机器学习是专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。而TensorFlow是Google基于DistBelief进行研发的新一代人工智能学习系统,是一个采用数据流图,用于数值计算的開源软件库[1]。以其易用性、灵活性、高效性长居Githubf 的fork and contribute榜首位,是当前最热门的机器学习框架。它通过构建有向图来描述所要执行的操作,可以灵活的使用设备中的CPU或者GPU展开计算,将复杂的数据结构传输至人工智能神经网络中进行分析和处理。

Unity作为世界上最受欢迎的创作引擎,正处于机器学习与游戏的交汇点,在过去代理要获取我们所期待的行为需要人为编码实现,而现在则可以在训练环境中不断的交互学习的方式教给代理,提高开发效率。机器学习是一项颠覆性的技术,而Unity中的机器学习则开启了人工智能史上的新篇章。

1 Windows下TensorFlow 平台搭建

Google在2015年11月将TensorFlow开源,初期只发行了在Linux和MAC系统下运行的版本,在2016年年底Google才发行了Windows版本[2]。目前支持Python,c++等语言,考虑到Python语言的简洁性和与TensorFlow的无缝连接性,本文中所使用的语言为Python,同时我们使用GPU来加速计算。

1.1 安装CUDA工具包

CUDA是NVIDIA推出的CUDA运算平台的工具集,CUDA提供了一个强大的开发环境,

用于开发高性能的GPU加速应用。

1.2 安装CUDA深度神经网络库CUDNN

它是专门针对深度神经网络框架设计的一套GPU计算加速方案。全世界的深度学习研究者和框架开发者都使用CUDNN来增强GPU计算性能。这专注于训练神经网络、开发软件应用,不用在低级别的GPU性能调整上耗费时间。

1.3 设置环境变量和路径

进入系统的环境变量窗口,点击“新建”按钮,添加新的系统变量CUDA_HOME,值为安装CUDA的安装路径。

在环境变量窗口中系统变量的找到“路径(Path)”,编辑环境变量窗口,将以下路径添加进入:

CUDA安装路径\lib\x64

CUDA安装路径\extras\CUPTI\libx64

如果电脑不支持CUP,则可直接省略掉部分。

1.4 安装Anaconda,配置Python环境,下载TensorFlow

在Anaconda Prompt中输入如下指令来创建环境:conda create -n tensorflow-gpu python=3.5.2

输入如下指令启动刚刚创建的环境:activate tensorflow-gpu

指令安装TensorFlow:pip install tensorflow-gpu

2 Unity3D机器学习

Unity3D是由Unity Technologies开发的专业游戏引擎。它能够让游戏开发者轻松创建

出2D游戏、3D游戏,以及实现建筑可视化、实时三维动画,其具有强大的开平台性[3]。为了让研究者提供强大的训练场景,将最新的机器学习技术与unity相结合,提高研发效率,Unity机器学习代理工具应运而生。

2.1 Unity机器学习代理

机器学习代理(ML-Agents)是一个开源工具包,它帮助开发和研究人员,将使用Unity

开发的游戏及应用程序转换到可以对智能代理进行培训的环境中。通过简单易用的Python API,运用增强学习、进化策略以及其他机器学习方法。机器学习代理对于高度逼真环境中的复杂机器学习问题具有显著的优势。[4]

使用此工具需在GitHub中https://github.com/Unity-Technologies/ml-agents下载unity

机器学习代理工具包

打开Anaconda Prompt命令行,工作路径切换到解压文件的Python文件夹中,键入指令:conda install –force html5lib pip install .

当上述步骤完成且无错误出现,则可开始用TensorFlow来配置unity进行机器学习,

下面以Unity代理工具中的3D平衡小球为例进行说明。

2.2 3D平衡小球

3D平衡小球项目是Unity机器学习代理工具中的事例环境项目。在说明之前,先来解释

一下一些术语。在学习过程中,动作的执行者称之为代理,它内嵌的环境中;策略则是值动作执行的最终目标,引导动作的执行;在动作执行前与执行后都会有一个状态,两个状态的改变依据策略的标准,获得一个回报值。案例中的每一个平板即对应一个代理,策略即让木板保持小球的平衡,木板会根据策略的决策不断执行动作来调整自己的状态,获得更多的回报值,小球在平板上保持时间的长短与回报值成正比。我们的目的就是通过相应的机器学习算法来不断训练,让平板学会永远保持小球的平衡

3 训练过程实现

3.1 unity打开项目场景

在Unity3D中將工具包中的unity-environment文件夹导入。在Project窗口的Assets/ML-Agents/Examples/3DBall/文件夹双击Scene文件,加载环境资源。

点击play按钮运行场景。球在平板上无法保持平衡,很快掉落

3.2 导出用于训练的可执行文件

为能够导出可训练的模型,需要在Player Settings中做导出设置:

1) 点击菜单Edit -> Project Settings -> Player,选中Resolution and Presentation里的Run in Background属性,让训练窗口失去焦点时不停止运行,。将Resolution and Presentation中的Display Resolution Dialog属性,选择Disabled,训练窗口启动时不显示分辨率对话框,如图2。

2) 在左边的场景层级窗口中,选中Ball3DAcademy游戏对象的子对象Brain3DBrain,在右边的检视窗口(Inspector)中将改对象的Brain type属性值从player改为External。此时改项目将不能在unity中运行,但却能够由代码控制在外部运行,如图3。

3)点击File -> Build Settings,选择构建运行目标平台,点击build生成可执行文件保存到代理工具的Python文件夹中。同时也勾选Development Build来记录调试信息。

3.3训练模型

为训练代理,采用近端策略优化,简称PPO的强化学习算法来让木板学习保持小球平衡。此算法进过多次的实验检测,表明相对于其他算算法,是更安全、高效且实用性更强,选择此算法来说明unity机器学习是最合适的。本文主要说明的是如何在Unity中实现机器学习,在此对于算法的实现并做过多的解释。

启动Jupyter,在Jupyter中打开python/PPO.ipynb,修改代码中env_name变量的值为生成的环境文件的名字,按照自己的需求修改run_path变量的值,运行代码。在unity中生成的环境文件会自动打开训练窗口,由下图可看到木板在不断调整学习如何保持小球平衡。

为更好地观察训练过程,命令行中键入 tensorboard --logdir=‘汇总数据保存路径在浏览器中输入localhost:6006打开tensorboard查看数值的变化。同时,在Jupty中会将训练迭代的次数和平均回报值(mean reward)打印出来,每迭代50000次,则会自动保存一次所训练学习得到的数据,当平均回报值达到70以上则可以停止训练。

3.4 导入模型查看结果

现在已有训练好的TensorFlow模型。但保存的模型不是Unity可使用的格式,需要通过转化之后方可载入到Unity项目中运行使用。

1) 下载TensorFlowsharp,双击打开导入到unity中;菜单选择Edit -> Project Settings -> Player,在Other Settings;的Scripting Runtime Version属性中选择Experimental (.NET 4.6 Equivalent);在Scripting Defined Symbols属性中,加入ENABLE_TENSORFLOW;

2) 为了将训练结果保存为unity可识别的二进制文件,需运行代码 export_graph(model_path, env_name) 生成一个.bytes的二进制文件,将二进制文件从代理工具包的python/models/ppo/目录下移动到unity-environment/Assets/ML-Agents/Examples/3DBall/ TFModels/目录中,如图5;

3) 打开Unity,选择3DBall场景;在层级窗口选择Ball3DBrain对象,将Type of Brain属性的值由External改为Internal;

4) 将二进制文件从项目窗口拖到3DBallBrain 检视窗口的Graph Model中,因为3DBall是个持续的控制环境,而TensorFlow模型会用噪音参数来决定行动,所以要将Graph Placeholder的size值设为1,添加名为epsilon的占位符,设定类型为floating point,范围从0到0;

5) 点击编辑器上方的Play按钮,现在可以看到在Unity中,训练好的模型已经能自行控制平衡小球的行为。

4 结束语

Windows是大多数人说熟知的操作系统,其直观的图形化界面使得操作起来简洁;Google开源TensorFlow深度学习框架也是便利开发人员,提供了构建神经网络的接口,便于构建BP神经网络,简化编程任务;Unity机器学习代理工具帮助研究开发人员在复杂的学习场景中有效的训练代理;在Windows平台下,使用TensorFlow机器学习框架,借助Unity机器学习代理工具,大大提高了开发效率,在unity中搭建好环境,导出要训练的可执行文件,编写好训练算法进行训练,将训练好的模型格式转化再次导入到unity中完成整个开发流程。但目前TensorFlow和Unity机器学习代理工具还处在完善阶段,相信在不久的将来,两者的完善结合能够为碰撞出更加激烈的火花。

参考文献:

[1] 张敏敏,徐和平,王晓洁,等.谷歌TensorFlow机器学习框架及应用[J].微型机与应用,2017,26(10):58-60.

[2] Sam Abrahams,Danijar,Hafner,Erik,Erwitt,Ariel Scarpinelli.段菲,陈澎,译.面向机器智能的TensorFlow实践[M].机械工业出版社,2017.4.

[3] 吴亚峰,杜化美,于复兴.unity游戏开发案例大全[M].人民邮电出版社,2015.

[4] unity官方中文论坛.Unity推出机器学习代理工具,Unity引擎揭开人工智能新篇章[EB/OL].http://forum.china.unity3d.com/thread-27736-1-1.html.

【通联编辑:唐一东】

猜你喜欢
工具包小球代理
Epigallocatechin-3-gallate exerts antihypertensive effects and improves endothelial function in spontaneously hypertensive rats
联想等效,拓展建模——以“带电小球在等效场中做圆周运动”为例
小球进洞了
小球别跑
小球别跑
代理圣诞老人
代理手金宝 生意特别好
复仇代理乌龟君
Microchip推出PIC32蓝牙入门工具包
一个村有二十六位代理家长