Help us understand the problem. What is going on with this article?

MacでUnity ML-Agentsの環境を構築する(v0.9.1対応)

More than 1 year has passed since last update.

Unityで機械学習を利用するML-Agentsというライブラリがありますが、2019/08/02にv0.9.0(beta)がリリースされていたので試してみました。

Release ML-Agents Beta 0.9.0 · Unity-Technologies/ml-agents
https://github.com/Unity-Technologies/ml-agents/releases/tag/0.9.0

確認しているうちにv0.9.1(beta)がリリースされました(汗

Release ML-Agents Beta 0.9.1 · Unity-Technologies/ml-agents
https://github.com/Unity-Technologies/ml-agents/releases/tag/0.9.1

Unity ML-Agentsについては下記が参考になります。

【Unity】Unityで機械学習する「ML-Agent」を色々と試して得た知見とか
http://tsubakit1.hateblo.jp/entry/2018/02/18/233000

Unityをまだインストールしていないという方は下記をご参考ください。

Macでhomebrewを使ってUnityをインストールする(Unity Hub、日本語化対応)
https://qiita.com/kai_kou/items/445e614fb71f2204e033

手順

基本的には公式にある下記ドキュメントに沿えばよい感じです。

ml-agents/Installation.md at master · Unity-Technologies/ml-agents
https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Installation.md

ml-agents/Basic-Guide.md at master · Unity-Technologies/ml-agents
https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Basic-Guide.md#setting-up-ml-agents-within-unity

Pythonをインストールする

現在、Python 3.6での動作がサポートされています。3.5、3.7はサポートされていないのでご注意ください。(2019/08/09現在)

ml-agents/Installation.md at master · Unity-Technologies/ml-agents
https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Installation.md

In order to use ML-Agents toolkit, you need Python 3.6.
Download and install Python 3.6 if you do not already have it.

We do not currently support Python 3.7 or Python 3.5.

お手元にPythonの環境がない方は下記をご参照ください。

MacでanyenvをつかってPython環境構築(bash、fish対応) - Qiita
https://qiita.com/kai_kou/items/f54931991a781b96bb9c

ML-Agentsリポジトリをダウンロード

適当なディレクトリにリポジトリをダウンロードします。

> mkdir 適当なディレクトリ
> cd 適当なディレクトリ
> git clone https://github.com/Unity-Technologies/ml-agents.git

必要なライブラリをインストールする

ML-Agentsのパッケージをpipを利用してPyPIからインストールします。
ここではPythonの仮想環境を作ってインストールします。

仮想環境?なにそれ?な方は下記をご参照(再掲
https://qiita.com/kai_kou/items/f54931991a781b96bb9c

> pyenv local 3.6.6
> python --version

Python 3.6.6


> python -m venv venv
> . venv/bin/activate

# fishな方はこちら
> . venv/bin/activate.fish

> pip install mlagents

はい。

v0.8.0からはPyPIからインストールするようになったみたいです。

mlagents · PyPI
https://pypi.org/project/mlagents/

Release ML-Agents Beta 0.8.0 · Unity-Technologies/ml-agents
https://github.com/Unity-Technologies/ml-agents/releases/tag/0.8.0

Splitting ML-Agents package into mlagents.trainers and mlagents.envs.

Unityアプリからサンプルプロジェクトを開く

Unity Hubでアプリを立ち上げます。Unity Hubがインストールされていない場合は下記をご参考ください。

Macでhomebrewを使ってUnityをインストールする(Unity Hub、日本語化対応)
https://qiita.com/kai_kou/items/445e614fb71f2204e033

ML-Agentsを利用するにはUnityのバージョン2017.4 以上が必要となります。今回は2019.1.13f1 を利用しました。

アプリが立ち上がったら「開く」ボタンから任意のディレクトリ/ml-agents/UnitySDK フォルダを選択します。

Unity_Hub.png

Unityエディタのバージョンによっては、アップグレードするかの確認ダイアログが立ち上がります。
スクリーンショット 2019-08-09 16.37.46.png

「Upgrade」ボタンをクリックして進めます。

アップグレード処理に少し時間がかかります。

スクリーンショット 2018-09-13 10.50.01.png

Scenes(シーン)が開くか確認する

サンプルが動作するか、Unityでプロジェクトを読み込み、動作させてみます。

  • Unityアプリの下パネルにある[Project]タブから以下のフォルダまで開く
    • [Assets] > [ML-Agents] > [Examples] > [3DBall] > [Scenes]
  • 開いたら、[3DBall]ファイルがあるので、ダブルクリックして開く

Scenes選択

なんかでてきたー(感動
3DBall Scenes

Unityの上にある再生ボタンをクリックします。

なんかうごいたー(感動
3DBall Scenes Play

読み込んだサンプルが動作することを確認できました。
現時点ではボールが板からすぐに落ちてしまいます。これを機械学習で、落とさないようにさせるわけです。

Scenes(シーン)の設定

ML-Agentsで学習させるための設定です。

  • Unityアプリの[Edit]メニューから[Project Settings]を開く
    スクリーンショット 2019-08-19 14.23.05.png

  • [Inspector]パネルで以下の設定を確認する

    • [Resolution and Presentation]の[Run In Background]がチェックされている
    • [Display Resolution Dialog]がDisableになっている スクリーンショット_2019_08_19_14_25のコピー.png

Prefabs(プレハブ)の設定

  • Unityアプリの下にある[Project]タブから以下のフォルダまで開く
    • [Assets] > [ML-Agents] > [Examples] > [3DBall] > [Prefabs]
  • Prefabsフォルダ内の[Game]をダブルクリックする
  • Unityアプリの左側にある[Hierarchy]パネルから[Game] > [Pratform]を選択する Unity
  • Unityアプリの右側にある[Inspector]パネルのBall 3D Agent(Script)にあるBrainが[3DBallLearning(LearningBrain)]であることを確認する
  • [3DBallLearning(LearningBrain)]ではない場合、
    • [Project]タブから以下のフォルダまで開き、
      • [Assets] > [ML-Agents] > [Examples] > [3DBall] > [Brains]
    • [3DBallLearning]を[Inspector]パネルのBrainにドラッグ&ドロップして指定する Unity
  • [Ctrl] + [s]キーでシーンを保存する
    • ※設定変更後、しっかりと保存しないと、ビルド時に設定が反映されなくてハマります。

Brainsの設定

  • Unityアプリの下パネルにある[Project]タブから以下のフォルダまで開く
    • [Assets] > [ML-Agents] > [Examples] > [3DBall] > [Scenes]
  • Unityアプリの左側にある[Hierarchy]パネルから[Ball3DAcademy]を選択する
  • Unityアプリの右側にある[Inspector]パネルの[Broadcast Hub] > [Brains]に「3DBallLearning (LearningBrain)」が指定されていることを確認する
  • 「3DBallLearning (LearningBrain)」横にある[Control]にチェックを入れる Unity

学習させる

学習に必要な設定ができましたので、Unityアプリ上で学習させてみます。

コマンドの実行

コンソールに戻り、学習開始のコマンドを実行します。--run-id=firstRunfirstRun は任意に決めてもらってOKです。

> cd 適当なディレクトリ/ml-agents/ml-agents
> mlagents-learn ../config/trainer_config.yaml --run-id=firstRun --train

(略)
 '<trainer-config-path>': '../config/trainer_config.yaml'}
INFO:mlagents.envs:Start training by pressing the Play button in the Unity Editor.

INFO:mlagents.envs:Start training by pressing the Play button in the Unity Editor. と出力されたら、Unityアプリの上部にある[▶]ボタンをクリックします。初期設定だと50,000ステップ実行するので少々時間がかかります。

スクリーンショット 2018-12-20 18.41.42.png

INFO:mlagents.envs:
'Ball3DAcademy' started successfully!
Unity Academy name: Ball3DAcademy
(略)
Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
INFO:mlagents.envs:Hyperparameters for the PPOTrainer of brain 3DBallLearning:
        trainer:        ppo
(略)
INFO:mlagents.trainers: firstRun-0: 3DBallLearning: Step: 1000. Time Elapsed: 43.596 s Mean Reward: 1.150. Std of Reward: 0.680. Training.
(略)
INFO:mlagents.trainers: firstRun-0: 3DBallLearning: Step: 49000. Time Elapsed: 921.048 s Mean Reward: 100.000. Std of Reward: 0.000. Training.
INFO:mlagents.envs:Saved Model
INFO:mlagents.trainers: firstRun-0: 3DBallLearning: Step: 50000. Time Elapsed: 939.028 s Mean Reward: 100.000. Std of Reward: 0.000. Training.
(略)
INFO:tensorflow:Restoring parameters from ./models/firstRun-0/3DBallLearning/model-50001.cptk
INFO:tensorflow:Froze 14 variables.
Converted 14 variables to const ops.
Converting ./models/firstRun-0/3DBallLearning/frozen_graph_def.pb to ./models/firstRun-0/3DBallLearning.nn
IGNORED: Cast unknown layer
IGNORED: StopGradient unknown layer
GLOBALS: 'is_continuous_control', 'version_number', 'memory_size', 'action_output_shape'
IN: 'vector_observation': [-1, 1, 1, 8] => 'sub_3'
IN: 'epsilon': [-1, 1, 1, 2] => 'mul_1'
OUT: 'action', 'action_probs'
DONE: wrote ./models/firstRun-0/3DBallLearning.nn file.
INFO:mlagents.trainers:Exported ./models/firstRun-0/3DBallLearning.nn file

学習結果をアプリに組み込む

学習が完了すると学習結果が*.nn ファイルに保存されます。
それをUnityアプリに組み込むことで学習結果をUnityアプリに反映できます。

Unityアプリの設定

Playerの設定を行います。

  • Unityアプリの[Edit]メニューから[Project Settings]を選択する
  • [Inspector]ビューの[Other Settings]欄で以下を確認・設定する
    • [Scripting Runtime Version]を[.Net 4.x Equivalent]にする Unity

学習結果ファイルの取り込み

ターミナルかFinderで学習結果を以下フォルダにコピーします。

  • 学習結果ファイル: models/firstRun-0/3DBallLearnig.nn
  • 保存先: UnitySDK/Assets/ML-Agents/Examples/3DBall/TFModels/

※すでに保存先に3DBallLearnig.nn ファイルが存在していますので、リネームしておきます。

> cp models/firstRun-0/3DBallLearnig.nn ../UnitySDK/Assets/ML-Agents/Examples/3DBall/TFModels
  • Unityアプリの[Project]パネルで以下ファイルを選択する
    • [Assets] > [ML-Agents] > [Examples] > [3DBall] > [Brains] > [3DBallLearning]
  • Unityアプリの[Project]パネルで以下フォルダを選択する
    • [Assets] > [ML-Agents] > [Examples] > [3DBall] > [TFModels]
  • Unityアプリの[Inspector]パネルにある[Model]という項目に[TFModels]フォルダ内の3DBallLearning.nnファイルをドラッグ&ドロップする Unity
  • Unityアプリの[Hierarchy]パネルから以下を選択する
    • [3DBall] > [Ball3DAcademy]
  • Unityアプリの[Inspector]パネルにある[Broadcast Hub] > [Brains] > [3DBallLearning(LearningBrain)]横の[Control]のチェックを外す Unity
  • Unity上部にある[▶]ボタンをクリックする

これで、学習結果が組み込まれた状態でアプリが起動します。
50,000ステップ学習すると動きが穏やかでもはやプロです。なんのプロかはわかりませんが^^

スクリーンショット 2018-09-13 12.05.04.png

サンプルは他にもあるので、いろいろとお試しあれ。
ML-Agentsはv0.5.0くらいから触っていますがだいぶと利用方法がかんたんになってきました^^

参考

MacでUnity ML-Agentsの環境を構築する(v0.6.0対応) - Qiita
https://qiita.com/kai_kou/items/2a6545d1f9d83178d0c0

Release ML-Agents Beta 0.9.0 · Unity-Technologies/ml-agents
https://github.com/Unity-Technologies/ml-agents/releases/tag/0.9.0

Release ML-Agents Beta 0.9.1 · Unity-Technologies/ml-agents
https://github.com/Unity-Technologies/ml-agents/releases/tag/0.9.1

【Unity】Unityで機械学習する「ML-Agent」を色々と試して得た知見とか
http://tsubakit1.hateblo.jp/entry/2018/02/18/233000

ml-agents/Installation.md at master · Unity-Technologies/ml-agents
https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Installation.md

ml-agents/Basic-Guide.md at master · Unity-Technologies/ml-agents
https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Basic-Guide.md#setting-up-ml-agents-within-unity

Using an Environment Executable
https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Learning-Environment-Executable.md

Unityの公式サンプルml-agentsでAIを試す
http://am1tanaka.hatenablog.com/entry/2017/11/08/230525

Macでanyenvをつかってpython環境構築(bash、fish対応) - Qiita
https://qiita.com/kai_kou/items/f54931991a781b96bb9c

Macでhomebrewを使ってUnityをインストールする(Unity Hub、日本語化対応)
https://qiita.com/kai_kou/items/445e614fb71f2204e033

kai_kou
2004年からWeb系のシステムエンジニアとして開発、運用、マネジメントを経験。現在はアイレット(クラウドパック)に所属。 べ、別にいいね貰えたからってモチベーションが上がって記事とコードの品質があがるわけじゃないんだからね///
https://twitter.com/k_aik_ou
cloudpack
Amazon Web Services (AWS) の導入設計、環境構築、運用・保守をサポートするマネジドホスティングサービス
https://cloudpack.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away