Unity ML-Agents 0.10.0 のチュートリアル
Unity ML-Agents」は、Unity で「強化学習」の「環境」を構築し、「エージェント」の学習および推論を行うためのフレームワークです。
最新版「0.10.0」がリリースされたので、サンプルの学習環境「3DBall」を使って、学習および推論の手順を解説します。
1. 開発環境の準備
◎Unityの開発環境のインストール
「Unity ML-Agents」を利用するには、「Unity 2017.4」以降が必要になります。以下のサイトからダウンロード後、インストールしてください。
◎Unity ML-Agentsのリポジトリのダウンロード
「Unity ML-Agents」のリポジトリには、
・強化学習の「環境」を作成するためのUnityアセット
・学習用のPythonスクリプト
が含まれています。
以下のサイトの「Clone or Download」ボタンでダウンロード後、任意の場所に解凍してください。「ml-agents-master」フォルダが生成されます。
・Unity-Technologies/ml-agents:Unity Machine Learning Agents
フォルダ構成は、次の通りです。
・UnitySDK:強化学習の「環境」を作成するためのアセットが含まれるUnityプロジェクト。
・UnitySDK/Assets:強化学習の「環境」を作成するためのアセット。
・ml-agents:強化学習の学習を行うPythonパッケージ。
・ml-agents-envs:Unity環境とml-agentsパッケージ間のインタフェースとなるPythonパッケージ。
・config:学習のパラメータを定義したファイル。
・gym-unity:OpenAI Gymと連携するためのパッケージ。
・docs:ドキュメント。
◎Pythonの仮想環境の作成
Anacondaで「Python 3.6.1」以降の仮想環境を作成し、以下のコマンドで「mlagentsパッケージ」をインストールします。
$ pip install mlagents
「mlagentsパッケージ」をインストールすると、以下のような依存関係もインストールされます。
・TensorFlow:深層学習ライブラリ
・Jupyter Notebook:プログラムの実行結果を記録しながらデータ分析を行うためのツール
・Matplotlib:グラフ描画ライブラリ
・NumPy:数値計算ライブラリ
・Pillow(PIL):画像処理ライブラリ
・docopt:コマンドラインオプションパースライブラリ
2. Unity ML-Agentsのプロジェクトの作成
「Unity ML-Agents」を使うプロジェクトの作成方法は、以下の通りです。
(1)Unityを起動し、Unityのプロジェクトを「3D」で新規作成。
(2)強化学習の「環境」を作成するためのアセット(UnitySDK/Assets/ML-AgentsとUnitySDK/Assets/Gizmos)をプロジェクトの「Assets」フォルダにコピー。
ML-Agents内のフォルダ構成は、次の通りです。
・Editorフォルダ:エディタ関連のスクリプト
・Examplesフォルダ:サンプルの学習環境のフォルダ
・Pluginsフォルダ:Unity ML-Agentsの各種プラグイン
・Resourcesフォルダ:Unity ML-Agentsの各種リソース
・Scriptsフォルダ:Unity ML-Agentsの各種スクリプト
サイズが大きいので、サンプルの学習環境を利用しない場合は「ML-Agents/Examples」は削除しても良いですが、今回は利用します。
(3)メニュー「File→Build Settings...」を選択。
(4)「Target Platform」に、Macの場合は「Mac and Linux Standalone」、Windowsの場合は「PC」を選択。
(5)「Player Settings...」ボタンを押す。
(6)「Other Settings」の「Scripting Runtime Version」と「Api Compatibility Level」で「.Net 4.x」を選択。
(7)メニュー「File→Save Project」を選択し、設定を保存。
3. サンプルの学習環境の作成
「Unity ML-Agents」が提供しているサンプルの学習環境の1 つである「3DBall」を作成します。板の傾きでバランスを取り、ボールを落下させないようにキープする学習環境です。
作成手順は、次の通りです。
(1)Projectウィンドウで「Assets/ML-Agents/Examples/3DBall/Scene」を選択し、シーンを開く。
(2)HierarchyウィンドウでAcademy「Ball3DAcademy」を選択し、InspectorでBrainsにBrain「Assets/ML-Agents/Examples/3DBall/Brains/3DBallLearning」をドラッグ&ドロップし、Controlをチェック。
Academyに学習・推論対象のBrainを登録し、Controlをチェックすると「学習モード」になります。(チェックをはずした時は「推論モード」です。)
3DBallに用意されているBrainは、次の通りです。(Hard除く)
・3DBallLearning:Actionの決定は、ニューラルネットワーク(学習および推論)を使用
・3DBallHeuristic:Actionの決定は、プレイヤー(人間)の入力を使用
・3DBallPlayer:Actionの決定は、ルールベース(手書きのプログラム)を使用
(3)Projectウィンドウの「Assets/ML-Agents/Examples/3DBall/Prefabs/3DBall」内の「Agent」を選択し、InspectorでBrainにBrain「Assets/ML-Agents/Examples/3DBall/Brains/3DBallLearning」をドラッグ&ドロップ。
Agentで利用するBrainを設定します。
3DBall環境のボールと板の1セットをGameプレハブで作り、12個並べています。このPrefabの設定を変更することで、12個のエージェントの設定が変わります。
5. Pythonスクリプトによる学習
「サンプルの学習環境」を「学習用のPythonスクリプト」から実行して「学習」を行います。「学習」が完了すると「推論モデル」が生成されます。
(1)Pythonの仮想環境で、「ml-agents-master」のルートに移動し、「mlagents-learn」コマンドで「学習」を開始。
「mlagents-learn」の書式は次の通りです。
$ mlagents-learn <学習コンフィグファイルのパス> --run-id=<実行ID> --train
「学習コンフィグファイル」は学習パラメータをまとめたyamlファイルで、「ml-agents-master/config/trainer_config.yaml」にあります。「実行ID」は学習の実行結果を管理するためのIDで任意の文字列を指定します。
今回は、次のようにコマンドを入力します。
$ 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)
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」と表示されたら準備完了です。
(3)UnityのPlayボタン(▶)を押して学習開始。
最初のうちはボールを落としますが、徐々に上達する様子が見れます。
ログにはMean Reward(平均報酬)とStd of Reward(標準偏差)が出力されます。
INFO:mlagents.trainers: firstRun-0: 3DBallLearning: Step: 1000. Time Elapsed: 8.842 s Mean Reward: 1.188. Std of Reward: 0.722. Training.
INFO:mlagents.trainers: firstRun-0: 3DBallLearning: Step: 2000. Time Elapsed: 18.164 s Mean Reward: 1.222. Std of Reward: 0.688. Training.
INFO:mlagents.trainers: firstRun-0: 3DBallLearning: Step: 3000. Time Elapsed: 27.447 s Mean Reward: 1.514. Std of Reward: 0.997. Training.
:
50000ステップ(学習コンフィグファイルの初期設定)に達すると学習完了です。「ml-agents-master/models/firstRun-0/3DBallLearning.nn」に「推論モデル」が出力されています。
6. Unityでの推論モデルの実行
「推論モデル」の利用手順は次の通りです。
(1)推論モデル「3DBallLearning.nn」をプロジェクトの「Assets」にコピー。
(2)Projectウィンドウで「Assets/ML-Agents/Examples/3DBall/Brains/3DBallLearning」を選択し、「Learning Brain」の「Model」に「3DBallLearning.nn」をドラッグ&ドロップ。
Brainで利用する推論モデルを指定しています。
(3)Hierarchyウィンドウで「Ball3DAcademy」を選択し、BrainsのControlのチェックを外す。
Controlのチェックをはずすと「推論モード」になります。
(4)UnityのPlayボタン(▶ボタン)を押して推論開始。
「推論モード」で実行され、ボールがバランスをとる様子を見ることができます。
この記事が気に入ったらサポートをしてみませんか?