2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ML-Agentsのバージョンをv0.13.1からv.1.0.2にアップデートする

Posted at

1. はじめに

長らくベータ版だったML-Agentsですが、最近になってついにPreview Packageとしてリリースされたとのこと。良い機会なので、手元のv0.13.1で構築されたプロジェクトを最新版のrelease_3に更新してみたいと思い、自分用の忘備録として情報をまとめてみました。基本的に影響がでかそうな変更点だけです。細々した変更や、私自身があまり使っていない機能については言及していません。たとえばC#とPython間で通信を行い、独自のデータ形式をやりとりできるようにするSide Channelという機能についてv0.13.1からrelease 3 の間でいくつか変更点があるようですが、取り上げていません。

2. 移行方法

公式が移行ガイドを公開しています。それぞれのバージョンの重要な変更点と、移行する方法がまとめられています。

3. ML-Agentsの変更点

だいぶ情報が重複していますが、以下の公式のリリースノートが参考になります。

0.14.0
0.14.1
0.15.0
0.15.1
Release 1
Release 2
Release 3

変更点についてざっくり確認していきます。

Academyクラスの変更点

シングルトンに変更 v0.14.0

v0.13.1

public abstract class Academy : MonoBehaviour {}

v0.14.0

public class Academy : IDisposable 
{
    public static Academy Instance { get; }
}

MonoBehaviourクラスを継承しないので、GameObjectにアタッチできない。Start,FixedUpdateとかのメソッドが使えなくなった。InitializeAcademy, AcademyStepも廃止。

移行ガイドによると

  • InitializeAcademyのコードをMonoBehaviour.Awakeに移動する。
  • AcademyStepのコードをMonoBehaviour.FixedUpdateに移動する。
  • OnDestroyコードをMonoBehaviour.OnDestroyに移動する。
  • AcademyResetコードを新しいメソッドに移動し、Academy.OnEnvironmentResetアクションに追加する。

とあるので、いままでAcademyに実装していた内容を他のMonoBehaviour継承クラスに移動させる必要があるようです。

自分のプロジェクトだとInitializeAcademyでカリキュラムの設定をしていたので、それを移動させる必要がありそうです。
カリキュラムのパラメータはすべてAgentクラスのパラメータだったので、直接AgentクラスのAwakeメソッドでカリキュラムの設定を行うようにしてみました。つまり

HogeAcademy

using MLAgents;
using UnityEngine;

public class HogeAcademy : Academy
{
    [field: SerializeField]
    public float m_HogeParam { get; private set; }

    public override void InitializeAcademy()
    {
        base.InitializeAcademy();

        FloatProperties.RegisterCallback("hoge_param", f =>
        {
            this.m_HogeParam = f;
        });
    }
}

HogeAgent

using Unity.MLAgents;
using Unity.MLAgents.Sensors;
using UnityEngine;

public class HogeAgent : Agent
{
    [field: SerializeField]
    public float m_HogeParam { get; private set; }

    private void Awake()
    {
        Academy.Instance.EnvironmentParameters.RegisterCallback("hoge_param", (float f) =>
        {
            this.m_HogeParam= f;
        });
    }
}

のような形にしてみました。

Agentクラスの変更点

CollectObservationsメソッドの値の渡し方が変更 v0.15.0

v0.13.1

    void override CollectObservations()
    {
        base.CollectObservations();
        this.AddVectorObs(this.transform.localPosition);
    }
v0.15.0

    public override void CollectObservations(VectorSensor sensor)
    {
        base.CollectObservations(sensor);
        sensor.AddObservation(this.transform.localPosition);
    }

メソッドの名前が変更 v0.15.0

  • InitializeAgent() -> Initialize()
  • AgentAction() -> OnActionReceived()
  • AgentReset() -> OnEpisodeBegin()
  • Done() -> EndEpisode()
  • GiveModel() -> SetModel()

Heuristicメソッドの値の渡しかたが変更 release_1

v0.13.1

    public override float[] Heuristic()
    {
        float hoge = Input.GetAxis("Horizontal");
        return new float[] { hoge };
    }
release_1

    public override void Heuristic(float[] actionsOut)
    {
        float hoge = Input.GetAxis("Horizontal");
        actionsOut[0] = hoge;
    }

trainer_config.yamlの変更点

step数の数え方が変更されたようです。v0.14.0

トレーナーのステップは、以前のバージョンのように環境ごとではなく、エージェントごとにカウントされるようになりました。例えば、シーンに10人のエージェントがいる場合、ターミナルとTensorboardに印刷されているように、20の環境ステップが200ステップに対応するようになりました(#3113)

移行ガイドによると

trainer_config.yamlのmax_stepsとsummary_freqにシーン内のエージェントの数を掛け合わせてください。

とのこと。

コマンド

--loadオプションの変更 release_1

--load -> --resume

--trainオプションの廃止 release_1

--trainをつけなくても、デフォで学習開始してくれるようになった
逆に学習しないで実行したい場合は--inference をつける。

その他

名前空間の変更

名前空間 MLAgentsUnity.MLAgentsに変更 release_1

TensorBoardが使えるようになった release_1

    Academy.Instance.StatsRecorder.Add(key, value);

最後に

まだ自分のプロジェトは作業中なので、随時更新する予定です。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?