Unity_Lesson

5-10 FoodCollector

FoodCollectorの概要

「FoodCollector」は「エージェント」が「赤フード」 を避けながら「緑フード」を集めることを学ぶ学習環境です。
1エリアに4人のエージェントが存在し、敵対しています。エージェントは移動と攻撃ができ、他のエージェントに攻撃を当てると、相手のエージェントを4秒間行動を停止(凍結状態)にさせることができます。そして、「緑フード」取得時に報酬「+1.0」、「赤フード」取得時に報酬「-1.0」を受け取ります。 「GridSensor」を利用する学習環境のサンプルになります。


##

GridSensorについて

##

GridSensorの概要

「GridSensor」は、「レイキャスト」の持つデータ抽出による汎化性能と、「カメラセンサー」の持つCNNの画像処理能力を組み合わせたものです。

「カメラセンサー」が「幅✖️高さ✖️3」形式でカメラの映像情報を収集するのに対し、 「GridSensor」は「幅✖️高さ✖️チャンネル」形式で多種なオブジェクトの位置情報を収集し、CNNの画像処理能力で学習します。

「レイキャスト」や「カメラセンサー」には、以下のような制限事項があります。

レイキャストの制限事項

・エージェントの高さは、レイが観察すべきオブジェクトと同じである必要がある
・オブジェクトは、視線から隠されてしまう可能性がある。それらの知識が不可欠な場合は、LSTMなどで補う必要がある。
・レイの順序情報はモデルレベルで捨てられ、エージェントが学習しなければならないため、レイの数が増えると学習時間が長くなる
・レイの数が少なくなる、オブジェクトのサイズが小さくなるにつれて、オブジェクトを観察できなくなる


カメラセンサーの制限事項

・シーンのレンダリングが必要なため、学習時間が長くなる
・画面表示なしでエージェントを学習させることは不可能
・ゲーム内のオブジェクトのテクスチャを更新した場合、再学習が必要になる
・カメラセンサーで学習できるのは、RGBの3チャンネルのみ

これらの制限事項を回避するために考え出されたのが「GridSensor」になります。


GridSensorの学習データの確認

GridSensorで学習する学習データ「幅✖️高さ✖️チャンネル」の情報は、「GridSensor」の「ShowGizmo」をチェックすることで確認できます。

GridSensorの設定項目

GridSensorsensorName は、そのセンサーを識別するための名前を指定するためのプロパティです。この名前は、エージェントが複数のセンサーを持っている場合に、それらを区別するために使用されます。たとえば、ML-Agentsのトレーニングログやデバッグ情報において、特定のセンサーの観察データにアクセスしたり、センサーごとに設定を変更する際に使用されます。

sensorName の役割

設定例

// GridSensorの初期化時にセンサーネームを指定
var gridSensor = gameObject.AddComponent<GridSensorComponent3D>();
gridSensor.sensorName = "MyGridSensor";
gridSensor.cellSize = 0.5f;
gridSensor.gridSize = new Vector3Int(5, 1, 5);

このように sensorName を設定することで、センサーが何のデータを収集しているのかを識別しやすくなり、トレーニングの際に役立ちます。


以下は、残りのGridSensorComponent3D の各プロパティについての概要と解説になります。

1. SensorName (センサー名)

2. CellScale (セルのスケール)

3. GridSize (グリッドサイズ)

4. AgentGameObject (エージェントのゲームオブジェクト)

5. RotateWithAgent (エージェントと共に回転)

6. DetectableTags (検出可能なタグ)

7. ColliderMask (コライダーマスク)

8. ObservationStacks (観察スタック)

9. CompressionType (圧縮タイプ)

10. InitialColliderBufferSize (初期コライダーバッファサイズ)

11. MaxColliderBufferSize (最大コライダーバッファサイズ)


これらの設定は、エージェントが環境をどのように観察し、どの範囲や対象物を検出するかに大きな影響を与える重要な要素です。それぞれのプロパティは、エージェントの学習精度やパフォーマンスに影響を与えるため、使用するタスクに応じて慎重に設定する必要があります。