成都unity3d培训
达内成都会计中心

13408446380

热门课程

Unity项目实战:3D平衡小球

  • 时间:2018-01-24 11:10
  • 发布:达内陈老师
  • 来源:达内

本文将分享如何安装Unity机器学习代理工具(Unity Machine Learning Agents),建立示例项目运行环境,并将训练好的模型载入到Unity环境中。

Unity机器学习代理工具包中含很多示例环境项目,它们可以用作新建项目时的模板,或是用于测试新的机器学习算法,以确保算法能正常运行。

unity机器学习项目实战:3D平衡小球

在本文中使用的案例是3D平衡小球(3D Balance Ball)的运行环境。该环境包含多个平板和小球。这些平板可以通过自身的调整来平衡,保持小球不掉离平板。每个平板都是一个代理,通过保持小球在平板上的时间得到奖励。一旦小球掉出平板,则会扣除奖励。这个训练过程的目的在于让平板学习永远不丢球。

开始准备

下载Unity在GitHub上的ml-agents代码库。

地址:https://github.com/Unity-Technologies/ml-agents

使用Unity 2017.1 或以上版本

配置系统环境,请参考以下配置方式。

Mac下配置Unity机器学习代理工具

Windows 10配置Unity机器学习代理工具和TensorFlow环境

设置Unity环境

运行启动Unity 2017.1,在Unity中打开unity-environment文件夹。在启动窗口中,选择Open,并在弹出的文件浏览窗口中,选择unity-environment,点击Open。

注意:如遇见弹出警告信息为”Opening Project in Non-Matching Editor Installation”,请直接忽略。

打开项目后,在Project窗口,定位到文件夹Assets/ML-Agents/Examples/3DBall/,双击Scene文件的图标,载入所有环境资源。

unity机器学习项目实战:3D平衡小球

点击菜单Edit -> Project Settings -> Player,选中Resolution and Presentation里的Run in Background属性。

unity机器学习项目实战:3D平衡小球

将Resolution and Presentation中的Display Resolution Dialog属性,选择Disabled。

unity机器学习项目实战:3D平衡小球

在左边的场景层级窗口中,展开Ball3DAcademy游戏对象,并选中它的子对象Brain3DBrain,在右边的检视窗口中查看属性。

unity机器学习项目实战:3D平衡小球

注意:该对象的Type of Brain设置为External。

点击File -> Build Settings,选择构建的目标平台。可以勾选Development Build来记录调试信息。

unity机器学习项目实战:3D平衡小球

点击Build,保存环境文件到python文件夹中。

用强化学习训练大脑

测试Python API

要启动jupyter,在命令行中输入:jupyter notebook。在浏览器中打开localhost:8888,访问notebook文件。

unity机器学习项目实战:3D平衡小球

若要确保你的环境和Python API正常运行,你可以在上述窗口中打开python/Basics Jupyter otebook。这个笔记本文件包含一个Python API的简单演示。在这个笔记本文件中,请记得把env_name变量赋值为你刚刚生成的那个文件名。

用PPO训练模型

下一步我们训练代理,让它在平台上平衡小球的位置,我们会使用一个叫做近端策略优化(Proximal Policy Optimization),简称PPO的强化学习算法。这个算法经过实验,证明是十分安全、高效且比其他强化学习算法实用性更强的,所以我们选择这个算法来作为Unity机器学习代理的示例算法。

如果想要了解更多关于近端策略优化算法的信息,请参阅OpanAI发布的博客文章:

https://blog.openai.com/openai-baselines-ppo/

unity机器学习项目实战:3D平衡小球

要在Ball Balance环境中训练代理,请按以下步骤操作:

⊙在Jupyter中打开python/PPO.ipynb

修改env_name的值为刚刚生成的环境文件的文件名

按自己需求修改run_path目录

运行PPO.ipynb的代码,注意不要运行"Export the trained Tensorflow graph."这行文字后的代码。

unity机器学习项目实战:3D平衡小球

观察训练过程

要更仔细地观察训练过程,你可以使用Tensorboard。在命令行中,切换到前面提到的python文件夹下,输入:tensorboard --logdir=summaries

unity机器学习项目实战:3D平衡小球

然后在浏览器中打开localhost:6006。

unity机器学习项目实战:3D平衡小球

从Tensorboard上,你会看到以下6个变量的统计数据:

累计回报(Cumulative Reward):所有代理各自的平均累计奖励。在成功的训练过程中,这个变量应该会增大。

数值损失(Value Loss) :数值函数更新时的平均损失。这关系到模型是否能预测每个状态下的数值。在成功的训练过程中,这个变量会减小。

策略损失(Policy Loss) :策略函数更新时的平均损失。这关系到策略(决定行为的过程)的变化大小。在成功的训练过程中,这个变量的大小会减小。

事件长度(Episode Length) :设定环境下,所有代理中每个事件的平均长度。

数值估计(Value Estimates) :代理所访问的所有状态下的平均数值估计。在成功的训练过程中,这个变量数值会增大。

策略信息量(Policy Entropy):这个变量告诉你模型的决定随机度有多大。在成功的训练过程中,这个变量会缓慢减小。如果它减小得太快,beta hyperparameter应该会增大。

将训练好的模型载入Unity环境

当训练过程显示的平均回报大于等于75时,并且模型已经保存过后。你可以通过中止执行代码来停止训练。现在你就已经有训练好的TensorFlow模型。你必须将保存的模型转换为Unity可使用的格式,这样就可以直接通过以下步骤载入到Unity项目中。

配置对TensorFlowSharp的支持

因为对TensorFlowSharp的支持目前还处于实验阶段,默认情况下它是被禁用的。要打开它,你必须按如下步骤操作。

请注意Internal Brain模式只在完成以下步骤后才能使用。

确保使用的是Unity 2017.1以上版本。

确保TensorFlowSharp插件已导入到Assets文件夹中。包含这个插件的插件包可以在这里下载(https://s3.amazonaws.com/unity-agents/TFSharpPlugin.unitypackage)。双击打开该文件,导入到Unity中。

菜单选择Edit -> Project Settings -> Player。

在Inspector检视窗口中对于你选择的所有平台(PC, Mac, Linux Standalone, iOS ,Android)这样操作:打开Other Settings; 在Scripting Runtime Version属性中选择Experimental (.NET 4.6 Equivalent);在Scripting Defined Symbols属性中,加入ENABLE_TENSORFLOW。

重启Unity编辑器。

unity机器学习项目实战:3D平衡小球

将训练好的模型载入Unity

现在运行之前那个notebook文件脚本里"Export the trained TensorFlow graph"后的代码,创建出.bytes文件(也就是用env_name变量作为文件名,格式为.bytes的文件)

unity机器学习项目实战:3D平衡小球

.bytes文件从python/models/ppo/目录下移动到unity-environment/Assets/ML-Agents/Examples/3DBall/ TFModels/目录中。

打开Unity编辑器,选择上面提到的3DBall场景。

从场景的层级窗口选择Ball3DBrain对象

将Type of Brain改为Internal。

.bytes文件从项目窗口拖到3DBallBrain 检视窗口的Graph Model中。

将Graph Placeholder的size值设为1。

添加名为epsilon的占位符,设定类型为floating point,范围从0到0。

点击编辑器上方的Play按钮。

注意:第7步和第8步是有必要的,因为3DBall是个持续的控制环境,而TensorFlow模型会用噪音参数来决定行动。但那样的情况下控制过程是离散的,所以不需要epsilon变量)

小结

如果你按照步骤操作,现在可以看到在Unity中,训练好的模型已经能自行控制平衡小球的行为。你可以重新生成Unity文件,然后独立运行该模型,应用代理新学习的行为。

上一篇:Unity3DMonoDevelop断点调试教程
下一篇:Mac下配置Unity机器学习代理工具
选择城市和中心
贵州省

广西省

海南省