ML-Agentsをインストールして学習し、推論モードでプレイしてみました。今回は「Unity ML-Agents 実践ゲームプログラミング v1.1対応版 (Unityではじめる機械学習・強化学習)」の「RollerBall」のサンプルを使いました。(v2.2対応版が発売されています。)
インストール
ML-AgentsはGitHubでダウンロードできます。現在の最新版はRelease 20(v2.3.0-exp.3)ですが、開発中のバージョンをインストールしてしまいました。
Release 20ではml-agentsとml-agents-envsは「v0.30.0」ですが、インストールしたのは「v0.31.0.dev0」です。
新しいバージョンでは、TensorFlowからPyTorchに変更されています。PyTorchも適当に最新版をpipでインストールしました。
互換性
raise errors.OnnxExporterError(“Module onnx is not installed!”) from e torch.onnx.errors.OnnxExporterError: Module onnx is not installed!
onnxがないので最新版をインストールすると、protobufの最新版も同時にインストールされてmlagentsとの互換性がなくなりました。protobufの古いバージョンは自動でアンインストールされて、onnxのバージョンに対応するバージョンのprotobufがインストールされます。
requires protobuf<3.20,>=3.6, but you have protobuf 4.23.4 which is incompatible.
対応バージョンのprotobufをインストールして、それと互換性のあるonnx 1.12.0を入れました。
onnx 1.14.0 requires protobuf>=3.20.2, but you have protobuf 3.19.6 which is incompatible.
メソッドの変更
新しいバージョンのML-Agentsではメソッドの引数の型などが変更されています。手動でエージェントを動かすためのHeuristicメソッドや行動を受け取るOnActionReceivedメソッドの引数はfloat型の配列でしたが、ActionBuffers型になっています。基底クラスのコメントにサンプルコードがありました。
public override void Heuristic(in ActionBuffers actionsOut)
{
var continuousActionsOut = actionsOut.ContinuousActions;
continuousActionsOut[0] = Input.GetAxis("Horizontal");
continuousActionsOut[1] = Input.GetAxis("Vertical");
}
推論
学習が終わるとアナコンダプロンプトで学習を実行したときのディレクトリに「results」フォルダが作られて、出力されたonnxファイル名が表示されます。そのファイルをUnityにインポートします。
Behavior ParametersコンポーネントのModelにこれをアタッチします。Behavior Typeを「Default」か「inference Only」にしてプレイボタンを押すと推論が開始されます。