Unity
ML-Agents

Unityで機械学習やってみる(ML-Agents) 最初のサンプル動かすとこまで

環境 mac
Unity 2017.4.4.f1

ちょっとUnityで機械学習試して見たいのでやってみる
学習させるところまでとりあえず・・・。

必要なものをダウンロード

Unity ML-Agentsのアセットをダウンロードする

Unity Machine Learning Agents Toolkit

中身はこんな感じ
スクリーンショット 2018-08-07 00.07.40.png

TensorFlowSharpプラグインをダウンロード

ここから


上記リンクのBasic GuideのところにあるDownloadをクリックするとpackageをダウンロードできる
unitypackageの状態で落とせるよ

Pythonをインストールしてない人はPythonもインストール

わからないときはターミナルから

python --version

すればバージョンが表示される。
2.7.10だったので3系インストールする
手っ取り早くAnacondaでPhthonの環境構築
2系と3系があるけど3系の方をチョイス
そしてインストールして起動

Anaconda起動

左メニューEnvironmentsを選択し、左下のCreateボタンを押す
スクリーンショット 2018-08-07 00.23.14.png

適当に名前つけて、Pythonのバージョンを設定してCreate
スクリーンショット 2018-08-07 00.23.38.png

作成したものをクリックしてOpen Terminalでターミナルが開く
スクリーンショット 2018-08-07 00.28.15.png

バージョンを確認
スクリーンショット 2018-08-07 00.32.28.png

ML-Agentsのアセットサンプルを動かす

まずはUnityで新規プロジェクト3Dで作成

ダウンロードしたUnity ML-Agentsnounity-environmentのAssetsフォルダを作成したプロジェクトに突っ込む
スクリーンショット 2018-08-07 00.20.04.png

そしてTensorFlowSharpのプラグイン TFSharpPlugin.unitypackageもインポート
これ結構大きい

ここまでできたら
PlayerSettingのResolution and Presentationの
Runin Backgroundをチェック
Display Resolution DialogをDisabled

Other SettingsのScripting Runtime VersionをExperimental(.NET 4.6 Equivalent) Unity再起動するよ
Scripting Defined SymbolsにENABLE_TENSORFLOW を記載
スクリーンショット 2018-08-07 00.43.06.png

シーンの設定

現状でこのようなフォルダ構成になっているはずなので
ML-Agents/Examples/3DBall/Scenes/3DBallのシーンを開く
スクリーンショット 2018-08-07 00.44.33.png

ボールを落とさないように板を傾けるやつです
スクリーンショット 2018-08-07 00.46.37.png

学習方法の設定は
ヒエラルキーのBall3DAcademy/Ball3DBrainのインスペクターにある
Brain.csのBrainTypeで変更します。
学習させたいので今回はExternalに。
デフォルトだとPlayerになっていて十字キーで自分で操作できます
スクリーンショット 2018-08-07 00.49.32.png

Brain TypeはPlayer, Heuristic, External, Internalの4種類
Playerは人間が動かす
Heuristicはコードで動かす
ExternalはUnityEditor上もしくはコンソールからの起動で自動で学習させる
Internalは学習させたデータを使って動かす

BuildSettingにシーンを追加してmacでビルド
このまま実行してもボールが落ちるだけなので学習させる

必要なPythonのパッケージのインストール

ターミナルにてml-agents-masterのpythonフォルダに移動

pip install .

上記コマンドを実行
すると色々インストールされる。
スクリーンショット 2018-08-07 01.10.14.png

pythonフォルダの状態で

python3 learn.py <ビルドしたappのパス> --train

上記コマンドを実行するとappが立ち上がって勉強し始める
study.gif

しばらく放置すると落とさなくなってきてる!
study2.gif

デフォルトだとStepが50000だから結構ほっとかないと終わらなかった。
もっと少なくすればよかった --save-freq=回数 のパラメータを設定してあげれば変更可能
終わるとball3D_ppo.bytesがml-agents-master/python/models/ppoに出力されます
スクリーンショット 2018-08-07 01.26.29.png

ソースとかまだ読んでないからあまり中身わかってないけど・・・
一旦ここまで。