Unity ML-Agents Release 3 のチュートリアル (1)
前回
1. Unity ML-Agents
「Unity ML-Agents」は、Unity で「強化学習」の「環境」を構築し、「エージェント」の学習および推論を行うためのフレームワークです。サンプルの学習環境「3DBall」を使って、学習および推論の手順を解説します。
2. Unityのインストール
「Unity ML-Agents」を利用するには、「Unity 2018.4」以降が必要になります。今回は「2018.4.22f1」を使っています。以下のサイトからダウンロード後、インストールしてください。
3. Unity ML-Agentsのインストール
◎ Unity ML-Agentsのダウンロード
(1) Unity ML-Agentsのサイトの「Release 3」の「download」から、ZIPファイルをダウンロード。
(2) Zipファイルを解凍して、フォルダ名を「ml-agents」に変更。
「ml-agents」のフォルダ構成は、次のとおりです。
・com.unity.ml-agents : 強化学習の環境を作成するためのUnityプラグイン
・Projectフォルダ : サンプルプロジェクト
・ml-agentsフォルダ : 強化学習の学習を行うPythonパッケージ
・ml-agents-envsフォルダ : Unity環境とml-agentsパッケージ間のインタフェースとなるPythonパッケージ
・configフォルダ: 訓練設定ファイル
・gym-unityフォルダ: OpenAI Gymと連携するためのパッケージ
・docsフォルダ: ドキュメント
◎ Anacondaのインストール
(1)「Anaconda」をサイトからダウンロードし、インストーラに従ってインストール。
・Anaconda | Individual Edition
(2) ターミナルを起動して、以下のコマンドでAnaconda がインストールされていることを確認。
「macOS」は「ターミナル」、「Windows」はスタートメニュー「Anaconda(64-bit)→ Anaconda Prompt(anaconda3)」から「コマンドプロンプト」を起動します。
$ conda --version
conda 4.8.2
◎ Pythonの仮想環境の作成
「Anaconda」でPython の「仮想環境」を作成します。「仮想環境」は、Pythonやライブラリのバージョンを用途別に切り替えて利用するための環境になります。
(1) 以下のコマンドで、Python の仮想環境を作成。
仮想環境名に「ml-agents」、Python のバージョンに「3.7」を指定します。
$ conda create -n ml-agents python=3.7
(2) 以下のコマンドで、仮想環境「ml-agents」に切り替える。
$ conda activate ml-agents
ターミナルのプロンプト(入力待ちマーク)に、(mlagents)のように仮想環境名が表示されます。
(3) 以下のコマンドで、Pythonパッケージ「ml-agents-env」「ml-agents」パッケージをインストール。
$ pip install -e ./ml-agents-envs
$ pip install -e ./ml-agents
4. Unity ML-Agentsのプロジェクトの準備
「Unity ML-Agents」のプロジェクトの準備の手順は、次のとおりです。
(1) Unityを起動し、Unityのプロジェクトを「3D」で新規作成。
(2) メニュー「Window → Package Manager」を開き、「+ → Add package from disk」を選択し、「ml-agents/com.unity.ml-agents/package.json」を選択。
◎ Unityアセット内のフォルダ構成
Uniryアセット(Packages/ML Agents)内のフォルダ構成は、次のとおりです。
・Editorフォルダ : エディタ関連のスクリプト
・Pluginsフォルダ : Unity ML-Agentsの各種プラグイン
・Runtimeフォルダ : Unity ML-Agentsの各種スクリプト
・Testsフォルダ : Unity ML-Agentsのテスト用のスクリプト
5. サンプルの学習環境の準備
「Unity ML-Agents」が提供しているサンプルの学習環境の1 つ「3DBall」を準備します。台の傾きでバランスを取り、ボールを落下させないようにキープする学習環境です。
サンプルの学習環境の準備の手順は、次のとおりです。
(1) 「ml-agents/Project/Assets」にある「ML-Agents」を作成したプロジェクトのAssets下にコピー。
(2) Projectウィンドウで「Assets/ML-Agents/Examples/3DBall/Scene」にあるシーン「3DBall」を開く。
6. Pythonスクリプトによる学習
「Pythonスクリプト」を使って「サンプルの学習環境」を学習を行います。学習が完了すると「推論モデル」が生成されます。
(1) Pythonの仮想環境で、「ml-agentsフォルダ」直下に移動し、以下のコマンドを実行。
$ mlagents-learn ./config/ppo/3DBall.yaml --run-id=firstRun
「ml-agents/config/ppo/3DBall.yaml」は3DBallの学習用のハイパーパラメータをまとめ訓練設定ファイルです。「firstRun」は訓練結果を識別するために使用する任意の文字列です。出力するモデルや統計情報のフォルダ名に使われます。
以下のようなログが表示されます。
▄▄▄▓▓▓▓
╓▓▓▓▓▓▓█▓▓▓▓▓
,▄▄▄m▀▀▀' ,▓▓▓▀▓▓▄ ▓▓▓ ▓▓▌
▄▓▓▓▀' ▄▓▓▀ ▓▓▓ ▄▄ ▄▄ ,▄▄ ▄▄▄▄ ,▄▄ ▄▓▓▌▄ ▄▄▄ ,▄▄
▄▓▓▓▀ ▄▓▓▀ ▐▓▓▌ ▓▓▌ ▐▓▓ ▐▓▓▓▀▀▀▓▓▌ ▓▓▓ ▀▓▓▌▀ ^▓▓▌ ╒▓▓▌
▄▓▓▓▓▓▄▄▄▄▄▄▄▄▓▓▓ ▓▀ ▓▓▌ ▐▓▓ ▐▓▓ ▓▓▓ ▓▓▓ ▓▓▌ ▐▓▓▄ ▓▓▌
▀▓▓▓▓▀▀▀▀▀▀▀▀▀▀▓▓▄ ▓▓ ▓▓▌ ▐▓▓ ▐▓▓ ▓▓▓ ▓▓▓ ▓▓▌ ▐▓▓▐▓▓
^█▓▓▓ ▀▓▓▄ ▐▓▓▌ ▓▓▓▓▄▓▓▓▓ ▐▓▓ ▓▓▓ ▓▓▓ ▓▓▓▄ ▓▓▓▓`
'▀▓▓▓▄ ^▓▓▓ ▓▓▓ └▀▀▀▀ ▀▀ ^▀▀ `▀▀ `▀▀ '▀▀ ▐▓▓▌
▀▀▀▀▓▄▄▄ ▓▓▓▓▓▓, ▓▓▓▓▀
`▀█▓▓▓▓▓▓▓▓▓▌
¬`▀▀▀█▓
Version information:
ml-agents: 0.18.0.dev0,
ml-agents-envs: 0.18.0.dev0,
Communicator API: 1.0.0,
TensorFlow: 2.2.0
2020-06-19 14:34:06 INFO [environment.py:199] Listening on port 5004. 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ボタンを押して訓練を開始してください)と表示されたら準備完了です。
【注意】 Windowsでは、「ImportError: DLL load failed: 指定されたモジュールが見つかりません。」というエラーが発生することがあります。その場合は、以下のサイトから「Visual Studio 2015、2017、2019」の「vc_redist.x64.exe」をダウンロードおよびインストールしてください。
・The latest supported Visual C++ downloads
詳しくは、以下のサイトで解説されています。
・TensorFlow 2.1: ImportError: DLL load failed: The specified module could not be found. #35749
(2) UnityのPlayボタン(▶)を押して学習開始。
最初のうちはボールを落としますが、徐々に上達する様子が見れます。
ログには「Mean Reward」(平均報酬)と「Std of Reward」(標準偏差)が出力されます。
2020-06-19 07:34:38 INFO [stats.py:111] 3DBall: Step: 12000. Time Elapsed: 32.436 s Mean Reward: 1.228. Std of Reward: 0.744. Training.
2020-06-19 07:34:48 INFO [stats.py:111] 3DBall: Step: 24000. Time Elapsed: 42.465 s Mean Reward: 1.394. Std of Reward: 0.836. Training.
2020-06-19 07:34:59 INFO [stats.py:111] 3DBall: Step: 36000. Time Elapsed: 52.881 s Mean Reward: 1.730. Std of Reward: 1.084. Training.
:
50000ステップ(学習コンフィグファイルの初期設定)に達すると学習完了です。十分学習できているようであれば、「Control+C」で中断しても良いです。「ml-agents/results/firstRun/3DBall.nn」に「推論モデル」が出力されています。
7. 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ボタンで学習と推論のどちらが実行されるかが決まります。
【おまけ】 Release 1 からの変更点
◎ 訓練設定ファイルのパスの変更
「訓練設定ファイル」は、環境ごとに1ファイルになった。(以前は全環境で1ファイル)
$ mlagents-learn ./config/trainer_config.yaml --run-id=firstRun
↓
$ mlagents-learn ./config/ppo/3DBall.yaml --run-id=firstRun
◎ モデルの出力先のパスの変更
ml-agents/models/firstRun/3DBall.nn
↓
ml-agents/results/firstRun/3DBall.nn
次回
この記事が気に入ったらサポートをしてみませんか?