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

Unity 机器学习 ML-Agents 基础

  • Unity 官方示例下载
    • ML-Agents 部分
    • Python 下载
  • Anaconda
    • Anaconda 环境变量
    • Anaconda 基础环境
    • Anaconda 虚拟环境构建 ML-Agents
      • 安装 ML-Agents Python 包
      • 安装 ML-Agents 包
  • ML-Agents 入门指南
    • Unity Hub 部分
    • 虚拟环境 训练
      • 虚拟环境 训练运行:
      • 虚拟环境 开始训练:
      • 虚拟环境 观察训练进度:
      • 虚拟环境 停止训练
      • 虚拟环境 恢复训练
      • 虚拟环境 训练模型
  • ML-Agents 打造新的学习环境
    • ML-Agents 资产导入
    • Unity 场景创建
    • Unity 代码部分
  • Anaconda 执行
    • rollerball_config.yaml 机器学习逻辑处理代码
    • Anaconda 虚拟环境
  • 地址合集
  • 虚拟环境命令小结
    • 虚拟环境安装
    • 虚拟环境 训练命令

Unity 官方示例下载

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

进入官方网站

Unity 机器学习(ML-Agents) 基础_第1张图片

点击机器学习代理

Unity 机器学习(ML-Agents) 基础_第2张图片

ML-Agents 部分

ML_Agents: 下载GitHub 项目.

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

Unity 机器学习(ML-Agents) 基础_第3张图片
Unity 机器学习(ML-Agents) 基础_第4张图片

Unity 机器学习(ML-Agents) 基础_第5张图片

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

Unity 机器学习(ML-Agents) 基础_第6张图片
Unity ML-Agents 工具包文档地址
Unity 机器学习(ML-Agents) 基础_第7张图片

Python 下载

Python 下载地址

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

Unity 机器学习(ML-Agents) 基础_第8张图片

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

请添加图片描述

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

Unity 机器学习(ML-Agents) 基础_第9张图片

Anaconda

Anaconda 官方网站

打开 Anaconda 官方网站

Unity 机器学习(ML-Agents) 基础_第10张图片

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

Unity 机器学习(ML-Agents) 基础_第11张图片

Anaconda 环境变量

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

Unity 机器学习(ML-Agents) 基础_第12张图片

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

Unity 机器学习(ML-Agents) 基础_第13张图片

搜索栏 搜索环境变量

Unity 机器学习(ML-Agents) 基础_第14张图片

点击环境变量按钮

Unity 机器学习(ML-Agents) 基础_第15张图片

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

Unity 机器学习(ML-Agents) 基础_第16张图片

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

%UserProfile%\Anaconda3\Scripts

%UserProfile%\Anaconda3\Scripts\conda.exe

%UserProfile%\Anaconda3

%UserProfile%\Anaconda3\python.exe

Unity 机器学习(ML-Agents) 基础_第17张图片

添加完毕之后一路确认

Unity 机器学习(ML-Agents) 基础_第18张图片
Unity 机器学习(ML-Agents) 基础_第19张图片

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

Unity 机器学习(ML-Agents) 基础_第20张图片

Anaconda 基础环境

新建自己的环境 

Unity 机器学习(ML-Agents) 基础_第21张图片

等待加载

Unity 机器学习(ML-Agents) 基础_第22张图片

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

Unity 机器学习(ML-Agents) 基础_第23张图片

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

Unity 机器学习(ML-Agents) 基础_第24张图片

安装 ML-Agents 包

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

Unity 机器学习(ML-Agents) 基础_第25张图片

ML-Agents 入门指南

ML-Agents 入门指南

Unity Hub 部分

解压 GitHub  ML-Agents 压缩包

Unity 机器学习(ML-Agents) 基础_第26张图片
Unity 机器学习(ML-Agents) 基础_第27张图片

Unity 机器学习(ML-Agents) 基础_第28张图片

Unity 机器学习(ML-Agents) 基础_第29张图片

Unity 机器学习(ML-Agents) 基础_第30张图片

虚拟环境 训练

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

Unity 机器学习(ML-Agents) 基础_第31张图片

导航到 ML-Agents 根目录

Unity 机器学习(ML-Agents) 基础_第32张图片

虚拟环境 训练运行:

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

Unity 机器学习(ML-Agents) 基础_第33张图片

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

Unity 机器学习(ML-Agents) 基础_第34张图片

虚拟环境 开始训练:

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

Unity 机器学习(ML-Agents) 基础_第35张图片

虚拟环境 观察训练进度:

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

Unity 机器学习(ML-Agents) 基础_第36张图片

虚拟环境 停止训练

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

Unity 机器学习(ML-Agents) 基础_第37张图片

虚拟环境 恢复训练

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

Unity 机器学习(ML-Agents) 基础_第38张图片

虚拟环境 训练模型

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

Unity 机器学习(ML-Agents) 基础_第39张图片

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

Unity 机器学习(ML-Agents) 基础_第40张图片

Unity 机器学习(ML-Agents) 基础_第41张图片

选中最新的训练文件。

Unity 机器学习(ML-Agents) 基础_第42张图片

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

Unity 机器学习(ML-Agents) 基础_第43张图片

导入 Unity 

Unity 机器学习(ML-Agents) 基础_第44张图片

搭载:
训练模型 赋值

Unity 机器学习(ML-Agents) 基础_第45张图片

运行效果:

Unity 机器学习(ML-Agents) 基础_第46张图片

ML-Agents 打造新的学习环境

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

ML-Agents 资产导入

打开 Unity Package Manager

Unity 机器学习(ML-Agents) 基础_第47张图片

点击磁盘添加包

Unity 机器学习(ML-Agents) 基础_第48张图片

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

Unity 机器学习(ML-Agents) 基础_第49张图片

选中 package.json 导入

Unity 机器学习(ML-Agents) 基础_第50张图片

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

Unity 机器学习(ML-Agents) 基础_第51张图片

Unity 场景创建

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

Unity 机器学习(ML-Agents) 基础_第52张图片

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

Unity 机器学习(ML-Agents) 基础_第53张图片

代理器 创建 

请添加图片描述

创建之后的层级

Unity 机器学习(ML-Agents) 基础_第54张图片

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>();
    }



    /// 
    /// 设置新集的环境
    /// 场景以随机方式初始化,以使代理能够学习在各种条件下解决任务
    /// 
    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);
    }



    /// 
    /// 观察环境
    /// 代理收集的信息包括目标的位置、代理本身的位置以及代理的速度
    /// 
    /// 
    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);
    }



    /// 
    /// 动作和奖励逻辑
    /// 
    /// 
    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();
        }

    }

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

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

Unity 机器学习(ML-Agents) 基础_第55张图片

Anaconda 执行

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

Unity 机器学习(ML-Agents) 基础_第56张图片

导航到 ML-Agents 根目录

Unity 机器学习(ML-Agents) 基础_第57张图片

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 文件

Unity 机器学习(ML-Agents) 基础_第58张图片

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

Unity 机器学习(ML-Agents) 基础_第59张图片

更改名称

Unity 机器学习(ML-Agents) 基础_第60张图片

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

Unity 机器学习(ML-Agents) 基础_第61张图片

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

Unity 机器学习(ML-Agents) 基础_第62张图片

Unity 机器学习(ML-Agents) 基础_第63张图片

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

Unity 机器学习(ML-Agents) 基础_第64张图片

模型训练结果:

Unity 机器学习(ML-Agents) 基础_第65张图片

Unity 机器学习(ML-Agents) 基础_第66张图片

导入Unity

Unity 机器学习(ML-Agents) 基础_第67张图片

最终效果:

Unity 机器学习(ML-Agents) 基础_第68张图片

Unity 机器学习(ML-Agents) 基础_第69张图片

地址合集

清华大学开源软件镜像站

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

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

你可能感兴趣的:(Unity,unity,机器学习,游戏引擎,python,人工智能)