ML-AgentsのExampleを使って学習済みのモデルをつくる
前回までUnityでML-AgentsのExampleプロジェクトを実行して動かしてみた。今回は、Exampleプロジェクト内で学習を実行して、新たにモデルをつくるところまでをやってみる。
ちなみに、ML-Agentsではいくつかの学習アルゴリズムを選択可能だが、今回のExampleではPPO(Proximal Policy Optimization)という学習アルゴリズムをつかって学習する。
実行環境
Windows 10
Unity 2019.4.25f1
Anaconda 4.6.11 (Python 3.7.3)
学習済みモデルをつくって箱のキャラクターを動かしてみる
学習済みのモデルは、箱のキャラクターのモデル3DBallのAgentオブジェクトで設定されており、以下のModelと書いてある部分が学習済みのモデルとなる。
ML-Agentsの肝はこのモデルをつくることなので、Pythonを使って新規に学習を実行し、モデルを自分で作ってみる。
Anaconda Promptなどからcdコマンドでcloneしたml-agentsまで移動して、以下のコマンドを打つ。
# mlagents-learn config/ppo/3DBall.yaml --run-id=first3DBallR
すると以下のように学習がスタートするので、この状態でUnityを再生する。
再生中は学習が続いているので、prompt上で以下のようなメッセージが表示される。
[INFO] 3DBall. Step: 12000. Time Elapsed: 27.599 s. Mean Reward: 1.217. Std of Reward: 0.684. Training.
適当なタイミングでUnityの再生をStopすれば、学習は終了。以下のようなメッセージがpromptに表示され、results\first3DBallRのディレクトリ以下に3DBall.onnx.というモデルが出力される。
[INFO] Learning was interrupted. Please wait while the graph is generated. [INFO] Exported results\first3DBallR\3DBall\3DBall-63693.onnx [INFO] Copied results\first3DBallR\3DBall\3DBall-63693.onnx to results\first3DBallR\3DBall.onnx.
これをUnityのプロジェクト上のTFModelsにドラッグ&ドロップしてコピーする(既存のモデルと名前が被ってわかりにくいので、new3DBall.onnxという名前に変更した)。あとはモデルを付加したいObjectを選択して、以下のようにドラッグ&ドロップして設定すればOK。
今回は試しに右下のキューブにモデルを付加して、わかりやすいように箱の色を色を赤くしてみた。かなり学習時間が短いので、再生して見るとすぐにボールを落としてしまうことがわかる。
PythonとUnityでML-Agentsの実行環境は構築できた。Exampleプロジェクトで試しに学習を実行してみて、モデルを右下の赤いキューブにセット。青いキューブは学習時間が長いモデルなのでボールを落とさないようにうまくバランスとってるけど、赤いキューブは学習時間が短く下手なのですぐボールを落とす pic.twitter.com/1w8ts7HJCJ
— Wakky (@wakky_free) December 26, 2021
ひとまず機械学習の実行までできたので、ML-Agetnsの雰囲気は掴めてきた。
今回はExampleプロジェクトのシーンを使って学習を実行したが、次回は一からシーンをつくって学習を実行し、学習済みモデルをオブジェクトに付加して動かすところまでをやってみたいと思う。
参考文献
基本的には以下の本を読みつつ勉強していき、最終的には自分で何かしらゲームを作っていく予定。最低限ML-Agentsを使うための流れはブログで書いていこうと思っているが、詳細については説明しないので、深く理解するには本を買って勉強してみることをオススメする。
古くなった情報を補完するため、本と合わせて以下のML-Agents Release 18の公式ドキュメントを参照している。
https://github.com/Unity-Technologies/ml-agents/tree/release_18_docs/
日記まとめ
この日記は以下でまとめてます。