由于官方教程是全英版,本文为根据个人理解做的中文版,并对出现的相关问题进行了解答
(能力有限,有问题的地方还望指出,同时欢迎志同道合的朋友参与讨论,谢谢!)
官方教程:https://learn.unity.com/course/ml-agents-hummingbirds?uv=2019.3
系列文章:unity learn—— ML_Agent:Hummingbirds中文教程 自译(一 ——配置Unity)
unity learn—— ML_Agent:Hummingbirds中文教程 自译(二——代码Flowers.cs、FlowerArea.cs)
unity learn—— ML_Agent:Hummingbirds中文教程 自译(三——代码HummingbirdAgent.cs)
unity learn—— ML_Agent:Hummingbirds中文教程 自译(四——Ray Perception Sensor)
unity learn—— ML_Agent:Hummingbirds中文教程 自译(五 ——安装Anaconda)
unity learn—— ML_Agent:Hummingbirds中文教程 自译(六——准备训练)
unity learn—— ML_Agent:Hummingbirds中文教程 自译(七——测试模型)
Note:
自ML-Agent测试版发布,到现在正式的1.0版已经三年有余。
1.0版本使用的深度学习架构由之前的TensorFlow改为了Pytorch,训练出的模型也由.nn文件变为了.onnx文件。
1、conda环境配置
打开Anaconda Prompt
键入 conda env list,可以看到目前已经创建的conda环境
再键入conda create -n ml-agents-1.0 python=3.8,意为创建一个名为ml-agents-1.0,python版本为3.8的conda环境
它会告诉你将要安装的东西。键入y回车继续
下载完成后,键入conda activate ml-agents-1.0进入ml-agents-1.0的环境
然后pip install mlagents 下载mlagents库
下载完成后,
去:https://learn.unity.com/tutorial/initial-setup-asset-import-default-contact-offset?uv=2019.3&courseId=5e470160edbc2a15578b13d7&projectId=5ec82fa7edbc2a0d36845ae2#
下载HummingbirdSourceCode.zip
解压压缩包,找到config中的trainer_config.yaml(它包含了神经网络和训练代码用来训练ml-agents的信息),打开(我用的是VS Code,你也可以用别的编辑器,甚至记事本也可以)
如果你对上面的这些变量具体代表什么感兴趣,可以去
https://github.com/Unity-Technologies/ml-agents/blob/release_1_branch/docs/Training-Configuration-File.md寻找答案(不过我觉得看我的博客而不看官方教程的童鞋多半也是不会点开的hhh[狗头])
关于参数设置的demo:https://github.com/Unity-Technologies/ml-agents/blob/release_1_branch/config/trainer_config.yaml
2、训练前的准备
现在回到unity,为了提高训练效率,可以多复制几个Island同时训练(我这里跟官方一样复制了8个,具体复制几个应该看你的电脑性能来定)
打开anaconda prompt切换路径到trainer_config.yaml所在位置
我的是E:\unity\For unity Projects\ML_Agent\HummingbirdSourceCode\config
这里关系到一个切盘的问题,即从C盘切到E盘
不能直接 cd E:\unity\For unity Projects\ML_Agent\HummingbirdSourceCode\config而需要先cd c:\切到C盘根目录,再切E盘(这里我几乎试了所有错,大家引以为戒!(发现新坑的小伙伴欢迎补充哈!))
注:trainer_config.yaml中的命名空间Hummingbird,即
必须与unity中Hummingbird挂载的Behavior Parameters脚本的Name一致
然后切回Anaconda Prompt,键入mlagents-learn -h
如果顺利的话就会出现如下界面:(之前那个路径太远了,切着麻烦,我换了个路径)
在开始训练之前,还有一个重要且比较头疼的事情,就是在这个虚拟环境下装上pytorch,这方面网上教程很多,我只提一点建议:
对于我们ml-agent的训练,用CPU比GPU快(官方说的,如果你没有用visual sensor,CPU更好),所以大家不必费大力气装GPU版本的。
若你还有GPU的需求,我的建议是:不要用国内源!!!(只是CPU版本的话可以用国内源)
训练
因为之前我们为了测试把场景中的Hummingbird的Behavior Type设置成了Heuristic Only,所以需要设置回Default。(Tip:可以还从Prefab中设置,这样就不用在场景中点八次啦)
现在再来确认一下Hummingbird的所有脚本
下面回到Anaconda Prompt,键入(其中hb_01是为本次训练的命名,你也可以自由发挥)
mlagents-learn ./trainer_config.yaml --run-id hb_01
这里不出意外的话,你会报错:
TrainerConfigError( mlagents.trainers.exception.TrainerConfigError:The option default was specified in your YAML file, but is invalid.)
原因是官方的ML_Agent更新了,所以你的trainer_config.yaml 也需要更新,在改路径下键入
python -m mlagents.trainers.upgrade_config [old yaml file name] [new file name]
也可以通过以下命令得到更多的帮助
python -m mlagents.trainers.upgrade_config -h
一般我们不要改名称,所以就是键入
python -m mlagents.trainers.upgrade_config trainer_config.yaml trainer_config.yaml
下面我们再输入一次:
mlagents-learn ./trainer_config.yaml --run-id hb_01
这样如果没问题的话就会出现下面这样:
划红线的句子是让我们回到unity点击开始运行按钮
下面就等待训练结果吧
训练结果会和 trainer_config.yaml存在一起,hb_01就在results里面啦
Plus:
1、训练过程中,你可能觉得鸟移动的太快了,你可以去Project Settings的Time更改TimeScale来使你看得更清楚
Time Scale: 时间进展的速度。更改此值可模拟子弹时间效果。值 1 意味着实时。值 0.5 意味着半速;值 2 表示速度翻倍。
2、使用TensorBoard可视化训练结果
打开一个新的Anaconda Prompt,切换conda环境并将路径切到你的 trainer_config.yaml所在的位置,然后键入
tensorboard --logdir results
复制红色方框的网址到浏览器打开即可
3、 trainer_config.yaml中默认的训练步数是500万
如果你想中途停止的话,可以在Anaconda Prompt中按“CTRL+C”
或者在unity界面在点一次这个开始按钮
另外如果你中途退出了,之后还想继续之前的训练,只需要在执行命令的最后加上’–resume‘
就好啦。比如
mlagents-learn ./trainer_config.yaml --run-id hb_01 --resume
训练完成。红色方框就是最终训练结果所在的路径啦。