Unity:ML-Agents 2019年09月(ver0.9.0 /0.9.1/0.9.2)での使い方
目次
はじめに
色々な ML-Agents の日本語記事を読ませていただいた所、情報が古く動作確認できないものが多かったため本記事にて最新版 2019年09月(ver0.9.0 /0.9.1/0.9.2) での使い方を説明させていただきます。

Unityを知らない方は、ぜひ こちらの記事 をご参照ください。
ML-Agents の関連記事
- Unity:ML-Agents 2019年09月(ver0.9.0 /0.9.1/0.9.2)での使い方
- Unity:ML-Agents 2019年04月(ver0.8.0/0.8.1)での使い方
- Unity:ML-Agents 2019年04月(ver0.7.0)での使い方
- Unity:ML-Agentsのサンプル集をすべて確認!
本手順
本手順は、公式ドキュメントを参考に書きます。
手順が古いと感じたら公式を見ることをお勧めしますので詰まったらぜひ参照してください。

インストール
Unityのインストール
Unity は 2017.4以降 のバージョンをご利用ください。
また、Dockerを使って学習を行う場合は「Linux Build Support」を有効にしてください。本手順ではAnacondaを使うため特に気にしません。
ML-Agents のソースコードを取得
ML-Agents のページにアクセスして、以下の手順で.zipファイル (80MB) を取得してください。

.zip ファイルを解凍してください。
それぞれのフォルダの意味としては以下になります。 (今回使うのは、UnitySDKと、ml-agentsの2つのみになります)
- UnitySDK:Unityで動かすためのソースコードが含まれています。
- ml-agents:Unityで学習に使用するためのPythonパッケージが含まれています。
- ml-agents-envs:Python API が含まれています。
- gym-unity:OpenAI gymのインターフェスが含まれています。

サンプルを動かす
サンプルを動かすだけならPython不要ですのでさっそく確認してみます。
Unityは 2017.4 以降でいけるとの事で今回は 2018.3 を使ってみます。

Assets > ML-Agents > Examples > 3DBall > Scenes > 3DBall でシーンを開いて実行してみてください。

実行してみましょう。
おめでとうございます!!
ML-Agents を使って 学習済み AI のサンプルが実行できました、このように学習済みのファイルを使うだけであれば特に難しい事はありません。

次以降ではこの学習済みAI を自分で学習するAIの手順になります。
学習済み AI の作成
概要
学習済みAIを作成するためには、Python言語を使い、TensorFlow(DeepLearningライブラリ)を用いて学習を行います。
公式にある以下の図を参照いただければわかりますが、左側のグレーの領域がUnity、右の赤色のPythonが外部プロセスになります。(PythonとUnityは別々に動作します)
そのため、最初の手順としてPythonのインストールを実施します。

Pythonインストール
Windows では Anaconda を使って Python を動かします。
ML-Agent では Pythonバージョン3.6 と Anacondaバージョン5.1 を使用しますので自信のある方は別バージョンを使ってもよいかと思います。
ダウンロード(64bit, 32bit)してインストールしてください。
AnacondaはPythonの複数のバージョン・環境を切り替えるための便利ツールです


インストールが完了したら、「Anaconda Navigator」を起動してください。

起動したら、右上の×ボタンで閉じてください。

Anaconda をインストールすると conda コマンドが使えるようになります。これが使えない場合、環境変数を編集して使えるようにパスを通してください。(公式参照)
ML-Agents が使う環境の作成
「Anaconda Prompt」を起動します、スタートメニューから「ana」を入力すれば検索できますので起動しましょう。


「conda create -n ml-agents python=3.6」を入力して、ML-Agents が使う Python環境を作成します。

インストールの処理をするかと聞かれた場合「y」を入力しましょう。

インストールが環境すると以下の画面になります。

ML-Agents が使うライブラリをインストール
「activate ml-agents」を入力して、環境を切り替えます。

コマンドラインの先頭文字が「ml-agents」に切り替わったのが確認できます。

次に、ML-Agents が独自に使うライブラリをインストールします。
「 cd <ml-agentsフォルダ> 」

「pip install mlagents」で mlagents をインストールします。
このパッケージをインストールすると、TensorFlow / Jupitorなどの依存関係が同時にインストールされます。

こんな感じの画面が出ればOKです。

「cd <ml-agentsフォルダ>\ml-agents-envs」に移動してください。

「pip install -e .」を入力して、インストールを開始しましょう。

こんな感じの画面がでればライブラリをインストールができました。

「cd <ml-agentsフォルダ>\ml-agents」に移動してください。


「pip install -e .」を入力して、インストールを開始しましょう。

こんな感じの画面がでればライブラリをインストールができました。

TensorFlowSharpプラグインについて
最新版(ver0.9.0)のバージョンではこのプラグインは不要です。
ML-Agents ver0.5.0 までは TensorFlowSharp を使って Pythonと通信していましたが、最新版では使わないようにしてください。もし使うと以下のようなエラーが発生したりします。
No model was present for the Brain 3DBallLearning.
UnityEngine.Debug:LogError(Object)
MLAgents.LearningBrain:DecideAction() (at Assets/ML-Agents/Scripts/LearningBrain.cs:191)
MLAgents.Brain:BrainDecideAction() (at Assets/ML-Agents/Scripts/Brain.cs:80)
MLAgents.Academy:EnvironmentStep() (at Assets/ML-Agents/Scripts/Academy.cs:601)
MLAgents.Academy:FixedUpdate() (at Assets/ML-Agents/Scripts/Academy.cs:627)
AI の学習を実行
「cd <ml-agentsフォルダ>」を入力して、フォルダを移動してください。

以下のコマンドを入力してください。
mlagents-learn config/trainer_config.yaml --run-id=firstRun --train

「トレーニングを開始する場合、Unity で Play ボタンを押してね!」と表示されればここの手順ではOKです。

ちなみに、Unity上で Playボタンを押さないでいると、タイムアウトエラーが発生しますので、エラーになったらもう一度同じコマンドを実行してください

次に、Unityの画面に戻って、「Ball3DAcademy」の「Control」をチェックしてください。

コマンドプロンプトで上の実行をしている間に、Unityのプレイボタンを押してみましょう。

正常に学習が開始されると以下のように、ボールが落ちたりバランスがとれたりします。

また、コンソールのログには、1000step毎にログが出力されます、合計50000step実行されると学習が終了します。

今回は学習途中でやめてみました、3000step で「ctrl+C」で中断してみます。
本来であれば最後まで学習を行いましょう。

学習が完了すると、以下のフォルダに、「~.nn」と言うファイルが作成されます。これ以降の手順ではこのファイルを使いますので覚えておいてください。

サンプルに上書きして確認
上記までの手順で作成した、~.nn を UnitySDK\Assets のフォルダにコピーしましょう、このファイルを使って3DBallのサンプルを実行してみます。

Unityの「Ball3DAcademy」を選択して、「Control」のチェックを外しましょう。このチェックを外すと学習モードー>実行モードに変わります。

次に、「Brains」フォルダの「3DBallLearning」を選択して、Modelのファイルを先ほど作成したファイルに変更します。

同じファイルがあるので分かりにくいですが、Assets/3DBallLearning.nn ファイルを選択してください。

それでは、これで実行してみましょう。
学習がまだ未熟なので、少しだけバランスが取れてからボールが落ちてしまいます、最後まで学習を行っていればボールが落ちないようになるのでぜひ、試してみてください。

参考記事
- MacでUnity ML-Agentsの環境を構築する(v0.6.0対応)
- UnityのML-Agentsで、新しい学習環境を作成する(0.6.0a版)
- 【Unity】Unityで機械学習する「ML-Agent」を色々と試して得た知見とか
よければ、SNSにシェアをお願いします!