Unityで機械学習を使うためのml-agentsアセットを導入し、Windows環境で3DBallというサンプルを動作させるための手順をまとめました。
色々ぐぐると今とはバージョンがずれていたりエラーが出たりフォルダ構成が違ってたりするので
自分用メモ代わりにまとめます。
導入するもの一覧
- Unity Hub
- Unity(2017.4以降なら問題なさそう、今回は2019.1.2f1)
- Anaconda 2019.03 for Windows 64bit Python3.7
- TensorFlow 1.7.1
- ml-agents 0.8.1
- pillow 5.4.1(公式の手順で進めると6.0.0がインストールされてしまうので手動でインストールします)
導入手順
- Unity Hubのインストール
最初にUnity Hubをインストールします。Unityの各バージョンを管理できるパッケージ管理ツールです。Unityはプラグインがバージョンに依存する場合も多く、入れておいた方がいいと思います。
- Unity(2017.4以降)のインストール
Unity Hubを起動し、インストールボタンを押すと各バージョンをインストールできます。
今回は2019.1.2f1をインストールしてください。
- Anacondaのインストール
Windows 64bit Python3.7をインストールします。
- 「Anaconda Navigator」を起動
スタートメニューで「Anaconda Navigator」と入力すると起動できます。
起動時に各種初期設定を行うので起動が終わったら閉じて大丈夫です。
- ml-agentsのダウンロード
ここからzipファイルでダウンロード、またはgitでクローンしておきます。
- Pythonの導入
ml-agents(0.8.1)のドキュメントを読むと
Python3.6が指定されているのでその通りインストールします。
> conda create -n ml-agents python=3.6
> conda activate ml-agents
-
Tensorflow1.7.1のインストール
```pip install tensorflow==1.7.1
``` ml-agents用の環境のインストール
※ml-agentsが自動でインストールするpillowが6.0.0なのでここでエラーになります。
以下のコマンドを入力してバージョンを5.4.1に差し替えます。
> pip uninstall pillow
> pip install pillow==5.4.1
ローカルに展開したml-agentsのフォルダに移動します。
> pip install mlagents
> cd ml-agents-envs
> pip install -e .
> cd ../ml-agents
> pip install -e .
いよいよ学習
Unityを起動、UnitySDKプロジェクトを開く
Examples/3DBall/Scenes/3DBallを開いてください。学習モードをセットする
HierarchyのBall 3D Academyを選択し、Controlチェックボックスをつけてください。
このチェックが付いていると学習モード、外すと再生モードになります。学習開始
以下のコマンドを実行してください。
> mlagents-learn config/trainer_config.yaml --run-id=firstRun --train
Playボタンを押してと表示されたらUnityのPlayボタンを押す
デフォルトだと50000回まで学習する設定になっていますが、好きな時にCtrl+cを押して終わらせる事で
N回学習したデータとして学習結果が保存されます。
- 学習結果を再生してみる
models/firstRun-0/3DBallLearning.nnを
UnitySDK/Assets/<好きな名前>.nnにコピーする(例. own_3DBallLearning.nn)
Brains/3DBallLearningのプロパティでModelをown_3DBallLearningに変更
HierarchyのBall 3D Academyを選択し、Controlチェックボックスを外す
UnityのPlayボタンを押す
→学習結果が再生される
学習回数ごとの結果、まとめ
1000回
ちょっと動いていますが、まだぼろぼろと球が落ちます
5000回
だいぶうまくなってきました。数秒持つけど落としちゃう。みたいな
10000回
球を落とさないという意味ではもう収束しているようですね。多少板の上で球が動くくらいです。
50000回
もうあまり10000回と変わりませんでした。板を曲面にするとかもう少し難しくしたりしてみると面白いと思います。