Unity ML-Agents 環境構築とサンプルの動作確認 (Mac)

#はじめに
ML-Agentsのドキュメントの流れを日本語として残しました。
公式サイト　https://github.com/Unity-Technologies/ml-agents
ドキュメント　https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Readme.md

#まとめ動画

https://youtu.be/ugcfWpy_jZQ

#インストール
##Unity
・Unity 2017.4 or Later：https://store.unity.com/download （Unity持ってない人のみ）
・ML-Agents Toolkit：`git clone https://github.com/Unity-Technologies/ml-agents.git` （ターミナルで実行すればml-agentsフォルダが出来上がる）

##PythonとML-Agentsパッケージのインストール
###Windows Users
後日記入：https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Installation-Windows.md

###Mac and Unix Users

・Python3.6：https://www.python.org/downloads/
・pip3：https://packaging.python.org/guides/installing-using-linux-tools/#installing-pip-setuptools-wheel-with-linux-package-managers （pip3を持ってない人のみ）
ターミナルで ml-agents>ml-agentsディレクトリまで移動し、以下を実行

```
pip3 install .
```

うまくインストールできていれば、上層のml-agentsディレクトリで

```
mlagents-learn --help
```
を入力すれば以下が表示される（表示されないならコメントください）。
<img width="765" alt="スクリーンショット 2018-10-16 22.25.07.png" src="https://qiita-image-store.s3.amazonaws.com/0/67439/a84d2fe2-d9b2-20fa-7942-107cadf86f10.png">

#UnityにML-Agentsを導入する
-  Unityを起動
-  先ほどのml-agentsフォルダのUnitySDKプロジェクトを開く
-  Edit>Project Setting > Playerで以下を設定  (.Net4.x とENABLE_TENSORFLOW)<br>
<img width="367" alt="スクリーンショット 2018-10-16 22.31.40.png" src="https://qiita-image-store.s3.amazonaws.com/0/67439/c60a1148-b36f-846e-ae28-97ead128e134.png">
- File>Save Project

TensorFlowSharp pluginをダウンロードしてUnityにインポートする
https://s3.amazonaws.com/unity-ml-agents/0.5/TFSharpPlugin.unitypackage
インポートはここからダウンロードしたプラグインを選べばできる
<img width="666" alt="スクリーンショット 2018-10-17 13.10.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/67439/cc52fbc6-4b85-670e-8170-1f1a7468b0dc.png">


#サンプル
ここではサンプルである、3DBallを動かす。
Unityエディタで`Assets/ML-Agents/Examples/3DBall`内にある3DBallのsceneを開く.
<img width="334" alt="スクリーンショット 2018-10-17 13.09.30.png" src="https://qiita-image-store.s3.amazonaws.com/0/67439/c3204eb9-ed48-47c8-62fa-0a3565bb39a2.png">


##3DBallの学習済モデルを動かす
-  以下のように、Ball3DAcademy>Ball3DBrainのBrain Typeを`Internal`に設定する。
<img width="1459" alt="スクリーンショット 2018-10-17 13.11.40.png" src="https://qiita-image-store.s3.amazonaws.com/0/67439/136b9e93-819c-fdf9-d051-b742ed2c79a8.png">

-  学習済モデルである`Assets/ML-Agents/Examples/3DBall/TFModels`内の`3DBall`を `Graph Model` に設定する

<img width="1463" alt="スクリーンショット 2018-10-17 13.14.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/67439/5f0a09c2-cff6-d286-9e3d-dff2fc171f72.png">

-  Unityエディタで再生ボタンを押せば学習済モデルの動作確認をすることができる

まとめ：学習済モデルを確認する場合は、Brainを`Internal`にし、`Graph Mpdel`にデータを設定して再生する

##学習モデルを作成する（学習させる）
###Unityエディタの準備
学習は外部で行われるので、Unityがバックグラウンドで動作でき、不必要な表示がでないように設定する。そのために以下のように
PlayerSettingsを設定する
-  `Run in Background`にチェック
-  Display Resolution Dialogを`Disabled`
<img width="1457" alt="スクリーンショット 2018-10-17 13.29.01.png" src="https://qiita-image-store.s3.amazonaws.com/0/67439/ec20ff10-6bb7-efe2-9282-806352ab8ad9.png">


###学習
-  先ほどBrainを`Internal`としたが、学習させる場合は`External`とする。
-  ターミナルを開いて、ml-agentsディレクトリ（mlagents-learn --helpが正常に表示される場所）で以下のコマンドを実行する

```
mlagents-learn config/trainer_config.yaml --run-id=firstRun --train
```
うまくいけば以下の画像が表示されるので、Unityエディタに戻り、再生ボタンをおす。
<img width="616" alt="スクリーンショット 2018-10-17 13.24.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/67439/c42499cc-c2f8-db13-b0d2-ce6d2426bf69.png">
学習が終了すれば、`Ctrl+C`を押して実行を終了する。

-  `UnitySDK/Assets/ML-Agents/Examples/3DBall/TFModels/`フォルダに`******.bytes`ファイルができているので、Unityエディタの`Assets/ML-Agents/Examples/3DBall/TFModels`にドラッグする
-  後は上で行ったようにBrainを`Internal`にし、`Graph Mpdel`に生成されたデータを設定して再生すれば確認できる


#次への課題
次は、自作アプリに応用する場合の記事を書く