LoginSignup
2
4

More than 5 years have passed since last update.

Unity ml-agents v0.6.0 動かしてみた

Last updated at Posted at 2018-12-23

事前準備編は下記から
Unity ml-agents v0.6.0 setup for windows - Qiita

環境
- Windows 10
- Unity 2018.2.14f1

基本的には下記と同じです。
ml-agents/Basic-Guide.md at master · Unity-Technologies/ml-agents · GitHub

流れ

1. ML-Agents Toolkitをセットアップ
2. TensorFlowSharpをセットアップ
3. 学習前のモデルを実行
4. 学習済みのモデルを実行
5. 学習させてみる
6. 学習させたモデルを実行

1. ML-Agents Toolkitをセットアップ


Unity 2017.4 より上のUnityを用意してください。
後で使う Unity TensorFlow Plugin が上記の条件を要求しています。
Unity で ml-agents/UnittySDK フォルダを開きましょう。

Edit > Project Settings > Player
より、PlayerSettings を開きます。
Other Settingsの Scripting Runtime Version
.NET 4.6 Equivalent または .NET 4.x Equivalent になっていることを確認してください。

2. TensorFlowSharpをセットアップ


学習済みのモデル(.byteファイル)をUnityから読み込むためには、TensorFlowSharpというプラグインが必要になります。
こちらよりダウンロードできます

ダウンロードした TFSharpPlugin.unitypackage をダブルクリックで開いてください。
UnityEditor上でimportをクリックすれば、Unity project内に設置されます(Assets/ML-Agents/Plugins/Computer)
再度PlayerSettingsを開き、
Scripting Define SymbolsENABLE_TENSORFLOW と書き込んでください。

ここで、下記のエラーが発生するかと思いますが、 言われるがままに ProjectSettingsから、Allow unsafe code にチェックを入れたらエラーが消えました。
Unsafe code requires the unsafe command line option to be specified. Enable "Allow 'unsafe' code" in Player Settings to fix this error.
ここまでで、下記の様になっているかと思います。

3. 学習前のモデルを実行


Assets/ML-Agents/Examples/3DBall/Scenes/3DBallを開いてください。
ここでとりあえずPlayを押すと、ボールを落とす状態のシーンが再生されるかと思います。

4. 学習済みのモデルを実行


次に、同じシーンで、学習済みのモデルを実行してみます。
Assets/ML-Agents/Examples/3DBall/Prefabs
の中にある、Game オブジェクトの子オブジェクトの Platform のインスペクターを開いてください。
Ball 3D Agent という名前のスクリプトがアタッチされているハズですので、Ball 3D Agentの Brain prorpetyを 3DBallLearning (LearningBrain)に変更してください。

Prefabのプロパティを変更したので、シーン上のすべての _Platform__ オブジェクトのBrainが3DBallLearning (LearningBrain)になってるかと思います。

この状態で、再度Playボタンをクリックすると、今度はボールを落とさないようにPlatformが動くと思います。

5. 学習させてみる


今度は自分で学習させてみましょう。
上記手順で変更した、Platform プレファブのBall 3D AgentのBrainが 3DBallLearning (LearningBrain)になっていることを確認してください。
次に、シーン上の Ball 3D Academy の、Brainsプロパティを3DBallLearning (LearningBrain)に設定し、
Control にチェックを入れてください。

Windowsの場合、学習中に途中中断するとエラーが起こり、学習結果が保存されません。
ですので、ml-agents/config/trainer_config.yamlを編集します。
max_steps を設定するだけです。
3DBallLearningの部分を下記の様に設定してください。
今回は5000回トレーニングさせます。

3DBallLearning:
    normalize: true
    batch_size: 64
    buffer_size: 12000
    summary_freq: 1000
    time_horizon: 1000
    max_steps: 5000
    lambd: 0.99
    gamma: 0.995
    beta: 0.001
    use_curiosity: true

編集が終わったら、
コマンドプロンプト(私はpowershellを使用しました)を開き、 ml-agentsをクローンしたディレクトリ直下で、
mlagents-learn config/trainer_config.yaml --run-id=training_5000 --train
とコマンドを叩いてください。
mlagents-learn コマンドが無い場合は、設定が終わっていないか、pathが通っていません。
下記記事を参考にして頂ければと思います。
Unity ml-agents v0.6.0 setup for windows - Qiita
下記のようなログが出たら成功です。


                        ▄▄▄▓▓▓▓
                   ╓▓▓▓▓▓▓█▓▓▓▓▓
              ,▄▄▄m▀▀▀'  ,▓▓▓▀▓▓▄                           ▓▓▓  ▓▓▌
            ▄▓▓▓▀'      ▄▓▓▀  ▓▓▓      ▄▄     ▄▄ ,▄▄ ▄▄▄▄   ,▄▄ ▄▓▓▌▄ ▄▄▄    ,▄▄
          ▄▓▓▓▀        ▄▓▓▀   ▐▓▓▌     ▓▓▌   ▐▓▓ ▐▓▓▓▀▀▀▓▓▌ ▓▓▓ ▀▓▓▌▀ ^▓▓▌  ╒▓▓▌
        ▄▓▓▓▓▓▄▄▄▄▄▄▄▄▓▓▓      ▓▀      ▓▓▌   ▐▓▓ ▐▓▓    ▓▓▓ ▓▓▓  ▓▓▌   ▐▓▓▄ ▓▓▌
        ▀▓▓▓▓▀▀▀▀▀▀▀▀▀▀▓▓▄     ▓▓      ▓▓▌   ▐▓▓ ▐▓▓    ▓▓▓ ▓▓▓  ▓▓▌    ▐▓▓▐▓▓
          ^█▓▓▓        ▀▓▓▄   ▐▓▓▌     ▓▓▓▓▄▓▓▓▓ ▐▓▓    ▓▓▓ ▓▓▓  ▓▓▓▄    ▓▓▓▓`
            '▀▓▓▓▄      ^▓▓▓  ▓▓▓       └▀▀▀▀ ▀▀ ^▀▀    `▀▀ `▀▀   '▀▀    ▐▓▓▌
               ▀▀▀▀▓▄▄▄   ▓▓▓▓▓▓,                                      ▓▓▓▓▀
                   `▀█▓▓▓▓▓▓▓▓▓▌
                        ¬`▀▀▀█▓


INFO:mlagents.trainers:{'--curriculum': 'None',
 '--docker-target-name': 'None',
 '--env': 'None',
 '--help': False,
 '--keep-checkpoints': '5',
 '--lesson': '0',
 '--load': False,
 '--no-graphics': False,
 '--num-runs': '1',
 '--run-id': 'training_5000',
 '--save-freq': '50000',
 '--seed': '-1',
 '--slow': False,
 '--train': True,
 '--worker-id': '0',
 '<trainer-config-path>': 'config/trainer_config.yaml'}

 INFO:mlagents.envs:Start training by pressing the Play button in the Unity Editor.

このまま、UnityのPlayボタンをクリックしてください。
すると、コマンドプロンプト側で下記のようなログが出て、5000回トレーニングを行った後、自動で
Unity Editorのゲームが止まります。

INFO:mlagents.envs:Hyperparameters for the PPO Trainer of brain 3DBallLearning:
        batch_size:     64
        beta:   0.001
        buffer_size:    12000
        epsilon:        0.2
        gamma:  0.995
        hidden_units:   128
        lambd:  0.99
        learning_rate:  0.0003
        max_steps:      5000
        normalize:      True
        num_epoch:      3
        num_layers:     2
        time_horizon:   1000
        sequence_length:        64
        summary_freq:   1000
        use_recurrent:  False
        summary_path:   ./summaries/training_5000-0_3DBallLearning
        memory_size:    256
        use_curiosity:  True
        curiosity_strength:     0.01
        curiosity_enc_size:     128
        model_path:     ./models/training_5000-0/3DBallLearning
INFO:mlagents.trainers: training_5000-0: 3DBallLearning: Step: 1000. Mean Reward: 1.234. Std of Reward: 0.641. Training.
INFO:mlagents.trainers: training_5000-0: 3DBallLearning: Step: 2000. Mean Reward: 1.363. Std of Reward: 0.805. Training.
INFO:mlagents.trainers: training_5000-0: 3DBallLearning: Step: 3000. Mean Reward: 1.454. Std of Reward: 0.901. Training.
INFO:mlagents.trainers: training_5000-0: 3DBallLearning: Step: 4000. Mean Reward: 1.829. Std of Reward: 1.090. Training.
INFO:mlagents.trainers: training_5000-0: 3DBallLearning: Step: 5000. Mean Reward: 2.263. Std of Reward: 1.552. Training.
INFO:mlagents.envs:Saved Model
INFO:mlagents.trainers:List of nodes to export for brain :3DBallLearning
INFO:mlagents.trainers: is_continuous_control
INFO:mlagents.trainers: version_number
INFO:mlagents.trainers: memory_size
INFO:mlagents.trainers: action_output_shape
INFO:mlagents.trainers: action
INFO:mlagents.trainers: action_probs
INFO:mlagents.trainers: value_estimate
INFO:tensorflow:Restoring parameters from ./models/training_5000-0/3DBallLearning\model-5001.cptk
INFO:tensorflow:Froze 20 variables.
Converted 20 variables to const ops.

トレーニング中の様子。

models/training_5000-0/3DBallLearning.bytes

こいつが5000回トレーニングしたモデルです!

このモデルをUnitySDK/Assets/ML-Agents/Examples/3DBall/TFModels/に移してください。
このとき、名前が被ってしまうと思うので、新しく追加したほうを 3DBallLearning_5000 的な名前に変えとくとわかりやすいかと思います。

次に、Unity Editorから、
Assets/ML-Agents/Examples/3DBall/Brains/3DBallLearning の Modelを 先ほど追加し、名前を変更した、 3DBallLearning_5000 に変えてください。

最後に、 シーン上の
Ball 3D AcademyControl のチェックを外してからプレイボタンをクリックしてみてください。
5000回トレーニングした感の挙動(わかりづらいですが。。。)を見れるかと思います。

あとは、先ほどのtrainer_config.yamlのmax_stepsの回数を変えて、再度学習させて確認してみて下さい。
例えば、40000回トレーニングすると、デフォルトで用意されたモデルと同じように、ボールを落とさなくなりました。

まとめ


とりあえず、サンプルを動かすことと、学習させることができました。
Examplesの中には他にもいろいろなシーンがあるので試してみると面白いと思います。
- xxAgent という名前のプレファブを見つける
- ブレインを xxLearning に変更する
という手順を踏んでから再生すれば、あらかた動くかと思います。

機械学習についての知識はまだありませんが、Unityでこれだけ気軽に動かせるとなると勉強しやすそうですね。

次は、自分で作った環境で学習させてみたいと思います。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4