この記事はUnity 2 Advent Calendar 2017の7日目の記事です。
この記事でのバージョン
Unity 2017.2.0f3
はじめに
ちょっと前にUnityが機械学習用のSDK、
Unity Machine Learning Agents (ML-Agents)を公開しました。
特に使う予定がなかったので触れずにいたのですが、Advent Calendarという良い口実が出来たので
ちょっと触って、記事にしてみました!
なお、タイトルにAIと入れたのは、そちらの方が受けが良さそうだと思ったからです!!
Unity準備
まずはGitHubからML-Agentsを入手。
次にUnity-environmentをUnity(2017.1以降)で開き、
TensorFlowSharpのunitypackageをインポートします。
そしたら、ML-Agents/Examplesの中から好きなモノ(今回はPush)を選び、シーンを開きます。
シーン内のBrainのBrain TypeをExternalにすればUnity側の準備は一旦完了です。
準備が完了したらpythonディレクトリに実行ファイルをビルドします。
python準備、学習
ビルドが完了したら次はpythonの準備を行います。
pythonを使った事がなければ、以下のサイトからダウンロードし、インストールします。
インストールが完了したら、プロジェクトのpythonディレクトリをターミナルで開き、
pip3 install . というコマンドを実行します。
さらに、jupyter notebookというコマンドを実行することでjupyterを立ち上げます。
するとブラウザのlocalhost:8888からjupyterを開けるようになるので、
その中のPPO.ipynbを開きます。
PPO.ipynbのHyperparametersにあるenv_nameを先程ビルドした実行ファイルの名前に変更し、
上から順にcontrol + enterを押して実行し、学習して行きます。
米印が出ている間は実行中なので、ひたすら待ちます。
実行が終わり、python/model/ppoに.bytesファイルが生成されていれば成功です。
学習結果の反映
先程の.bytesファイルをUnityのTFModelsというディレクトリに入れ、
Player SettingのOther Settingで
Scripting Runtime Version を Experimental (.NET 4.6 Equivalent) に、
Scripting Defined Symbols に ENABLE_TENSORFLOW を追加して、Unityを再起動します。
最後にBrainのBrain TypeをInternalに変更し、
Graph Modelに.bytesファイルをセットすれば学習結果が反映されます。
試しに学習回数(Hyperparametersのmax_steps)が
1,000、10,000、100,000回のモノを実行してみると以下のような感じに。
明らかに何かを学習している……!(何かは分かってない……!)
なお、見た感じでなんとなく分かるかと思いますが
Pushは青い箱を操作してオレンジの箱を緑のスイッチに載せるゲーム(?)です。
おわりに
正直分からない事だらけですが、機械学習自体は簡単に出来てしまったし何より楽しい!
これは流石Unityという所でしょうか。
そのうち細部まではいかずとも、もう少し内容を理解して、
他の事に使ってみたいと思う今日このごろでした(:3っ)∋〜
参考