(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]


本ブログの運営者kan.kikuchiが個人で開発したゲームです!

    

UnityでAI(機械学習)事始め【Unity】【ML-Agents】【機械学習】


このエントリーをはてなブックマークに追加


この記事は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以降)で開き、


f:id:kan_kikuchi:20171206214525j:plain


TensorFlowSharpのunitypackageをインポートします。


そしたら、ML-Agents/Examplesの中から好きなモノ(今回はPush)を選び、シーンを開きます。


f:id:kan_kikuchi:20171206232734j:plain
f:id:kan_kikuchi:20171206232742j:plain


シーン内のBrainのBrain TypeをExternalにすればUnity側の準備は一旦完了です。


f:id:kan_kikuchi:20171206232835j:plain


準備が完了したらpythonディレクトリに実行ファイルをビルドします。


f:id:kan_kikuchi:20171206233001j:plain


python準備、学習

ビルドが完了したら次はpythonの準備を行います。

pythonを使った事がなければ、以下のサイトからダウンロードし、インストールします。


f:id:kan_kikuchi:20171206222236j:plain


インストールが完了したら、プロジェクトのpythonディレクトリをターミナルで開き、

pip3 install . というコマンドを実行します。


さらに、jupyter notebookというコマンドを実行することでjupyterを立ち上げます。

するとブラウザのlocalhost:8888からjupyterを開けるようになるので、

その中のPPO.ipynbを開きます。


f:id:kan_kikuchi:20171206223105j:plain


PPO.ipynbのHyperparametersにあるenv_nameを先程ビルドした実行ファイルの名前に変更し、


f:id:kan_kikuchi:20171206233200j:plain


上から順にcontrol + enterを押して実行し、学習して行きます。

米印が出ている間は実行中なので、ひたすら待ちます。


f:id:kan_kikuchi:20171206223331j:plain


実行が終わり、python/model/ppoに.bytesファイルが生成されていれば成功です。


f:id:kan_kikuchi:20171206233315j:plain


学習結果の反映

先程の.bytesファイルをUnityのTFModelsというディレクトリに入れ、


f:id:kan_kikuchi:20171206233339j:plain


Player SettingのOther Settingで

Scripting Runtime Version を Experimental (.NET 4.6 Equivalent) に、

Scripting Defined Symbols に ENABLE_TENSORFLOW を追加して、Unityを再起動します。


f:id:kan_kikuchi:20171206231433j:plain


最後にBrainのBrain TypeをInternalに変更し、

Graph Modelに.bytesファイルをセットすれば学習結果が反映されます。


f:id:kan_kikuchi:20171206234233j:plain


試しに学習回数(Hyperparametersのmax_steps)が

1,000、10,000、100,000回のモノを実行してみると以下のような感じに。


f:id:kan_kikuchi:20171207000038g:plain
f:id:kan_kikuchi:20171207000144g:plain
f:id:kan_kikuchi:20171207000252g:plain


明らかに何かを学習している……!(何かは分かってない……!)


なお、見た感じでなんとなく分かるかと思いますが

Pushは青い箱を操作してオレンジの箱を緑のスイッチに載せるゲーム(?)です。


おわりに

正直分からない事だらけですが、機械学習自体は簡単に出来てしまったし何より楽しい!

これは流石Unityという所でしょうか。


そのうち細部まではいかずとも、もう少し内容を理解して、

他の事に使ってみたいと思う今日このごろでした(:3っ)∋〜


参考