UNITYでマシンラーニングについて学ぶ

みなさん、こんにちは。現在**ONETECH**で働いている**Nguyen Minh Hieu**です。共有をモットーに学習しています。 今日は、**Unityで機械学習**（マシーンラーニング）を適用するためのちょっとしたデモを作成する方法を皆さんと共有したいと思います。

## UNITYでマシンラーニングについて学ぶ
**Unity**（ユニティ）では、**ML-AgentsToolkit**を通じてマシンラーニングを設定できます。

この記事では、環境をインストールしてゲームに適用するトレーニングモデルを設定する方法を説明します。

## インストール手順
**ステップ1**：Unity Engineをインストールする （2020.3以降）

**ステップ2**：Pythonをインストールする（3.6.1以降）

**ステップ3**：以下のプロジェクトのクローンを作成します： [https://github.com/Unity-Technologies/ml-agents](https://github.com/Unity-Technologies/ml-agents)

**ステップ4**：ML-Agentsのプロジェクトフォルダーにアクセスします。次に、python仮想環境を作成するためにディレクトリをCommand Promptします。python -m-venv venvと入力します

```Python
E:\UnitySources\ml-agents\Projects>Python -m venv venv
```
次に、コマンドvenv \ Scripts\activateを使用して仮想環境をアクティブ化します。
```Python
E:\UnitySources\ml-agents\Projects>venv\Scripts\activate
```

Enterキーを押すと、これは成功したときに返される結果です
```Python
(venv) E:\UnitySources\ml-agents\Projects>
```

**ステップ5**：pytorchをインストール。
```Python
(venv) E:\UnitySources\ml-agents\Projects>pip3 install torch~=1.7.1 -f https://download.pytorch.org/whl/torch_stable.html
```
pytorchをインストール
**ステップ6**：ml-agentsをインストール。
```Python
(venv) E:\UnitySources\ml-agents\Projects>python -m pip install mlagents==0.28.0
```

基本的に環境の設定は完了です。インストールプロセス中に問題が発生した場合は、次のリンクから詳細を参照できます。

[https://github.com/Unity-Technologies/ml-agents/blob/release_19_docs/docs/Installation.md](https://github.com/Unity-Technologies/ml-agents/blob/release_19_docs/docs/Installation.md)

## デモプロジェクトについての簡単な説明
![図1.プロジェクトの概要-UNITYでマシンラーニングについて学ぶ](https://onetech.jp/wp-content/uploads/2022/03/So-luoc-ve-project-demo-Hinh-1.png)
図1.プロジェクトの概要-UNITYでマシンラーニングについて学ぶ

**目的**：メインオブジェクト（agent）に自分で移動する方法を学習させてから、ターゲットオブジェクト（goal）への独自の方法を見つさせます。

**説明**：シーンに含まれるもの

* object wallの壁に囲まれたエリア。
* object agent がある。（画像の白い立方体です。）
* object goalがある。（画像の黄色い球です。）

トレーニングプロセスの原則：Agentはランダムに移動するように設定されていて真と偽を学習する。ここでは、壁にぶつかることが偽りであり、ゴールに行くことが真であるを設定します。トレーニングプロセスの結果、onnxファイルを取得します（このファイルは、トレーニング後のAIとして理解できます）。このファイルをAgentに使用すると、壁や最適なパスに触れることなく、正確に移動できます。

## シーンデモを作成する
ゴール（球）と4つの壁を作成し、Box Collider、Rigidbody、script goalまたはscript wallをそれぞれ追加します。そして、下の画像のようにインストールします。
![図2. 壁の検査官（ゴールと同様）](https://onetech.jp/wp-content/uploads/2022/03/Tao-Scene-demo-Hinh-1.png)
図2. 壁の検査官（ゴールと同様）

上記のすべてのオブジェクトをTrainAIオブジェクトに属します。 

* **ステップ1**：以下は、Agentの入力、出力、移行設定スクリプトです。
![](https://onetech.jp/wp-content/uploads/2022/03/Tien-hanh-train-cho-Agent-hinh-4.png)
* **ステップ2**：Object Agentに追加し、次のフォームに従って設定します。
![](https://onetech.jp/wp-content/uploads/2022/03/Tien-hanh-train-cho-Agent-hinh-5.png)
* **ステップ3**：手動テストする。

図5に示すようにBehavior TypeをHeuristic Onlyに設定し、Playを押します。次に、キーボードを使用してエージェントを移動し、壁に触れているかどうかをテストします。床が緑色に変わるかどうかを確認します。次に、目標が達成されたかどうかを確認します。床が赤に変わるかどうかを確認します。最後に、壁にぶつかってゴールに当たった後、エージェントとゴールがランダムであるかどうかを確認します。

* **ステップ4**：モデルをトレーニングする。

cmdで、次のコードを入力して、train model境を初期化します。 id=name。
```Python
(venv) E:\UnitySources\ml-agents\Projects>ml-agents-learn --run-id=MoveToGoal
```
これは、トレーニングモデル環境が正常に初期化されたときの結果です。
![](https://onetech.jp/wp-content/uploads/2022/03/Tien-hanh-train-cho-Agent-hinh-6.png)

Unityの横にある[BehaviorType]セクションで、[Default]を選択します
![](https://onetech.jp/wp-content/uploads/2022/03/Tien-hanh-train-cho-Agent-Behavior-type.png)

Object TrainAIが多いほど、Trainプロセスが速くなるという特徴があります。したがって、マシーンの構成に基づいて最適化の検討してください。
![](https://onetech.jp/wp-content/uploads/2022/03/Tien-hanh-train-cho-Agent-hinh-7.png)
次に、再生を押してトレーニングプロセスを開始します。 トレーニングプロセスを観察し、エージェントがほとんどの場合正しく機能していることを確認したら停止します。
## トレーニング結果観察
目視で確認し次の方法でトレーニング時にパラメータを確認することにより精度をより上げることができます。
トレーニング中、新しいcmdを作成します。tensorpoarch–logdir resultsを入力します。
![](https://onetech.jp/wp-content/uploads/2022/03/Quan-sat-ket-qua-train-1.png)
ここではlocalhost：6006を返します。ブラウザを開いてください。
Cumulative Reward >0.9 のパラメーターが表示されたら、トレーニングプロセスを終了できます。
![](https://onetech.jp/wp-content/uploads/2022/03/Quan-sat-ket-qua-train-Hinh-8.png)
図8.トレーニング時の詳細なパラメーターを示すページ
これはAIを通じて達成された結果であることに注目してください。違いは、Agentが道を見つけるためにロジックをコーディングする必要がないということですが、Agentはそれ自体で目的地に移動することを考えます。
## まとめ
実際、[Machine learning](https://onetech.jp/blog/what-is-machine-learning-9055)（マシーンラーニング）は多くの事業分野や生活にも応用され始めています。顔認識システム、ルビックキューブを回転させるロボット、チェスや囲碁などの知的ゲームのAIは非常に有名です。

上記のチュートリアルで、UnityでのMachine learning の基本を理解できます。その後、他のプロジェクトでさらに深く掘り下げて応用することもできるでしょう。皆様の成功を祈っています。

* **Source & video**: [https://onetech.jp/blog/learn-about-machine-learning-in-unity-14449](https://onetech.jp/blog/learn-about-machine-learning-in-unity-14449)