找回密码
 立即注册
查看: 472|回复: 6

Unity ml-agents简介与环境搭建指南

[复制链接]
发表于 2021-12-3 15:34 | 显示全部楼层 |阅读模式
ml-agents简介部分

ml-agents是Unity的一款开源插件,能够让开发者使用机器学习的算法训练出智能的Agents,并且它的一个很大的优势在于:即使开发者不编写python代码,也可以通过已经搭建好的神经网络训练出比较理想的Agents。
强化学习是在机器学习领域常用于训练游戏AI的一种算法,是ml-agents比较基础也比较成熟的用法。那什么是强化学习?我个人的理解,强化学习就是一种通过奖励与惩罚的机制,让接收环境信息的Agent不断试错并积累经验,最后趋向于能够做出最优决策的学习方式。更加详细的介绍请移步unity官方的ml-agents概述。
目前ml-agents使用的是PPO深度强化学习的算法,简单来说是使用2~3层的神经网络来进行强化学习的一种算法。对算法本身感兴趣的话可以去看看PPO算法的论文。
下面这个动图演示的就是ml-agents训练出来的。小蓝的任务,是将随机出现的大黄推动到随机方向的终点。



ml-agents演示

还有通过控制平台旋转保持小球平衡。虽然看起来有点不明觉厉,但这些小球对于平台来说重力还是蛮大的。



ml-agents演示2

为了能够使用ml-agents,除了安装Unity之外,还需要去github上克隆ml-agent项目到本地,以及安装python及其相关的依赖。整个流程稍显繁琐,本指南将会基于Unity官方Github仓库的文档,以尽量简单的步骤一步步带大家完成。

<hr/>
ml-agents环境搭建部分

Step 0: 注意事项

操作系统:windows 或者 MacOS,根据情况在Step 3及以后会有分歧
unity版本:2017.4及以上 (本指南以2018.4为例)
python包管理工具:Anaconda 3
python版本:python 3.6
ml-agents版本:v0.9.0 (2019年9月)
如果已经符合unity版本要求,请跳过Step 1;如果已经安装使用过Anaconda 3,请跳过Step 2与Step 3。
Step 1: 安装unity

前往官网下载界面,选择对应操作系统的Unity Hub下载,选择安装路径之后下一步,短暂等待之后安装完成并运行。
登陆unity账号,更新许可证,安装符合要求的Unity版本。(本指南这里选择2018.4的LTS版本)



选择Unity版本安装

Step 2: 下载Anaconda 3

由于目前官网的Anaconda 3版本所对应安装的python版本是3.7,而2019年tensorflow并不支持python 3.7,所以有两种选择,第一种是下载官网最新Anaconda 3,之后将python降级;第二种是直接下载对应python 3.6的版本的Anaconda 3。
本指南选择后者。
来到清华大学开源软件镜像站下载对应操作系统的Anaconda 3-5.2.0的版本。pkg后缀是Mac图形化安装器,sh后缀是Mac命令行安装器,下面还有windows32位和64位的安装器,选择自己喜欢的方式安装。



各种Anaconda安装器

Step 3: 安装Anaconda 3 (windows 10)

在选择完安装路径之后,会出现以下两个选项。我们选择先不设置环境变量,以及将Anaconda安装的Python设置为系统默认python。



Anaconda 3安装选项

安装完成之后,在开始菜单中打开Anaconda Prompt,输入:
conda --version应该出现:
conda 4.5.4如果出现提示conda指令没有被识别,则需要设置环境变量。
打开控制面板,在右上角搜索环境变量,在搜索结果中点击编辑环境变量,选择环境变量,在系统变量中找到Path并双击,在新窗口中点击右侧新建,逐一将以下四条添加进去。
%UserProfile%\Anaconda3\Scripts
%UserProfile%\Anaconda3\Scripts\conda.exe
%UserProfile%\Anaconda3
%UserProfile%\Anaconda3\python.exeStep 3: 安装Anaconda 3 (MacOS)

一路继续就完事了。Mac就是这么任性。
Step 4: 克隆ml-agents项目仓库

ml-agents目前无法像其他插件一样在unity中直接配置,需要在github上下载之后手动导入。所以需要去github上克隆项目。传送门
可以自行使用git,或者找到这个"Clone or download"按钮,通过压缩文件或者其他方法下载。如果下载压缩文件的话,会得到一个大小为80M左右的命名为"ml-agents-master"或者类似的名字的压缩包。



github界面

解压缩,将文件夹放到适当的路径,在今后创建项目时一样会用到。
简单介绍一下克隆下来的文件夹中的内容:"UnitySDK"文件夹包含了在创建新的ml-agents项目时需要添加到新的项目文件夹中的资源,其中也包含了一些示例项目;"ml-agents"文件夹中包含了一些python的脚本,主要用于神经网络的训练等工作;"ml-agents-envs"文件夹中提供了一些python API给unity调用,ml-agents。
Step 5: 在Anaconda中创建ml-agents环境 (windows 10)

创建环境的原因在于,不同的项目需要的依赖包不同,以tensorflow举例,有些项目需要tensorflow的版本为1.7.1,其他版本需要1.14.1这样。为了不让两个项目之间产生冲突,需要创建两个环境将项目隔离开来。
现在我们要创建属于ml-agents的环境。仍然是在Anaconda Prompt中,输入如下命令:
conda create -n ml-agents python=3.6之后会弹出将要安装的package,输入y继续创建。创建完成之后,输入:
conda activate ml-agents来进入ml-agents环境,此时会发现 <ml-agents> 被附加到最后一行行首。在这个情况下,所有安装的依赖包只会在该环境中起作用。如果要退出该环境,使用如下命令:
conda deactivate之前在创建环境的时候应该已经安装过了pip工具,此时使用pip命令在环境中安装tensorflow,在运行指令之前请调整好心态:
pip install tensorflow==1.7.1这里很有可能会出现网速太慢,下到一半丢失连接报错,重复多次未果导致心态爆炸。所以还是建议选择从国内源安装,例如豆瓣:
python -m pip install tensorflow==1.7.1 -i https://pypi.douban.com/simple之后再安装ml-agents相关依赖,因为之前比较大的tensorflow已经安装完成了,所以会顺利很多,如果还是会安装失败,建议多尝试几次。输入下面指令等待安装完成:
pip install mlagents*如果在运行上面指令时遇到cache相关的问题,可以尝试下面的无视cache的安装指令:
pip install mlagents --no-cache-dir最后一部分的配置,前往之前从github仓库克隆下来的文件夹下:
cd \repository\folder\location将\repository\folder\location替换成克隆下来的文件夹的绝对路径,如果觉得键盘敲得太累可以在cd之后直接将文件夹拖到终端里面获得绝对路径。
之后依次执行下列命令:
cd ml-agents-envs
pip3 install -e .
cd ..
cd ml-agents
pip3 install -e .到此为止ml-agents的环境就配置完成了。
虽然大部分的神经网络都能够通过使用GPU而在训练速度上获得质的提升,但是至少目前为止,Unity官方声明ml-agents在训练过程中使用GPU并不会显著提高训练速度,并且GPU的配置较为复杂,在此不作介绍,如果感兴趣可以自行参考官方文档配置体验。
Step 5: 在Anaconda中创建ml-agents环境 (MacOS)

创建环境的原因在于,不同的项目需要的依赖包不同,以tensorflow举例,有些项目需要tensorflow的版本为1.7.1,其他版本需要1.14.1这样。为了不让两个项目之间产生冲突,需要创建两个环境将项目隔离开来。
现在我们要创建属于ml-agents的环境。在终端中输入如下命令:
conda create -n ml-agents python=3.6之后会弹出将要安装的package,输入y继续创建。创建完成之后,输入:
conda activate ml-agents来进入ml-agents环境,此时会发现 <ml-agents> 被附加到最后一行行首。在这个情况下,所有安装的依赖包只会在该环境中起作用。如果要退出该环境,使用如下命令:
conda deactivate与windows不同的是,接下来要安装pip3。先执行命令在当前目录下下载get-pip.py脚本:
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py之后使用python3执行该脚本:
python3 get-pip.py执行完之后可以将该脚本删除。此时还无法使用pip3命令,需要将pip3软链接到/usr/local/bin/,可以使用如下命令(需要检查anaconda3的路径,如果anaconda3直接装在硬盘目录下可直接执行,否则进行相应调整):
ln -s /anaconda3/envs/ml-agents/bin/pip3 /usr/local/bin/以上关于pip3的配置参考了这篇文章https://blog.csdn.net/haiglee/article/details/84351664
现在用pip3命令在环境中安装tensorflow,在运行指令之前请调整好心态,出现网络连接错误请多尝试几次:
pip3 install tensorflow==1.7.1之后再安装ml-agents相关依赖,因为之前比较大的tensorflow已经安装完成了,所以会顺利很多,如果还是会安装失败,建议多尝试几次。输入下面指令等待安装完成:
pip3 install mlagents最后一部分的配置,前往之前从github仓库克隆下来的文件夹下:
cd \repository\folder\location将\repository\folder\location替换成克隆下来的文件夹的绝对路径,如果觉得键盘敲得太累可以在cd之后直接将文件夹拖到终端里面获得绝对路径。
之后依次执行下列命令:
cd ml-agents-envs
pip3 install -e .
cd ..
cd ml-agents
pip3 install -e .到此为止ml-agents的环境就配置完成了。
虽然大部分的神经网络都能够通过使用GPU而在训练速度上获得质的提升,但是至少目前为止,Unity官方声明ml-agents在训练过程中使用GPU并不会显著提高训练速度,并且GPU的配置较为复杂,在此不作介绍,如果感兴趣可以自行参考官方文档配置体验。
Step 6: 开始你的第一次训练!

在指南的最后,通过一次简单的训练尝试,来直观感受一下坚持了这么多步下来的成果,以及验证一下安装的正确性。
在Unity Hub中新建一个测试项目,随后找到之前从github仓库克隆下来的文件夹,将其中UnitySDK\Assets\路径下的两个文件夹复制到测试项目中的Assets\路径下去。另外,为了方便起见,找到config\路径下的trainer_config.yaml文件也一同复制到Assets\路径下。
到此为止,你的项目的Assets目录下应该是长这个样子的。



初始化后的项目目录

接下来找到3DBall项目的Scene,双击打开。



3DBall目录

直接运行游戏!你会看到屏幕上出现了文章开头动图中的鬼畜画面。
接下来训练我们自己的模型。单击Hierarchy中的Ball3DAcademy,在Inspector标签页中单击Ball3DAcademy脚本下的Brains栏中的3DBallLearning。



寻找3DBallLearning

3DBallLearning是一个Brain,能够读取tensorflow模型中的参数,通过一系列脚本最终转化为Agents的行动。再点击Inspector标签页中的Model栏,这时高亮表现出的就是之前训练好的Tensorflow模型。



原TF模型

打开Anaconda Prompt,前往你当前的项目所在Assets目录,将your\project\location替换为你自己的路径。
cd your\project\location\Assets如果出现指令无效的问题,可能是由于你当前所在的盘符与目标盘符不同,解决方法是先进入当前盘符的最上层目录如 C:\ 随后输入目标盘符如 E: 即可。随后记得进入ml-agents环境。
需要通过一条指令来开始训练,指令的参数这篇指南先不详细展开了:
mlagents-learn trainer_config.yaml --run-id=firstRun --train运行这条指令之后,Prompt就已经准备就绪了,不出意外的话会出现一个Unity的Logo,以及提示你按下编辑器中Play按钮的语句。当然Logo像这种没有排列好的情况也是有可能的,封面那种才正常一点。



说好的Logo呢

但是还不能马上运行游戏,我们要先把Academy切换成从外部控制的模式,把脚本上3DBallLearning一旁的Control选中。



Academy外部控制模式

终于可以按下Play键了!出现在你眼前的应该是更加鬼畜的画面。可以等待训练到最大步数正常结束,也可以提前按下Play键结束训练,会按照当前的进度保存训练模型。
来看看你刚刚训练的新模型吧~在Assets\models\firstRun\路径下 (也有可能是firstRun-0\)找到一个新的模型也叫3DBallLearning。姑且和原来训练好的模型外观相同,不要搞混了。找到之前3DBallLearning的Brain,将这个新模型拖到Brain的Model栏中。



新TF模型大图



新的TF模型

最后!回到Ball3DAcademy,取消选中control,运行游戏,你就能够看到你刚刚训练的成果啦。如果把模型换回去的话,就可以再看到原始的效果。
如果之前早早结束的话,效果简直不堪入目...



东倒西歪

不管结果如何,总之ml-agents是能够顺利运行了。其实还挺简单的吧~
<hr/>结语

本期指南就到这里啦,不知道能够看到结尾的小伙伴能有多少,希望这篇指南能够给大家打开新世界的大门。
不久的将来我会再带来一篇从头开始搭建一个ml-agents项目的教程,敬请关注。
另外欢迎关注交大幻圆游戏创作社的公众号~今后会带来更多游戏开发相关的信息。



交大幻圆游戏创作社

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2021-12-3 15:44 | 显示全部楼层
还更新吗[好奇]
发表于 2021-12-3 15:52 | 显示全部楼层
真是太感谢这个教程了,mac用户困扰了好几天 了,期待继续更新
发表于 2021-12-3 16:01 | 显示全部楼层
感谢!
发表于 2021-12-3 16:08 | 显示全部楼层
请问这个unity sdk在哪里啊 克隆的ml-agents master里面并没有啊
发表于 2021-12-3 16:13 | 显示全部楼层
ml-agents9没有unitySDK,8才有
发表于 2021-12-3 16:19 | 显示全部楼层
请问能不能做多智能体强化学习
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-3-29 13:22 , Processed in 0.104214 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表