今回は、unityで機械学習を行えるようにするライブラリ「ml-agents v0.6.0」を導入してみました。
ml-agents v0.6.0を導入することで、unityで強化学習を開発することができるようになります。
この記事では、ml-agentsをインストールし、機械学習のサンプルモデルを動かすところまでを解説します。
私が躓いたところ、わかりずらかったところをまとめていきます。
調べて自己解決できたので2時間ほどで導入できました。
以下が設定環境です。
■unityで機械学習するまでの手順
以下unityで機械学習するまでの手順をまとめていきます。
全体の流れとしては以下の通りです。
1.Pythonをインストール
2.ml-agents-toolkit(機械学習のデータそのもの)をインポート
3.TensorflowSharpをインポート
4.強化学習してみる
それぞれ細かく見ていきます。
1.Python3.6をインストール
まず初めにPythonをインストールしておきましょう。
ml-agentsの推奨versionが3.6だったので、私はPython3.6.8をインストールしました。
公式HPのリンクを張っておきますので、以下リンクからどうぞ。

Pythonのversionを確認したいときは、コンソール上で、以下のコマンドで確認できます。
1 |
python -V |
2.ml-agents-toolkitをダウンロード・インポート
次にml-agents-toolkitをインポートしましょう。
以下のリンク先の「clone or download」をクリックでダウンロードできます。
ml-agents-toolkitには、機械学習済みモデルやサンプルシーンなどが入っています。
ダウンロード先はどこでも大丈夫です。私は、unityで新しく3Dプロジェクトを立ち上げてから、そのファイル内に入れました。
ダウンロードが完了したらインポートしていきましょう。
まずml-agentが使用するTensorflowなど機械学習に必要なライブラリをまとめてダウンロードしましょう。
Anaconda Navigatorを開きます。Windows検索ボックス(ショートカットキー:「Shift+S」)にAnaconda Navigatorと検索すればでてきます。
起動後、左シェルフの[Environmnts]、画面下側の[Create]をクリック。
次に、新規環境を[Name:適当でOK]と[Python:3.6]と選択し、[Create]をクリック。
下の画像を参照してください。
新規環境ができたら、新しく作成したml-agentsの▶をクリック、[Open Terminal]を選択。すると、コマンドプロンプトが立ち上がります。
コマンドプロンプト上で、「cd フォルダ名」を使ってml-agents-toolkitを保存したディレクトリまで移動します。
移動したらさらにcdコマンドを使って、ml-agents-master>ml-agentsまで移動します。
ml-agentディレクトリは、「setup.py」があるはずなのでそこを目安にしてください。
dirコマンドでディレクトリ内を表示させると以下のような表示になります。
1 2 3 4 5 6 7 8 9 |
2019/02/15 16:13 <DIR> . 2019/02/15 16:13 <DIR> .. 2019/02/15 16:49 <DIR> mlagents 2019/02/15 16:13 <DIR> mlagents.egg-info 2019/02/15 15:22 1,236 README.md 2019/02/15 15:22 1,393 setup.py 2019/02/15 16:10 <DIR> tests 2 個のファイル 2,629 バイト 5 個のディレクトリ 398,050,816,000 バイトの空き領域 |
ここで、以下のコマンドを入力すれば機械学習に必要なライブラリをまとめてインストールできます。
1 |
pip install . |
インストールには少々時間がかかるので待ちましょう。
インストールが終わったら、以下のコマンドでインストールしたライブラリを確認してみてください。tensorflowなどもろもろがインストールされているはずです。
1 |
pip list |
私のコンソール上ではこんな風に表示されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
pywin32 224 pywinpty 0.5.5 PyYAML 3.13 pyzmq 17.1.2 qtconsole 4.4.3 Send2Trash 1.5.0 setuptools 40.7.3 six 1.12.0 tensorboard 1.7.0 tensorflow 1.7.1 termcolor 1.1.0 terminado 0.8.1 testpath 0.4.2 tornado 5.1.1 traitlets 4.3.2 wcwidth 0.1.7 Werkzeug 0.14.1 wheel 0.32.3 widgetsnbextension 3.4.2 wincertstore 0.2 |
機械学習に必要なライブラリをインストールしたので、unityでml-agentを開いてみましょう!
unity上で、[File]>[OpenProject]をクリックし、プロジェクト選択画面を開きます。
新しく開いたプロジェクトウィンドウ右上にある[Open]をクリックし、ダウンロードしたml-agents-masterディレクトリ内のUnitySDKディレクトリを選択し開きます。
これで、ml-agentsのインポートは終わりです。次にunity上でtensorflowを動かすためのプラグイン[TensorFlowSharp]をインポートしていきます。
3.TFsharpをインポート
以下のリンク先からTensorflowSharpをダウンロードしてください。保存先はどこでも大丈夫です。
unitypackageなので、ダウンロードし終えたら、ダブルクリックで開けます。[Import]をクリックするとインポートが始まります。
インポート後、[Edit]>[Project Settings]>[Player]>[Other Settings]へ進み、[Scripting Define Symbol]の空欄に「ENABLE_TENSORFLOW」を記入し、下の[Allow ‘unsafe’ Code]にチェックを入れる。
これでTensorflowSharp Pluginのインポートはおわりです。
4.実際に動かしてみる
必要なものはそろったので、実際に機械学習したサンプルデータを動かしてみましょう!
unity上で、[Project]>[ML-Agents]>[Examples]>[3DBall]>[Scenes]>[3DBall]をダブルクリック。
[Play▶]ボタンを押すと、板に球が落ちてきてくる様子が確認できると思います。
このモデルは、Playerつまり自分で操作するモデルになります。十字キーで板を動かせます。
次に、[Hierarchy]内の[Game11]>[Platform]をクリック。
[Inspector]>[Ball 3D Agent(Script)]>[Brain]に、[Project]>[ML-Agents]>[Examples]>[3DBall]>[Brains]の[3DBallLearning]をドラッグ&ペーストしてみてください。
以下の画像を参照してください。
Brainは機械学習のモデルを指定します。3DBallLearningは、あらかじめ学習させておいたモデルです。そのため、3DBallLearningを使うと、球が落ちないように板が制御されます。
[Play ▶]して確認してみてください。
■ml-agents導入時に出たエラーの対処法
・The brain 3DBallLearning was set to inference mode but the Tensorflow library is not present in the Unity project.
unity上で、[Edit]>[Project Settings]>[Player]>[Other Settings]を選択。
[Scripting Define Symbol]の空欄に「ENABLE_TENSORFLOW」と記入し、下の[Allow ‘unsafe’ Code]にチェックを入れることで解決できます。
・The type or namespace name ‘TensorFlow’ could not be found
tensorflowがインストールされていません。コンソール上で、tensorflowをインストールする必要があります。
コンソール上で以下のコマンドでインストールできるかと思います。
1 |
pip install tensorflow==1.7.1 |
■まとめ
今回は、unityで既存のモデルを動かすところまでをまとめてみました。
Unityで機械学習ができるようになったわけですが、ML-Agentsは具体的にどう利用できるの?と疑問があったので私なりに考えてみました。
ML-Agentsを扱った書籍では、オブジェクトの関節の動きを学習させてアニメーションを使用せずに動かしたり、単純なゲームを学習させてハイパフォーマンスを出したりしていました。
強化学習のメリットは、自動で学習してくれる点です。
このメリットを活用する方法としては、オフラインでのゲーム相手の作成や強化ができるのかなと思いました。
プレイヤーのデータを学習してどんどん強くなる敵とか作れたらおもしろそうですね。
ml-agentsに関する書籍を紹介。
日本語でml-agentsに関する情報はまだまだ少ないので気になる方は購入を検討してもいいと思います。
Unityではじめる機械学習・強化学習 Unity ML-Agents実践ゲームプログラミング
次回は既存のモデルに学習させるところをやってみようと思います。
最後まで読んでいただきありがとうございました。
参考サイト
甲斐 甲様の記事, https://qiita.com/kai_kou/items/2a6545d1f9d83178d0c0
unity公式ガイド:https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Basic-Guide.md