今回は前回の続きとして、ml-agents v0.6.0で既存のモデルに機械学習をさせてみました。
この記事を読むメリットとしては、「ml-agentsで機械学習を実行する方法がわかる」ことが挙げられます。
また、実際に機械学習をする際に、私の環境で発生・解決したエラーも載せているので、同じエラーが起きたときの対処法が学べます。
ml-agents v0.6.0の設定方法は前回の記事で説明しているので、まだ導入できてない方はそちらも参考にしてください。
私の環境は以下の通りです。
OS:Windows10
Anaconda3導入済み
Python3.6.5
■ml-agentsv0.6.0で機械学習するための手順
・Brain(学習モデル)の変更
機械学習するためにBrainを変更する必要があります。
[ml-agents-tool-kit]>[UnitySDK]を開いてください。
ml-agents-tool-kitは前回の記事で導入する方法を解説してあるので、ここでは省かせてもらいます。
UnitySDKが読み込めたら、[Project]>[ML-Agents]>[Example]>[3DBall]>[Brains]を開きます。
[Brains]内には、計5つの学習モデルがあります。
今回使用するのは、[3DBallLearning(Learning)]モデルです。
[3DBallLearning(Learning)]を以下2つの場所にドラッグ&ペーストします。
・[Hierarchy]>[Ball3DAcademy]>(Inspectorビュー)[Ball 3D Academy(Script)]>[Broadcast Hub]>[Brains]
・[Hierarchy]>[Game11]>[Platform]>(Inspectorビュー)[Ball 3D Agent(Script)]>[Brain]
次に、・[Hierarchy]>[Ball3DAcademy]>(Inspectorビュー)[Ball 3D Academy(Script)]>[Broadcast Hub]>[Brains]の右側にある[Control]にチェックを入れます。
場所は画像を参照してください。
次にコンソール上で機械学習するためのプログラムを動かします。
・mlagents-learnコマンドの実行
コンソール上で以下のコマンドを入力してみてください。
1 |
mlagents-learn |
このコマンドを入力する場所(ディレクトリ)はどこでも構いません。
正しく読み込めると、以下のようにunityのロゴがコンソール上に表示されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
▄▄▄▓▓▓▓ ╓▓▓▓▓▓▓█▓▓▓▓▓ ,▄▄▄m▀▀▀' ,▓▓▓▀▓▓▄ ▓▓▓ ▓▓▌ ▄▓▓▓▀' ▄▓▓▀ ▓▓▓ ▄▄ ▄▄ ,▄▄ ▄▄▄▄ ,▄▄ ▄▓▓▌▄ ▄▄▄ ,▄▄ ▄▓▓▓▀ ▄▓▓▀ ▐▓▓▌ ▓▓▌ ▐▓▓ ▐▓▓▓▀▀▀▓▓▌ ▓▓▓ ▀▓▓▌▀ ^▓▓▌ ╒▓▓▌ ▄▓▓▓▓▓▄▄▄▄▄▄▄▄▓▓▓ ▓▀ ▓▓▌ ▐▓▓ ▐▓▓ ▓▓▓ ▓▓▓ ▓▓▌ ▐▓▓▄ ▓▓▌ ▀▓▓▓▓▀▀▀▀▀▀▀▀▀▀▓▓▄ ▓▓ ▓▓▌ ▐▓▓ ▐▓▓ ▓▓▓ ▓▓▓ ▓▓▌ ▐▓▓▐▓▓ ^█▓▓▓ ▀▓▓▄ ▐▓▓▌ ▓▓▓▓▄▓▓▓▓ ▐▓▓ ▓▓▓ ▓▓▓ ▓▓▓▄ ▓▓▓▓` '▀▓▓▓▄ ^▓▓▓ ▓▓▓ └▀▀▀▀ ▀▀ ^▀▀ `▀▀ `▀▀ '▀▀ ▐▓▓▌ ▀▀▀▀▓▄▄▄ ▓▓▓▓▓▓, ▓▓▓▓▀ `▀█▓▓▓▓▓▓▓▓▓▌ ¬`▀▀▀█▓ Usage: mlagents-learn <trainer-config-path> [options] mlagents-learn --help |
※Anacondaのコマンドプロンプト上ではエラーが発生してしまい正しく実行できませんでした。詳しくは後のエラーまとめの部分で書きます。
同様にエラーが発生する場合は、Windowsコンソールを使ってみるとうまくいくと思います。
正しく読み込めている場合は、続けて以下のコマンドを入力してください。
1 2 |
cd configのあるディレクトリへのパス mlagents-learn config/trainer_config.yaml --run-id=firstRun --train |
config/trainer_config.yamlの部分は、ml-agents-tool-kitを保存したディレクトリによって変わります。
configは以下のような階層上にあります。UnitySDKと同じ階層ですね。
正しく動くと、以下のような結果が出力されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
▄▄▄▓▓▓▓ ╓▓▓▓▓▓▓█▓▓▓▓▓ ,▄▄▄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': 'firstRun', '--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▶]をクリック。すると、学習が開始されます。デフォルトだと50000回学習するので時間がかかります。
学習する時間が増えるにつれて球を落とさなくなってくる様子が確認できると思います。
・学習したモデルを使ってみる
学習が終わったら、学習したモデルを試してみましょう。
学習したモデルは、[config]や[UnitySDK]のあるml-agents-masterディレクトリ内の[models]フォルダに格納されます。
・[models]>[firstRun-0]>[3DBallLearning.bytes]
[3DBallLearning.bytes]が学習したモデルのパラメータを保存したファイルです。これを以下の場所へコピペします。
・ml-agents-master\UnitySDK\Assets\ML-Agents\Examples\3DBall\TFModels
既に[3DBallLearning.bytes]と同じ名前のファイルがありますが、上書きで大丈夫です。
[3DBallLearning.bytes]を移動し終えたら、unity上で操作します。
[Assets]>[ML_Agents]>[Examples]>[3DBall]>[Brains]内の[3DBallLearning]をクリック。
Inspectorビューに表示される[Model]に[Assets]>[ML_Agents]>[Examples]>[3DBall]>[TFModels]内の[3DBallLearning]をドラッグ&ペースト。
これで、学習したモデルの設置が完了しました。[Play]を押して再生すると、デフォルトで入っていたモデルよりも揺れが少なくなっているかと思います。
■ml-agentsv0.6.0で機械学習する際に発生したエラーまとめ
・Anaconda仮想環境上で発生したエラー
Original error was: DLL load failed: 指定されたモジュールが見つかりません。
numpyが見つからないとのこと
→Anacondaで発生するnumpyが認識されないバグ?
Pythonのパスが通っていない可能性あり。Anacondaコマンドプロンプトでできない場合は、Windowsコマンドプロンプトからやってみるとうまくいくかもです。
私の環境では、Pycharmと呼ばれるソフトでPythonを使っていたため、Anacondaを新たに入れたせいでAnaconda上ではうまくPythonが使えなかったようです。Pycharm上では問題なく動いたので、Pathに関係する不具合が原因でほぼ間違いないかと。
対処法としては、Anaconda以外のコンソールを使う。もしくは、Anaconda以外のコンソールを削除し、新しくAnacondaへPathを通す。
・unity上で発生したエラー
UnityAgentsException:The Communicator was unable to connect. Please make sure the External process is ready to accept communication with Unity. MLAgents.Batcher.SendAcademyParameters
tensorflowを使う準備ができてないよーっていうことを伝えてます。
コンソール上で、mlagents-learnコマンドを入力せずに機械学習を実行するとこのエラーが発生します。
対処法としては、コンソール上で、
1 2 |
cd configのあるディレクトリへのパス mlagents-learn config/trainer_config.yaml --run-id=firstRun --train |
を入力実行することで解決できます。
■まとめ
長くなりましたが無事機械学習を実際に行うことができました。今回説明した3DBall以外にもサンプルシーンはたくさんあるので、試してみると理解が深まるかもです。
ml-agentsを利用した機械学習の書籍もあるので、興味がある方はぜひ読んでみることをおすすめします。
日本語でml-agentsに関する情報はまだまだ少ないので、読む価値はあると思います。
最後まで読んでいただきありがとうございました。