unity的ML-agent训练流程
1.配环境
1)创建虚拟环境
下载好anaconda后打开anaconda prompt,新建虚拟环境,命名为Unity,通过以下指令:
conda create -n Unity python=3.10
接下来提过指令
conda activate Unity
激活虚拟环境Unity
2)在虚拟环境内配置需要用的库
在GitHub上下载unity官方的ml-agent包仓库,下载到位置
D:\Programming\unity\projects
#只是本人的存储位置,具体存储位置由你自行决定
在anaconda prompt通过依次输入指令导入库文件
pip install -e ./ml-agents-envs
pip install -e ./ml-agents
一般会因为网速问题导致报错超时,可将指令改为如下形式
pip install -e ./ml-agents-envs -i https://pypi.tuna.tsinghua.edu.cn/simple
或
pip --default-timeout=100 install -e ./ml-agents-envs
等待提示导入完成后输入指令
mlagents-learn --help
若出现提示文本,则环境配置成功
2.训练
0)编写配置文件
带有各类训练参数配置的文件,格式为.yaml
1)启动训练程序
打开anaconda prompt,在anaconda prompt内cd到ml-agent包所在的路径后,例如使用3DBall的config文件训练模型,输入以下指令
#config文件路径 #id可任意取名
mlagents-learn config/ppo/3DBall.yaml --run-id=test --train
接着会出现unity标识和和[INFO]开头的提示信息,此时可打开unity,启动游戏,如果会开始刷新[INFO]开头的提示信息,说明已经开始正常训练模型。(图用的是Basic.yaml)
训练过程会根据config文件设置的步数显示奖励数据(此处设置的是每1000步输出一次奖励数据)
如想手动中断训练,可在anaconda prompt按下快捷键Ctrl+C中断
2)通过tensorboard查看训练统计参数
输入以下指令
#训练的模型保存路径
tensorboard --logdir result/xxx
会输出一个tensorboard网址,打开则为训练统计图
3)获取模型并启用
模型训练完后,窗口会提示训练好的模型文件(格式为.onnx)存放的位置,可将模型文件拖入unity项目中,将训练的智能体中找到Behavior Parameters组件,将其中的Model属性修改为训练后生成的模型文件,即可启动游戏看训练的效果。
*.补充知识
学习过程:通过配置智能体上的各类组件和脚本,然后通过anaconda prompt运行训练脚本进行学习。
必要的组件:
1)Behavior Parameters:用于调节驱动智能体输入的各类参数
几个重要的参数
Space Size:输入的维度
Continuous Action:输出的连续动作数
Discrete Branch:输出的离散动作数
Model:使用的模型
2)Decision Requester:设定智能体如何采取决策
Decision Period:采取决策的时间间隔
Decision Step:采取决策的步数
Take Actions Between:不采取决策是否执行动作
3)继承自Agent类的C#脚本:我们自己编写的用于设置训练细节的脚本
通过继承Agent类,可重写以下方法:
Initialize方法:初始化环境,获取组件信息,设置参数在这里完成。
CollectObservations方法:这个方法会收集当前游戏的各种环境,包括智能体的位置,速度等信息,ML-Agents会把这些信息自动生成Tensor,进行计算。这里相当于设置神经网络的输入,如果是摄像机输入而不是向量输入的情况下此函数什么都不用做。输入的变量要进行标准化!
OnActionReceived方法:实现的是整个游戏中一个Step中的操作,接收神经网络的输出,使其转换为智能体的动作,设置奖励函数,并且判断游戏是否结束。建议将EndEpisode方法在该方法中调用而不是在Update中调用。
OnEpisodeBegin方法:每次游戏结束后,重开一轮需要做的处理,比如重置位置信息等。
Heuristic方法:如果想自己操作智能体,定义该方法,游戏就会采集玩家的输出信息,可以学习玩家的思维,大大促进训练教程。
CollectDiscreteActionMasks方法:在特殊情况下屏蔽某些不需要的AI操作(如地图边界阻止)
4)Demonstration Recorder:记录玩家操作的组件,记录完存储为.demo文件
Record:是否记录操作,勾选则在运行时记录
Num Steps To Record:记录的步数,值为0时表示无穷大
Demonstration Name:录制后得到的文件名
Demonstration Directory:录制文件存放的路径,图中为{项目路径}/Demo
若要使用.demo文件进行训练,需要在.yaml文件中加入以下配置
behaviors:
trainDemo: #与.demo文件名一致
trainer_type: ppo
reward_signals:
gail:
strength: 0.5
demo_path: Demo/trainDemo.demo
behavioral_cloning:
strength: 0.5
demo_path: Demo/trainDemo.demo
max_steps: 500000
strength: 0.5
demo_path: Demo/trainDemo.demo
behavioral_cloning:
strength: 0.5
demo_path: Demo/trainDemo.demo
max_steps: 500000