Unity ML-Agents 0.11.0のチュートリアル
1. Unity ML-Agents
「Unity ML-Agents」は、Unity で「強化学習」の「環境」を構築し、「エージェント」の学習および推論を行うためのフレームワークです。
最新版「0.11.0」では、「BroadcastHub」「Brain」が廃止され、よりシンプル&スマートになりました。サンプルの学習環境「3DBall」を使って、学習および推論の手順を解説します。
2. 開発環境の準備
◎ Unityの開発環境のインストール
「Unity ML-Agents」を利用するには、「Unity 2017.4」以降が必要になります。今回は「2019.2.2f1」を使っています。
以下のサイトからダウンロード後、インストールしてください。
◎ Unity ML-Agentsのリポジトリのダウンロード
「Unity ML-Agents」のリポジトリには、
・強化学習の環境を作成するためのUnityアセット
・強化学習の学習を行うPythonスクリプト
が含まれています。
以下のコマンドで、リポジトリをクローンします。
$ git clone https://github.com/Unity-Technologies/ml-agents.git
ml-agentsフォルダが生成されます。
◎ ml-agentsのフォルダ構成
ml-agentsフォルダのフォルダ構成は、次のとおりです。
・UnitySDKフォルダ: 強化学習の環境を作成するためのアセットが含まれるUnityプロジェクト
・UnitySDK/Assetsフォルダ: 強化学習の環境を作成するためのUnityアセット
・ml-agentsフォルダ: 強化学習の学習を行うPythonパッケージ
・ml-agents-envsフォルダ: Unity環境とml-agentsパッケージ間のインタフェースとなるPythonパッケージ
・configフォルダ: 学習のハイパーパラメータを定義したファイル
・gym-unityフォルダ: OpenAI Gymと連携するためのパッケージ
・docsフォルダ: ドキュメント
・demoフォルダ: デモ
◎ Pythonの仮想環境の作成
Anacondaで「Python 3.6」の仮想環境を作成し、以下のコマンドで「mlagentsパッケージ」をインストールします。
$ pip install mlagents
「mlagentsパッケージ」をインストールすると、以下のような依存関係もインストールされます。
・TensorFlow: 深層学習ライブラリ
・Jupyter Notebook: プログラムの実行結果を記録しながらデータ分析を行うためのツール
・Matplotlib: グラフ描画ライブラリ
・NumPy:数値計算ライブラリ
・Pillow(PIL): 画像処理ライブラリ
・docopt: コマンドラインオプションパースライブラリ
自分の環境では、NumPyがうまくインストールされず、「sudo pip uninstall numpy」「sudo pip install numpy」のコマンドを追加しました。
3. Unity ML-Agentsのプロジェクトの準備
「Unity ML-Agents」のプロジェクトの準備方法は、次のとおりです。
(1) Unityを起動し、Unityのプロジェクトを「3D」で新規作成。
(2) 強化学習の「環境」を作成するためのアセット(UnitySDK/Assets/ML-Agents)をプロジェクトの「Assets」フォルダにコピー。
(3) メニュー「File→Build Settings...」を選択。
(4)「Target Platform」に、Macの場合は「Mac and Linux Standalone」、Windowsの場合は「PC」を選択。
(5)「Player Settings...」ボタンを押す。
(6)「Other Settings」の「Api Compatibility Level」で「.Net 4.x」を選択。
(7) メニュー「File→Save Project」を選択し、設定を保存。
◎ Unityアセット内のフォルダ構成
Uniryアセット(UnitySDK/Assets/ML-Agents)内のフォルダ構成は、次のとおりです。サイズが大きいので、サンプルの学習環境を利用しない場合は「ML-Agents/Examples」を削除しても良いですが、今回は利用します。
・Editorフォルダ: エディタ関連のスクリプト
・Examplesフォルダ: サンプルの学習環境のフォルダ
・Pluginsフォルダ: Unity ML-Agentsの各種プラグイン
・Resourcesフォルダ: Unity ML-Agentsの各種リソース
・Scriptsフォルダ: Unity ML-Agentsの各種スクリプト
4. サンプルの学習環境の準備
「Unity ML-Agents」が提供しているサンプルの学習環境の1 つ「3DBall」を準備します。台の傾きでバランスを取り、ボールを落下させないようにキープする学習環境です。
サンプルの学習環境の準備方法は、次のとおりです。
(1) Projectウィンドウで「Assets/ML-Agents/Examples/3DBall/Scene」にあるシーン「3DBall」を開く。
5. Pythonスクリプトによる学習
「強化学習の学習を行うPythonスクリプト」を使って「サンプルの学習環境」を学習します。学習が完了すると「推論モデル」が生成されます。
(1) Pythonの仮想環境で、「ml-agents」のルートに移動し、「mlagents-learn」コマンドで「学習」を開始。
「mlagents-learn」の書式は次の通りです。
$ mlagents-learn <学習コンフィグファイルのパス> --run-id=<実行ID> --train
「学習コンフィグファイル」は学習用のハイパーパラメータをまとめたyamlファイルで、「ml-agents/config/trainer_config.yaml」にあります。
「実行ID」は異なる訓練結果を分離するために使用する任意の文字列です。
「--train」は推論でなく学習であることを指定します。
今回は、次のようにコマンドを入力します。
$ mlagents-learn ./config/trainer_config.yaml --run-id=firstRun --train
以下のようなログが表示されます。
▄▄▄▓▓▓▓
╓▓▓▓▓▓▓█▓▓▓▓▓
,▄▄▄m▀▀▀' ,▓▓▓▀▓▓▄ ▓▓▓ ▓▓▌
▄▓▓▓▀' ▄▓▓▀ ▓▓▓ ▄▄ ▄▄ ,▄▄ ▄▄▄▄ ,▄▄ ▄▓▓▌▄ ▄▄▄ ,▄▄
▄▓▓▓▀ ▄▓▓▀ ▐▓▓▌ ▓▓▌ ▐▓▓ ▐▓▓▓▀▀▀▓▓▌ ▓▓▓ ▀▓▓▌▀ ^▓▓▌ ╒▓▓▌
▄▓▓▓▓▓▄▄▄▄▄▄▄▄▓▓▓ ▓▀ ▓▓▌ ▐▓▓ ▐▓▓ ▓▓▓ ▓▓▓ ▓▓▌ ▐▓▓▄ ▓▓▌
▀▓▓▓▓▀▀▀▀▀▀▀▀▀▀▓▓▄ ▓▓ ▓▓▌ ▐▓▓ ▐▓▓ ▓▓▓ ▓▓▓ ▓▓▌ ▐▓▓▐▓▓
^█▓▓▓ ▀▓▓▄ ▐▓▓▌ ▓▓▓▓▄▓▓▓▓ ▐▓▓ ▓▓▓ ▓▓▓ ▓▓▓▄ ▓▓▓▓`
'▀▓▓▓▄ ^▓▓▓ ▓▓▓ └▀▀▀▀ ▀▀ ^▀▀ `▀▀ `▀▀ '▀▀ ▐▓▓▌
▀▀▀▀▓▄▄▄ ▓▓▓▓▓▓, ▓▓▓▓▀
`▀█▓▓▓▓▓▓▓▓▓▌
¬`▀▀▀█▓
INFO:mlagents.trainers:CommandLineOptions(debug=False, num_runs=1, seed=-1, env_path=None, run_id='firstRun', load_model=False, train_model=True, save_freq=50000, keep_checkpoints=5, base_port=5005, num_envs=1, curriculum_folder=None, lesson=0, slow=False, no_graphics=False, multi_gpu=False, trainer_config_path='./config/trainer_config.yaml', sampler_file_path=None, docker_target_name=None, env_args=None, cpu=False)
INFO:mlagents.envs:Start training by pressing the Play button in the Unity Editor.
「Start training by pressing the Play button in the Unity Editor」(Unity EditorのPlayボタンを押して訓練を開始してください)と表示されたら準備完了です。
(2) UnityのPlayボタン(▶)を押して学習開始。
最初のうちはボールを落としますが、徐々に上達する様子が見れます。
ログには「Mean Reward」(平均報酬)と「Std of Reward」(標準偏差)が出力されます。
INFO:mlagents.trainers: firstRun: 3DBall: Step: 2000. Time Elapsed: 20.894 s Mean Reward: 1.251. Std of Reward: 0.795. Training.
INFO:mlagents.trainers: firstRun: 3DBall: Step: 3000. Time Elapsed: 31.224 s Mean Reward: 1.438. Std of Reward: 0.913. Training.
INFO:mlagents.trainers: firstRun: 3DBall: Step: 4000. Time Elapsed: 41.293 s Mean Reward: 1.728. Std of Reward: 1.055. Training.
INFO:mlagents.trainers: firstRun: 3DBall: Step: 5000. Time Elapsed: 51.512 s Mean Reward: 2.382. Std of Reward: 1.612. Training.
:
50000ステップ(学習コンフィグファイルの初期設定)に達すると学習完了です。「ml-agents/models/firstRun-0/3DBall.nn」に「推論モデル」が出力されています。
6. Unityでの推論モデルの実行
「推論モデル」の利用手順は次の通りです。
(1) 推論モデル「3DBall.nn」をプロジェクトの「Assets」にコピー。
(2) Projectウィンドウで「Assets/ML-Agents/Examples/3DBall/Prefabs」にある「3DBall」を選択し、Inspectorで「Open Prefab」をクリック。
(3)プレハブ「3DBall」内の「Agent」を選択し、Inspectorで設定を確認。
「Agent」(今回はBall 3D Agent)は強化学習のエージェント情報を管理するコンポーネントです。
シーン「3DBall」内には12個のプレハブ「3DBall」のインスタンスが存在します。12個すべてのインスタンスの「Agent」に対して設定更新する代わりに、プレハブ「3DBall」でまとめて更新できます。
(4)「Agent」の「Behavior Parameters」の「Model」に、「3DBall.nn」をドラッグ&ドロップ。
(5) UnityのPlayボタン(▶ボタン)を押して推論開始。
推論が実行され、ボールがバランスをとる様子を見ることができます。
「学習を行うPythonスクリプト」が実行されているかどうかに応じて、UnityのPlayボタンで学習と推論のどちらが実行されるかが決まります。
この記事が気に入ったらサポートをしてみませんか?