メインコンテンツへスキップ
見出し画像

Unity ML-Agents 0.15.0 のチュートリアル (1)

    1. Unity ML-Agents

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

    ・Unity ML-Agents

    2. Unityのインストール

    「Unity ML-Agents」を利用するには、「Unity 2018.4」以降が必要になります。今回は「2018.4.19f1」を使っています。以下のサイトからダウンロード後、インストールしてください。

    ・Unityのダウンロード

    3. Unity ML-Agentsのインストール

    ◎ Unity ML-Agentsのリポジトリのクローン
    以下のコマンドで、リポジトリをクローンします。

    $ git clone https://github.com/Unity-Technologies/ml-agents.git -b 0.15.0

    ml-agentsフォルダが生成されます。

    ◎ ml-agentsのフォルダ構成
    ml-agentsフォルダのフォルダ構成は、次のとおりです。

    ・com.unity.ml-agents : 強化学習の環境を作成するためのUnityプラグイン
    ・Projectフォルダ : サンプルプロジェクト
    ・notebooksフォルダ : サンプルノートブック
    ・ml-agentsフォルダ : 強化学習の学習を行うPythonパッケージ
    ・ml-agents-envsフォルダ : Unity環境とml-agentsパッケージ間のインタフェースとなるPythonパッケージ
    ・configフォルダ: 訓練設定ファイル
    ・gym-unityフォルダ: OpenAI Gymと連携するためのパッケージ
    ・docsフォルダ: ドキュメント

    ◎ Pythonの仮想環境の作成
    「Unity ML-Agents」では「Python 3.6.1」以降が必要です。今回は「Anaconda」で「Python 3.6.7」の仮想環境を作成します。

    $ conda create -n mlagents python=3.6.7 anaconda
    $ conda activate mlagents

    Pythonパッケージ「ml-agents」「ml-agents-env」をインストールするには、mlagentsのルートで以下のコマンドを入力します。

    cd ml-agents-envs
    pip install -e ./
    cd ..
    cd ml-agents
    pip install -e ./
    cd ..

    4. Unity ML-Agentsのプロジェクトの準備

    「Unity ML-Agents」のプロジェクトの準備の手順は、次のとおりです。

    (1) Unityを起動し、Unityのプロジェクトを「3D」で新規作成。
    (2) メニュー「Window → Package Manager」を開き、「+ → Add package from disk」を選択し、「com.unity.ml-agents/package.json」を選択。

    画像1

    ◎ Unityアセット内のフォルダ構成 
    Uniryアセット(Packages/ML Agents)内のフォルダ構成は、次のとおりです。

    ・Editorフォルダ : エディタ関連のスクリプト
    ・Pluginsフォルダ : Unity ML-Agentsの各種プラグイン
    ・Runtimeフォルダ : Unity ML-Agentsの各種スクリプト
    ・Testフォルダ : Unity ML-Agentsのテスト用のスクリプト

    5. サンプルの学習環境の準備

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

    サンプルの学習環境の準備の手順は、次のとおりです。

    (1) 「m-lagents/Project/Assets」にある「ML-Agents」を作成したプロジェクトのAssets下にコピー。
    (2) Projectウィンドウで「Assets/ML-Agents/Examples/3DBall/Scene」にあるシーン「3DBall」を開く。

    画像2

    6. Pythonスクリプトによる学習

    「Pythonスクリプト」を使って「サンプルの学習環境」を学習を行います。学習が完了すると「推論モデル」が生成されます。

    (1) Pythonの仮想環境で、「ml-agents」のルートに移動し、以下のコマンドを実行。

    $ mlagents-learn ./config/trainer_config.yaml --run-id=firstRun --train

    「ml-agents/config/trainer_config.yaml」は学習用のハイパーパラメータをまとめ訓練設定ファイルです。「firstRun」は訓練結果を識別するために使用する任意の文字列です。出力するモデルや統計情報のフォルダ名に使われます。「--train」は推論でなく学習であることを示します。

    以下のようなログが表示されます。

    
    
                            ▄▄▄▓▓▓▓
                      ╓▓▓▓▓▓▓█▓▓▓▓▓
                 ,▄▄▄m▀▀▀'  ,▓▓▓▀▓▓▄                           ▓▓▓  ▓▓▌
               ▄▓▓▓▀'      ▄▓▓▀  ▓▓▓      ▄▄     ▄▄ ,▄▄ ▄▄▄▄   ,▄▄ ▄▓▓▌▄ ▄▄▄    ,▄▄
             ▄▓▓▓▀        ▄▓▓▀   ▐▓▓▌     ▓▓▌   ▐▓▓ ▐▓▓▓▀▀▀▓▓▌ ▓▓▓ ▀▓▓▌▀ ^▓▓▌  ╒▓▓▌
           ▄▓▓▓▓▓▄▄▄▄▄▄▄▄▓▓▓      ▓▀      ▓▓▌   ▐▓▓ ▐▓▓    ▓▓▓ ▓▓▓  ▓▓▌   ▐▓▓▄ ▓▓▌
           ▀▓▓▓▓▀▀▀▀▀▀▀▀▀▀▓▓▄     ▓▓      ▓▓▌   ▐▓▓ ▐▓▓    ▓▓▓ ▓▓▓  ▓▓▌    ▐▓▓▐▓▓
             ^█▓▓▓        ▀▓▓▄   ▐▓▓▌     ▓▓▓▓▄▓▓▓▓ ▐▓▓    ▓▓▓ ▓▓▓  ▓▓▓▄    ▓▓▓▓`
               '▀▓▓▓▄      ^▓▓▓  ▓▓▓       └▀▀▀▀ ▀▀ ^▀▀    `▀▀ `▀▀   '▀▀    ▐▓▓▌
                  ▀▀▀▀▓▄▄▄   ▓▓▓▓▓▓,                                      ▓▓▓▓▀
                      `▀█▓▓▓▓▓▓▓▓▓▌
                           ¬`▀▀▀█▓
    
           
    Version information:
     ml-agents: 0.15.0,
     ml-agents-envs: 0.15.0,
     Communicator API: 0.15.0,
     TensorFlow: 2.0.1
    2020-03-19 21:54:13 INFO [environment.py:131] 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ボタンを押して訓練を開始してください)と表示されたら準備完了です。

    (2) UnityのPlayボタン(▶)を押して学習開始。
    最初のうちはボールを落としますが、徐々に上達する様子が見れます。

    画像3

    ログには「Mean Reward」(平均報酬)と「Std of Reward」(標準偏差)が出力されます。

    2020-03-19 21:54:47 INFO [trainer.py:213] firstRun: 3DBall: Step: 12000. Time Elapsed: 12.350 s Mean Reward: 1.153. Std of Reward: 0.725. Training.
    2020-03-19 21:54:59 INFO [trainer.py:213] firstRun: 3DBall: Step: 24000. Time Elapsed: 24.533 s Mean Reward: 1.384. Std of Reward: 0.832. Training.
    2020-03-19 21:55:11 INFO [trainer.py:213] firstRun: 3DBall: Step: 36000. Time Elapsed: 36.597 s Mean Reward: 1.891. Std of Reward: 1.195. Training.
    2020-03-19 21:55:23 INFO [trainer.py:213] firstRun: 3DBall: Step: 48000. Time Elapsed: 48.361 s Mean Reward: 3.237. Std of Reward: 2.101. Training.
        :

    50000ステップ(学習コンフィグファイルの初期設定)に達すると学習完了です。十分学習できているようであれば、「Control+C」で中断しても良いです。「ml-agents/models/firstRun/3DBall.nn」に「推論モデル」が出力されています。

    7. Unityでの推論モデルの実行

    「推論モデル」の利用手順は次の通りです。

    (1) 推論モデル「3DBall.nn」をプロジェクトの「Assets」にコピー。
    (2) Projectウィンドウで「Assets/ML-Agents/Examples/3DBall/Prefabs」にある「3DBall」を選択し、Inspectorで「Open Prefab」をクリック。

    画像7

    (3)プレハブ「3DBall」内の「Agent」を選択し、Inspectorで設定を確認。

    画像6

    画像7

    「Agent」(今回はBall 3D Agent)は強化学習のエージェント情報を管理するコンポーネントです。シーン「3DBall」内には12個のプレハブ「3DBall」のインスタンスが存在します。12個すべてのインスタンスの「Agent」に対して設定更新する代わりに、プレハブ「3DBall」でまとめて更新できます。

    (4)「Agent」の「Behavior Parameters」の「Model」に、「3DBall.nn」をドラッグ&ドロップ。
    (5) UnityのPlayボタン(▶ボタン)を押して推論開始。

    推論が実行され、ボールがバランスをとる様子を見ることができます。
    「学習を行うPythonスクリプト」が実行されているかどうかに応じて、UnityのPlayボタンで学習と推論のどちらが実行されるかが決まります。

    画像7


     
     

    npaka

     
     
    プログラマー。iPhone / Android / Unity / ROS / AI / AR / VR / RasPi / ロボット / ガジェット。年2冊ペースで技術書を執筆。アニソン / カラオケ / ギター / 猫 twitter : @npaka123

    あなたへのおすすめ