※ML-Agentsを使用するために、Unityのバージョン2020.3以降とPythonのバージョン3.6.1以降が必要になります。
ML-Agentsとは、Unityで機械学習を実行するためのオープンソースプラグインのことです。ML-Agentsを使うことで、複雑なコードを書かなくても機械学習を行うことができます。
Unityの公式ページ
ML-Agents を使用してより魅力的なゲームを構築する | Unity
まずターミナルを起動し、ML-Agents Toolkitを任意の場所にクローンします。
Unity Hubを起動し、「開く」をクリックしてクローンしたml-agentsのProjectを選択します。
Projectが開いたら、Assets→ML-Agents→Example→3DBall→Scenes→3DBallの順にクリックして、3DBallのシーンを開きます。
シーンを開いたら、ゲームオブジェクトがすでに用意されています。この状態でUnityエディターを再生すると四角い顔がバランスを取り、ボールを落とさないようにします。
サンプルが動いていることが確認できたら、実際に学習させていきます。
①ターミナルでPythonのバージョンが3.6.1以降であることを確認します。
②サンプルを学習させるために仮想環境を使うのでターミナルを立ち上げて任意の場所にディレクトリを作ってください。今回はSampleという名前のディレクトリを作りました。
③cdコマンドでSampleに移動した後、今回使う新しい環境を作成します。ここでは、learning-envという名前の仮想環境を作成しました。
④仮想環境が作成できたら、作成した仮想環境を有効化します。
⑤仮想環境を有効化している状態でpipとsetuptoolsをアップグレードします。
⑥mlagentsPythonパッケージをインストールします。
⑦importlib-metadataのバージョンを変更します。
仮想環境は$ deactivateで終了することができます。
これからUnity側の準備をしていきます。
⑧Hierarchyの3DBallを選択し、InspectorのPrefabのOpenをクリックします。
⑨HierarchyのAgentを選択し、InspectorのInference DeviceをCPUに変更します。
これで準備は完了です。
いよいよサンプルを学習させます。
まず仮想環境を有効化します。
次にターミナルでcdコマンドを使い、クローンしたml-agentsのファイルに移動します。移動できたら下のコマンドを入力します。
(--run-id=の「Learning-3Dball-1」は好きに変えてもらっても大丈夫です。)
入力した後、下の画像のようにUnityのロゴが出ていれば成功です。
Unityエディターで再生をクリックすると学習が開始されます。
Ctrl+Cで学習を終了させることができます。
またCtrl+Cで終了させた後、$ tensorboard --logdir resultsと入力し、ブラウザでlocalhost:6006に移動すると学習のプロセスの詳細が確認できます。
学習させたモデルはクローンしたml-agentsのresultsの中の保存されます。
今回は、resultsにLearning-3Dball-1というディレクトリが作成されているはずなので、そのディレクトリの中の3DBall.onnxをUnityのProjectウィンドウのAssetsにドラッグアンドドロップします。(ここでは、元からあるサンプルモデルと見分けやすいように名前をLearning-3Dball-1.onnxに変更しています)
①Hierarchyにある3DBallを選択しInspectorのPrefabのOpenをクリック。
②HierarchyにあるAgentのInspectorのModelにLearning-3Dball-1.onnxをドラッグ。
この状態でUnityエディターの再生をクリックすると、学習させたモデルが実行されます。