見出し画像

Unity ML-Agents 0.10.0 のチュートリアル

Unity ML-Agents」は、Unity で「強化学習」の「環境」を構築し、「エージェント」の学習および推論を行うためのフレームワークです。
最新版「0.10.0」がリリースされたので、サンプルの学習環境「3DBall」を使って、学習および推論の手順を解説します。

1. 開発環境の準備

◎Unityの開発環境のインストール
「Unity ML-Agents」を利用するには、「Unity 2017.4」以降が必要になります。以下のサイトからダウンロード後、インストールしてください。

Unityのダウンロード

◎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」を選択。

画像1

(7)メニュー「File→Save Project」を選択し、設定を保存。

3. サンプルの学習環境の作成

「Unity ML-Agents」が提供しているサンプルの学習環境の1 つである「3DBall」を作成します。板の傾きでバランスを取り、ボールを落下させないようにキープする学習環境です。
作成手順は、次の通りです。

(1)Projectウィンドウで「Assets/ML-Agents/Examples/3DBall/Scene」を選択し、シーンを開く。

画像2

(2)HierarchyウィンドウでAcademy「Ball3DAcademy」を選択し、InspectorでBrainsにBrain「Assets/ML-Agents/Examples/3DBall/Brains/3DBallLearning」をドラッグ&ドロップし、Controlをチェック。
Academyに学習・推論対象のBrainを登録し、Controlをチェックすると「学習モード」になります。(チェックをはずした時は「推論モード」です。)

画像6

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個のエージェントの設定が変わります。

画像4

画像5

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ボタン(▶)を押して学習開始。
最初のうちはボールを落としますが、徐々に上達する様子が見れます。

画像3

ログには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のチェックをはずすと「推論モード」になります。

画像7

(4)UnityのPlayボタン(▶ボタン)を押して推論開始。
「推論モード」で実行され、ボールがバランスをとる様子を見ることができます。

画像8


この記事が気に入ったらサポートをしてみませんか?