开始一个全新的Unity机器学习项目-ML-Agents
目录
基于Unity的ML-Agents 从零开始构建一个可以成功运行的项目。重点罗列出torch和mlagents配置中可能存在的问题。
一、安装Anaconda并新建一个环境
这部分内容基本没有什么太大的问题,建议参考以下几个链接就能顺利完成。
二、配置torch和mlagents
1. 进入虚拟环境(我的环境命名为ml-agents)
① 打开 Anaconda Prompt
② 激活虚拟环境,输入conda activate XXXX(虚拟环境名称)
2. pip install torch
① 首先,明确自己的虚拟环境下安装的python版本(我的是==3.7)。
输入python -V
查询
② 两种方法安装:
pip3 install torch~=1.7.1 -f https://download.pytorch.org/whl/torch_stable.html
但是,我自己在尝试的时候,通常会超时,而且还会出现下载为GPU版本的情况。所以我更推荐第二种下载方式。- 我们在这个手动下载网页链接下找到符合自己python对应的CPU版本的torch,下载到本地进行安装。
大家可以参考我现在的版本。
③ 在上述第二种方法下,我们吧这个.whl后缀的文件现在至本地,找到它的绝对路径(我的路径在D:\Donwloads\
)。等待完成即可。
3. pip install mlagents
-
这部分基本没什么问题,输入
pip install mlagents -i https://pypi.douban.com/simple
慢的话后面加上清华镜像就可以了。 -
测试一下是否成功安装mlagents,输入
mlagents-learn --help
A. 正常显示情况。
B.
protobuf
版本太高——那就uninstall后重新下一个低版本的
—B.1 报错如下:
—B.2 解决如下,输入pip install protobuf==3.19.0 -i https://pypi.douban.com/simple
基本上我遇到的问题就是这个,再一个就是提示GPU版本错误,关于这个问题只要你在第二个步骤是下载CPU版本的torch
就没有问题了。
三、最激动人心的——在Unity里动起来
1. Unity 场景搭建
可完全参照这篇文章操作搭建环境
但是 代码中还是有一些问题需要注意。
- 在
OnActionReceived()
函数中,使用浮点型数组会报错,所以还是在函数中声明变量类型为ActionBuffers
变量名为vectorAction
在调用的时候使用vectorAction.ContinuousActions[0]
修改动作。
原本
修改 - 在重写
Heuristic()
方法时也一样。
原本
修改
至此,代码部分没有任何问题。训练时记得把脚本中的Behavior Type 修改回Default
2. 配置文件.yaml
这里也可以参考训练网络-配置文件
这个压缩包是Unity官方给出ML-Agents
文件名为 rollingball_config.yaml
文件位置 D:\Downloads\ml-agents-main\ml-agents-main\config\ppo\
3. 执行训练文件
- 我们从Anaconda Prompt中激活新建的虚拟环境(同第1步骤);
- 进入压缩包所在位置 即
D:\Downloads\ml-agents-main\ml-agents-main\config\ppo\
; - 输入
mlagents-learn ./rollingball_config.yaml --run-id rollingball
其中 id 后的名称为训练后结果存放的位置; - 不出意外会报错 ;
- 不着急我们更新一下就好了 参考;
① 执行指令获得帮助python -m mlagents.trainers.upgrade_config -h
② 执行python -m mlagents.trainers.upgrade_config rollingball_config.yaml rollingball_config.yaml
③ 再执行一次即能看到令人激动的UNITY了!mlagents-learn ./rollingball_config.yaml --run-id=RollingBall --force
,其中force表示强制覆盖原有文件
如果出现以上图片,恭喜你配置成功了,而且只需要在Unity中点击运行即可开始训练了!!!!
四、最终的结果
1. 训练结果的输出
我们在第三步骤-3.执行训练文件-③中输入mlagents-learn ./rollingball_config.yaml --run-id=RollingBall --force
,所以训练结果就在这里。
2. 训练结果的使用
我们只需要把这个训练好的.onnx文件拖进Unity,然后给到Behaviors parameters——Model
就可以直接看到训练后的效果。
写在最后
最近忙完了手头的工作,开始在Unity下试试看机器学习,看看能有什么新突破和发现吧。六月的阴雨,带走离别,迎来酷暑。继续向前冲吧,谁说站在光亮里的才算英雄呢~