Unity 机器学习(ML-Agents) 基础

Unity 官方示例下载

Unity 中国 地址 : Unity 中国 ML-Agents 示例下载

进入官方网站

在这里插入图片描述

点击机器学习代理

在这里插入图片描述

ML-Agents 部分

ML_Agents: 下载GitHub 项目.

下载 机器学习项目 选择想要下载的版本

请添加图片描述
请添加图片描述

请添加图片描述

当然你也可以在主页自主点击文档。

请添加图片描述
Unity ML-Agents 工具包文档地址
请添加图片描述

Python 下载

Python 下载地址

使用 ML-Agents Toolkit 的条件:
重要的是:1. Unity 
		 2. Python(根据版本不同下载不同的,我这里使用的是 3.73. Anaconda (Python 可视化窗口软件)

请添加图片描述

这里点击安装就会跳转 Python 下载界面

请添加图片描述

选择你想要安装的版本下载。下载完毕之后默认安装就行。

请添加图片描述

Anaconda

Anaconda 官方网站

打开 Anaconda 官方网站

在这里插入图片描述

下载 Anaconda  下载完毕之后看自己的喜好安装,尽量不要有中文路径!!!!

在这里插入图片描述

Anaconda 环境变量

下载安装完毕之后 按菜单键 找到Anaconda Prompt 打开

请添加图片描述

键入 conda --version 查看是否有返回值 如果没有 就是需要添加环境变量

请添加图片描述

搜索栏 搜索环境变量

请添加图片描述

点击环境变量按钮

请添加图片描述

找到 系统变量的 Path 点击编辑 当然双击也是可以的

请添加图片描述

点击新建将这四条添加进去:

%UserProfile%\Anaconda3\Scripts

%UserProfile%\Anaconda3\Scripts\conda.exe

%UserProfile%\Anaconda3

%UserProfile%\Anaconda3\python.exe

请添加图片描述

添加完毕之后一路确认

请添加图片描述
请添加图片描述

点击应用 确定 Anaconda环境变量就添加好了

请添加图片描述

Anaconda 基础环境

新建自己的环境 

请添加图片描述

等待加载

请添加图片描述

加载完毕之后左键点击,再点击 Open Treminal 打开 虚拟环境

请添加图片描述

Anaconda 虚拟环境构建 ML-Agents

安装 ML-Agents Python 包

您必须在安装 ML-Agents 之前单独安装 PyTorch 包
PyTorch 包安装命令:
pip3 install torch~=1.7.1 -f https://download.pytorch.org/whl/torch_stable.html

请添加图片描述

安装 ML-Agents 包

安装 ML-Agents包 命令:
python -m pip install mlagents==0.28.0
如果到目前为止都没有什么报错,基本上就算可以正常联通了。

请添加图片描述

ML-Agents 入门指南

ML-Agents 入门指南

Unity Hub 部分

解压 GitHub  ML-Agents 压缩包

请添加图片描述
请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述

虚拟环境 训练

导航到克隆 ML-Agents 存储库的文件夹(看你解压在那个位置)复制路径
我的路径是:D:\Unity\Plug-in\ML\ml-agents-release_19\ml-agents-release_19

请添加图片描述

导航到 ML-Agents 根目录

请添加图片描述

虚拟环境 训练运行:

训练环境运行:
mlagents-learn config/ppo/3DBall.yaml --run-id=first3DBallRun05
config/ppo/3DBall.yaml是我们提供的默认训练配置文件的路径。该config/ppo文件夹包含我们所有示例环境的训练配置文件,包括 3Dball
run-id 是此培训课程的唯一名称

请添加图片描述

当屏幕上显示“按 Unity 编辑器中的播放按钮开始训练”消息时,您可以在 Unity 中按“播放”按钮开始在编辑器中进行训练。
Unity 运行效果:

请添加图片描述

虚拟环境 开始训练:

如果mlagents-learn运行正确并开始训练,您应该会看到如下内容:

请添加图片描述

虚拟环境 观察训练进度:

观察训练进度命令:
tensorboard --logdir results

请添加图片描述

虚拟环境 停止训练

退出训练: Ctrl+C
停止训练后 在浏览器 键入 http://localhost:6006/ 可以查看训练进度。
最重要的统计数据是Environment/Cumulative Reward 应该在整个训练过程中增加,最终收敛到100代理可以积累的最大奖励附近。

请添加图片描述

虚拟环境 恢复训练

恢复训练,请再次运行相同的命令,并附加--resume标志
恢复训练命令:
mlagents-learn config/ppo/3DBall.yaml --run-id=first3DBallRun05 --resume

请添加图片描述

虚拟环境 训练模型

索引到 存储库的文件夹 results 文件下

请添加图片描述

打开你的训练文件夹 就是 run-id 文件名称

请添加图片描述

请添加图片描述

选中最新的训练文件。

请添加图片描述

也可以 直接选中外部的  .onnx 文件

请添加图片描述

导入 Unity 

请添加图片描述

搭载:
训练模型 赋值

请添加图片描述

运行效果:

请添加图片描述

ML-Agents 打造新的学习环境

ML-Agents 打造新的学习环境官方地址

ML-Agents 资产导入

打开 Unity Package Manager

请添加图片描述

点击磁盘添加包

请添加图片描述

ML-Agents 根目录下 找到 com.unity.ml-agents 文件夹  打开

请添加图片描述

选中 package.json 导入

请添加图片描述

导入成功后 可以Packahes 文件夹 下 找到 MLAgents 文件夹

请添加图片描述

Unity 场景创建

Target  目标物体创建:参数自己感觉合适就行

请添加图片描述

地面创建:参数自己感觉合适就行

请添加图片描述

代理器 创建 

请添加图片描述

创建之后的层级

请添加图片描述

Unity 代码部分

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Unity.MLAgents;
using Unity.MLAgents.Sensors;
using Unity.MLAgents.Actuators;


public class RollerAgent_ZH : Agent
{
    
    
    [Header("目标")]
    public Transform Target;

    [Header("增强力系数")]
    public float _ForceMultiplier = 10;

    [Header("移动组件")]
    Rigidbody _RigiBody;

    void Start()
    {
    
    
        _RigiBody = GetComponent<Rigidbody>();
    }



    /// <summary>
    /// 设置新集的环境
    /// 场景以随机方式初始化,以使代理能够学习在各种条件下解决任务
    /// </summary>
    public override void OnEpisodeBegin()
    {
    
    
        // 如果特工掉下去,动量为零
        if (this.transform.localPosition.y < 0)
        {
    
    
            this._RigiBody.angularVelocity = Vector3.zero;
            this._RigiBody.velocity = Vector3.zero;
            this.transform.localPosition = new Vector3(0, 0.5f, 0);
        }

        // 将目标移动到新点
        Target.localPosition = new Vector3(Random.value * 8 - 4,
                                           0.5f,
                                           Random.value * 8 - 4);
    }



    /// <summary>
    /// 观察环境
    /// 代理收集的信息包括目标的位置、代理本身的位置以及代理的速度
    /// </summary>
    /// <param 传感器="sensor"></param>
    public override void CollectObservations(VectorSensor sensor)
    {
    
    
        // 目标和代理位置
        sensor.AddObservation(Target.localPosition);
        sensor.AddObservation(this.transform.localPosition);

        // 代理速度
        sensor.AddObservation(_RigiBody.velocity.x);
        sensor.AddObservation(_RigiBody.velocity.z);
    }



    /// <summary>
    /// 动作和奖励逻辑
    /// </summary>
    /// <param 行动缓冲区="actionBuffers"></param>
    public override void OnActionReceived(ActionBuffers actionBuffers)
    {
    
    
        // 动作, size = 2
        Vector3 controlSignal = Vector3.zero;
        controlSignal.x = actionBuffers.ContinuousActions[0];
        controlSignal.z = actionBuffers.ContinuousActions[1];
        _RigiBody.AddForce(controlSignal * _ForceMultiplier);

        // 奖励
        float distanceToTarget = Vector3.Distance(this.transform.localPosition, Target.localPosition);

        // 达到目标
        if (distanceToTarget < 1.42f)
        {
    
    
            SetReward(1.0f);
            EndEpisode();
        }

        // 掉下来的平台
        else if (this.transform.localPosition.y < 0)
        {
    
    
            EndEpisode();
        }

    }

    /// <summary>
    /// 键盘控制代理
    /// </summary>
    /// <param 行动数组="actionsOut"></param>
    public override void Heuristic(in ActionBuffers actionsOut)
    {
    
    
        var continuousActionsOut = actionsOut.ContinuousActions;
        continuousActionsOut[0] = Input.GetAxis("Horizontal");
        continuousActionsOut[1] = Input.GetAxis("Vertical");
    }
}

搭载详情:
需要新添加组件: DecisionRequester
注意:参数更改!参数更改!参数更改! 重要的事情说三遍。

请添加图片描述

Anaconda 执行

打开 Anaconda 切换环境 左键打开 虚拟环境

请添加图片描述

导航到 ML-Agents 根目录

请添加图片描述

rollerball_config.yaml 机器学习逻辑处理代码

behaviors:
  RollerBall:
    trainer_type: ppo
    hyperparameters:
      batch_size: 10
      buffer_size: 100
      learning_rate: 3.0e-4
      beta: 5.0e-4
      epsilon: 0.2
      lambd: 0.99
      num_epoch: 3
      learning_rate_schedule: linear
      beta_schedule: constant
      epsilon_schedule: linear
    network_settings:
      normalize: false
      hidden_units: 128
      num_layers: 2
    reward_signals:
      extrinsic:
        gamma: 0.99
        strength: 1.0
    max_steps: 500000
    time_horizon: 64
    summary_freq: 10000
在 config 文件夹下 创建 .tex 文件

请添加图片描述

添加文件内容 就是 上面的代码

请添加图片描述

更改名称

请添加图片描述

Anaconda 虚拟环境

如果你也是出现这样的错误,就说明:
 在此运行ID中找到以前的数据。
 要么指定一个新的运行ID,使用 --resume 恢复运行
 要么使用 --force 参数覆盖现有的数据。  
我这里选择的是覆盖执行 --force

执行命令:
首次执行:
mlagents-learn config/rollerball_config.yaml --run-id=RollerBall
恢复运行:
mlagents-learn config/rollerball_config.yaml --run-id=RollerBall --resume 
覆盖执行:
mlagents-learn config/rollerball_config.yaml --run-id=RollerBall --force

请添加图片描述

命令执行之后点击 播放按钮 就能看到效果了

请添加图片描述

请添加图片描述

训练结果:
第一个框选的是:训练模型输出路径。
第二个框选的是:模型训练详情。Ctrl + C 浏览器地址栏查看

请添加图片描述

模型训练结果:

请添加图片描述

请添加图片描述

导入Unity

请添加图片描述

最终效果:

请添加图片描述

请添加图片描述

地址合集

清华大学开源软件镜像站

Anaconda 官方网站

ML-Agents GitHub 项目地址.

Unity 中国 ML-Agents 示例下载

Python 下载地址

安装 PyTorch 包地址

Unity ML-Agents 工具包文档地址

Unity ML-Agents 安装文档地址

Unity ML-Agents入门指南文档地址

Unity ML-Agents 打造新的学习环境文档地址

Unity ML-Agents 使用-Tensorboard.md文档地址

虚拟环境命令小结

虚拟环境安装

克隆 ML-Agents Toolkit 存储库(可选)
git clone --branch release_19 https://github.com/Unity-Technologies/ml-agents.git

(Windows) 安装 PyTorch(必选)
pip3 install torch~=1.7.1 -f https://download.pytorch.org/whl/torch_stable.html

安装 mlagentsPython 包(必选)
python -m pip install mlagents==0.28.0

高级:用于开发的本地安装(注意安装顺序)(可选)
pip3 install torch -f https://download.pytorch.org/whl/torch_stable.html
pip3 install -e ./ml-agents-envs
pip3 install -e ./ml-agents

虚拟环境 训练命令

首次执行:
mlagents-learn config/rollerball_config.yaml --run-id=RollerBall
恢复运行:
mlagents-learn config/rollerball_config.yaml --run-id=RollerBall --resume 
覆盖执行:
mlagents-learn config/rollerball_config.yaml --run-id=RollerBall --force

停止训练:
Ctrl + C
观察训练进度:
tensorboard --logdir results

暂时先这样吧,如果有时间的话就会更新,实在看不明白就留言,看到我会回复的。
路漫漫其修远兮,与君共勉。

猜你喜欢

转载自blog.csdn.net/weixin_43925843/article/details/122632982