Unityで機械学習(Machine Learning)が使えるML-Agentsについて、1年前に導入の記事を書きました。あれから大幅に変更されて、動作環境やセットアップ手順が変わったので、2018年11版としてまとめ直します。
- トレーニング時に、待ちすぎると待機が終わる注意を追記(2018/11/9)
- TFSharpのインポート時に、必要がなければAndroidとiOSのチェックを外すとよいというコメントを追記(2018/11/8)
目次
- 目次
- Unity ML-Agents Toolkit (Beta)について
- 機能
- インストール手順
- 最初の手引き
- このあと
- 最後に
- 参考URL
Unity ML-Agents Toolkit (Beta)について
https://github.com/Unity-Technologies/ml-agents よりざっくりと。
Unity Machine Learning Agents Toolkit(ML-Agents)は、AIで動くエージェントをゲームやシミュレーションでトレーニングするための環境を提供します。エージェントは、強化学習(Reinforcement learing)、模倣学習(Imitation learning)、遺伝的アルゴリズム学習(Nueroevolution)、その他の機械学習を簡潔に使えるPython APIを通して学習させることができます。また、TensorFlowで構築された最新鋭のAIエージェントを2D、3D、VR/ARゲームなどでトレーニングして使う機能も提供します。これらのトレーニングされたエージェントは、NPMの振る舞いを制御することを含めて、ゲームの自動テストや、リリース前に異なったゲームのデザインを評価するなど様々な目的で利用できます。
機能
- PythonからUnityの環境を操作
- 10以上のUnity用のサンプル
- 複数の環境設定や、トレーニングシナリオに対応
- ディープラーニングを使ってメモリーを強化したエージェントのトレーニング
- 分かりやすい学習シナリオのカリキュラム定義
- 教師あり学習(supervised learning)のためのエージェントの振る舞いのブロードキャスティング
- 模倣学習のための組み込みに対応
- On Demand Decision Making(要求された時に意思決定をする)による自由度の高いエージェント制御
- 環境内でのネットワークの視覚化
- Dockerによる環境構築
- ジム(gym)として学習環境をラッピングする機能
インストール手順
ml-agents/Installation.md at master · Unity-Technologies/ml-agents · GitHubを参考に、Windows10で環境を構築する手順です。簡単にするために、ドキュメント通りではない部分があります。
インストール手順概要
ML-Agentsの環境は以下の通り。
- Unity2017.4以降
- https://github.com/Unity-Technologies/ml-agents リポジトリー
- Python3.6と追加環境
- TensorFlow1.7.1
なお、このブログでは以下の環境で確認しました。
- Windows10
- Unity2018.2.10とUnity2017.3.0(推奨環境ではありませんが、3DBallは動きました)
- Anaconda5.1 + Python3.6
- TensorFlow1.7.1
Unity2017.4以降のインストール
Unity2017.4以降がインストールされていればOKです。Dockerを利用する場合は、Linuxビルドが必要ですが、今回は利用しないので、Linuxビルドは不要です。
ML-Agentsツールキットリポジトリーのダウンロード
gitが利用できる環境であれば、コマンドラインを開いて、リポジトリーをダウンロードしたいフォルダー(ドキュメント -> Unity Projectsフォルダーなど)に移動してから、以下を実行します。
git clone https://github.com/Unity-Technologies/ml-agents.git
Gitの利用が不安な場合は、こちらのページを開いて、以下を実行します。
- Webページ右の緑色のClone or Downloadボタンをクリックします
- Download ZIPを選択して、ZIPファイルをダウンロードします
- ml-agents-master.zipのダウンロードが完了したら、プロジェクトを保存したいフォルダー(ドキュメント -> Unity Projectsフォルダーなど)に全て展開します
以上でml-agents-master
フォルダーに以下のファイルが展開されます。
UnitySDK
フォルダー
ML-Agentsを利用したいプロジェクトに追加が必要なUnityアセットが入っています。このフォルダー内には、UnityでML-Agentsを使い慣れるのに便利な多くのサンプル環境も入っています。
ml-agents
フォルダー
AIをトレーニングしたり、UnityとPythonを連携させるためのPython APIなどのPythonパッケージが入っています。
gym-unity
フォルダー
ブロック崩しやピンボールなどのゲーム向けAIなどを強化学習で教育するためのツールキットであるOpen AI GymをUnityで使うためのインターフェースが入っています。
Pythonとmlagentsパッケージのインストール
以下をインストールしていきます。
- Anaconda5.1
- Pythonの科学計算パッケージです
- Python3.6
- TensorFlowを動かすための言語です
- TensorFlow1.7.1
- 汎用的な機械学習ライブラリです
- Jupyter
- Pythonでデータ分析をする時に便利なツール(参考: データ分析で欠かせない!Jupyter Notebookの使い方【初心者向け】 | TechAcademyマガジン )
注意!
- 現在、Python3.5や3.7はサポートしていません
インストール手順
ml-agents/Installation-Windows.md at master · Unity-Technologies/ml-agents · GitHubを参考にインストールをします。
ML-AgentsはWindows10のみでテストされています。他のWindowsやBootcampやParallelsのような仮想マシンでも動く可能性はありますが、動作テストはされていません。
Step 1: Anacondaを使ってPythonをインストール する
Windows用のAnacondaをダウンロードしてインストールします。Anacondaは、Pythonの科学計算向けパッケージです。Python自体を含み、複数の独立したPython環境の構築ができます。
ML-Agentsでは、少し古いAnaconda5.1を利用します。Anacondaのサイトからだと、古いバージョンのダウンロードリンクが動いていないようなので、64-bitならこちら、32-bitならこちらからダウンロードしてください(ビット数が分からない場合は、とりあえず64ビットのものを使ってみてください)。
オプションはそのままで構わないので、インストールを進めます。
- VSCodeは不要なので、以下はSkipします
- 完了したら、特に何も開く必要はないので、チェックを外してFinishをクリックします
インストールが完了したら、仕上げのためにAnaconda Navigationを起動して設定をします。
- 検索バーに(検索バーが表示されていなければスタートボタンをクリックしてから)
ana
と入力すると、Anaconda Navigationが検索で表示されるのでクリックします
- 設定が完了したらアプリが起動するので、OK, and don't show ageinをクリックします
- 以上が完了したら、アプリを閉じます
コマンドラインからAnacondaを使えるようにするために、環境設定を実行します。
- 検索バーに
環境
と入力するなどして、環境変数を編集を開きます
- Path欄をダブルクリックします
- 新規ボタンをクリックして、以下の2つのパスを追加して、OKをクリックします
%UserProfile%\Anaconda3\Scripts %UserProfile%\Anaconda3
以上で、コマンドラインからAnaconda用のコマンドであるconda
が呼び出せるようになりました。
Step 2: 新規にCondaの環境(Conda environment)を設定する
ML-Agentsツールキット用のCondaの環境を作成します。Condaの環境を利用することで、ML-Agentsの動作に必要なパッケージをインストールする影響を限定して、システム全体や他のPython環境に影響を与えるのを防ぎます。Conda環境は、ML-Agentsを実行したい時に必要に応じて有効にすることができます。
Anaconda Promptを使って環境設定をします。
- 検索バーに
ana
と入力して、リストアップされるAnaconda Prompt
をクリックして起動します
- 以下のコマンドを実行して、Python3.6の環境を、ml-agentsという名前で新規に作成します
conda create -n ml-agents python=3.6
y
を入力して[Enter]キーを押して、設定を完了させます
Anaconda環境の有効化
ML-Agentsでこの環境を利用する場合は、Anaconda Promptから以下のコマンドを実行します。
activate ml-agents
これで、作成したml-agents環境が有効になり、以下のようにプロンプトが変更されます。
TensorFlow1.7.1のインストール
機械学習ライブラリであるTensorFlowを、作成したConda環境にインストールします。先に開いたAnaconda Promptで、ml-agentsを有効にしたら、以下を実行します。
pip install tensorflow==1.7.1
注意!! ML-Agentsは、TensorFlowの最新版はサポートしません。必ず、指定のバージョン(1.7.1)をインストールしてください。
Step 3: 必要なPythonパッケージのインストール
先にダウンロードしていた、ML-AgentsのGitリポジトリーフォルダーに移動して、インストールコマンドを実行します。Step 2に続けて、Anaconda Promptで作業します。
cd
コマンドで、先ほどダウンロードして展開したML-Agentsのフォルダー内のml-agents
フォルダーを開きます- 展開したのがユーザーのドキュメントフォルダー内の
Unity Projects
フォルダーだった場合は、以下のようになります。違うフォルダーに展開した場合は、そのフォルダー内のml-agents
フォルダーを開いて下さい
- 展開したのがユーザーのドキュメントフォルダー内の
cd %USERPROFILE%\Documents\UnityProjects\ml-agents-master\ml-agents pip install .
Step 4のGPUトレーニングは使わなくてもよいのでとりあえず飛ばします
以上でインストール完了です。
最初の手引き
以下の内容に沿って、インストールした教育済みモデルの例をUnityで動作させる手順と、どのようにモデルをトレーニングするかの手順を示します。
UnityでML-Agentsツールキットを準備する
まずは、ML-Agentsツールキットを利用するための設定をして、TensorFlowSharpプラグインを組み込みます。
- 2017.4以降のUnityを起動します
- Openをクリックして、ダウンロードして展開した
ml-agents-master
フォルダー内のUnitySDK
フォルダーを開きます
- バージョン違い確認のダイアログが表示されたら、Continueをクリックして、読み込みを進めます
この段階ではまだエラーが発生します。設定を続けます。
- プロジェクトが起動したら、Editメニューから、Project Settings > Playerを選択します
- 以下を、利用したいプラットフォームごとに実施します
- Other Settingsを開きます
- Scripting Runtime VersionがExperimental、あるいは.NET 4.6 Equivalent、あるいは.NET 4.x Equivalentにします
- Scripting Defined Symbols欄に、
ENABLE_TENSORFLOW
を入力して、[Enter]キーを押します
- FileメニューからSave Projectを選択します
TensorFlowSharpプラグインのインストール
こちらからTensorFlowSharpプラグインをダウンロードします。
ダウンロードが完了したら、ダウンロードしたファイルをダブルクリックするか、UnityのProjectタブにドラッグ&ドロップして、プロジェクトにインポートします。AndroidやiOSでの利用の予定がない場合は、インポートするパッケージからチェックを外しておくとよいです(ご指摘下さったHayatoさん、ありがとうございます!)
インポートが成功したら、Assets > ML-Agents > Plugins > Computerフォルダー内に、TensorFlow関連のファイルが確認できます。
以上で、エラーがなくなります。
トレーニング済みのモデルを動作確認
3DBallを実行してみましょう。
- ProejctタブでAssets/ML-Agents/Examples/3DBallフォルダーを開いて、3DBallシーンをダブルクリックして開きます
- Hierarchyタブで、Ball3DAcademyゲームオブジェクトの子供のBall3DBrainオブジェクトを選択します
- InspectorタブのBrainコンポーネント欄のBrain TypeをInternalに設定します
- Projectタブで、Assets/ML-Agents/Examples/3DBall/TFModelsフォルダーを開きます
- 3DBallモデルをドラッグして、InspectorタブのGraph Model欄にドロップします
以上で設定完了です。Playすると、板の上でボールのバランスをとる様子が確認できます。
強化学習(Reinforcement Learning)のトレーニング
Brainを外部(External)に設定
学習はUnityとPythonを連携させて行うので、Brainを外部にあるPythonとつなげるためにExternalにします。
- Hierarchyタブで、Ball3DAcademyオブジェクトの子供のBall3DBrainオブジェクトを選択します
- InspectorタブのBrain Type欄をExternalに変更します
学習の開始
学習は、Anaconda Promptから行います。Anaconda Promptが閉じている状態から開く手順を示します。
- 検索ボックスに
ana
と入力して、Anaconda Promptが表示されたらクリックして開きます
- 以下を実行して、ML-Agents環境に切り替えます
activate ml-agents
cd
コマンドで、ml-agents-master
フォルダーに切り替えます- 以下を入力して、トレーニングの開始を準備します
mlagents-learn config/trainer_config.yaml --run-id=firstRun --train
ツールが起動すると、以下のような画面が表示されて待機状態になります。
- UnityでPlayします
Unityでボールのバランスを取るトレーニングがはじまります。最初は下手ですが、徐々に上手になっていくのが確認できます。Anaconda Promptの方では、学習の様子が表示されます。
実行が始まらない場合
実行が始まらない場合は、開始するフォルダーを間違えている可能性があります。ML-Agentsのリポジトリーを展開したml-agents-master
フォルダーにいることを確認してください。
また、Anaconda Promptでmlagents-learn config/trainer_config.yaml --run-id=firstRun --train
コマンドを実行したあと、UnityでPlayしないまま1分程度放置すると待機が終わってUnity側でエラーが発生します。Anaconda Promptを実行してUnityでPlayするようメッセージが表示されたら、速やかにUnityの方もPlayしてください(2018/11/9追記)
トレーニングを終了する
トレーニングは、5万ステップに達したら自動的に終了するような設定になっています。
AIでは過学習といって、学習させすぎるとかえって精度が落ちる場合があります。学習の途中でも十分な成果が出ていると感じたら、[Ctrl]+[C]キーを押して停止することができます。
トレーニングしたモデルは、models/<run-identifire>/editor_<academy_name>_<run-identifier>.bytes
というファイルに保存されます。
<academy_name>は、現在のUnityシーンでのAcademyゲームオブジェクト名です。このファイルに、最後のチェックポイントの状態のモデルが記録されています。以下の手順で、学習させたモデルをプロジェクト内部に組み込むことができます。
- 保存された上記の
.bytes
ファイルを、UnitySDK/Assets/ML-Agents/Examples/3DBall/TFModels/フォルダーにコピーします - Unityに切り替えて、3DBallシーンが開いていることを確認します
- Hierarchyタブから、Ball3DBrainオブジェクトを選択します
- Inspectorタブで、Brain TypeをInternalに切り替えて、読み込んだ学習ファイルをGraph Model欄にドラッグ&ドロップします
以上で設定完了です。UnityでPlayすると、先ほど学習したモデルでの実行を試せます。
本当に学習したモデルなのか?
学習を完全にやると、最初の時と同じなので自分で学習させたのか良く分かりません。そこで、不完全な学習状態のデータを作って、それを設定してみましょう。以下は概略なので、分からない部分があったら、これまでの説明に戻ってください。
- Brain TypeをExternalに切り替えます
- Anaconda Promptで上カーソルキーを押すと、学習させる時に入力したコマンドを呼び出せるので、[Enter]キーを押します
- 学習の待機状態になったら、Unityに切り替えてPlayします
- Anaconda Promptで経過を見て、Stepが5000になったら、[Ctrl]+[C]キーを押して、学習を停止します
- Unityに切り替えて、Projectタブで先ほど読み込んだ学習ファイル
editor_Ball3DAcademy_firstRun-0.bytes
を削除します - 学習させなおした
editor_Ball3DAcademy_firstRun-0.bytes
を、ProjectタブのUnitySDK/Assets/ML-Agents/Examples/3DBall/TFModels/にドラッグ&ドロップし直します - Brain TypeをInternalに切り替えます
- Inspectorタブで、Brain TypeをInternalに切り替えて、読み込んだ学習ファイルをGraph Model欄にドラッグ&ドロップします
以上で、今度は全然バランスが取れない状態が確認できます。これで、自分が学習させたファイルだったことが確認できるでしょう。
このあと
このブログでは、以下のドキュメントのInstallation & Set-upの内容を紹介しました。
ml-agents/docs at master · Unity-Technologies/ml-agents · GitHub
新規のUnityプロジェクトにML-Agentsの環境を作って、学習、再生する記事であるml-agents/Learning-Environment-Create-New.md at master · Unity-Technologies/ml-agents · GitHubについて以下にまとめました。続きに是非どうぞ。
あるいは以下のような場合はそれぞれのものを読み進めるとよいでしょう。
- ML-Agentsツールキットについてより知りたい場合は、ml-agents/ML-Agents-Overview.md at master · Unity-Technologies/ml-agents · GitHub
- 3D Balance Ball環境について、より詳細に知りたい場合は、ml-agents/Getting-Started-with-Balance-Ball.md at master · Unity-Technologies/ml-agents · GitHub
- 機械学習に関する一連の動画が以下のYouTubeの再生リストページにあります
最後に
1年が経過して、インストール手順も学習方法もシンプルになりました。Jupyter Notebookを使わずにコマンドラインで学習できるようになったのはいいですね。Jupyterも引き続き使えるので、必要になったら使えます。
このブログの内容で、Examplesの中のプロジェクトを一通り試すことはできると思います。サンプルプロジェクトのBrain Typeは、最初はプレイヤーが自分で操作するPlayerモードになっているので、それをInternalに変更すれば学習済みのAIの動きを見ることができます。
自分でモデルを作って学習させる方法は分からないので、引き続きドキュメントを読んでまとめていきます。