Skip to content

Instantly share code, notes, and snippets.

@KobayashiRui
Last active June 22, 2024 11:50
Show Gist options
  • Save KobayashiRui/32510977e234bfb18affdc1d65af5c4c to your computer and use it in GitHub Desktop.
Save KobayashiRui/32510977e234bfb18affdc1d65af5c4c to your computer and use it in GitHub Desktop.
unityの使い方及びunity-MLagentの使い方をまとめる 最終的にはMLagentにて簡易モデルを作成しPPOの学習(複数機体)=>Gazeboにて準本番環境(1機体)=>実環境で動かす を目標とする

ml-agentの使用方法

複数Agent&1Brainのml-agent環境作成手順

  1. 設定の変更をする => メニュー[File => Build Settings]
  2. [Player Settings]ボタンをクリックし、Inspectorウィンドウで以下を設定する
  • Resolution and Presentationの設定項目
    • Run in Background : チェックする : バックグラウンド実行の有効
    • Display Resolution Dialog : Disabled : Resolutionダイアログを非表示
  • Other Settingsの設定項目
    • Scripting Runtime Version : Experimental(.NET4.6 Equivalent) : Scripting Runtimeのバージョン指定でこれをしないとML-Agentでエラーがでる
    • Scripting Defined Symbols : ENABLE_TENSORFLOW : Tensorflowを利用することを指定
  1. ML-AgentをUnityのAssets内にコピーする=>容量を軽くしたい場合はExampleを消してもOK
  2. <名前>Academyを作成=<名前>は自分で決める
  3. Academy.csファイルを<名前>Academy.csに変更しclass名も<名前>Academyに変更する
  4. Academy内にBrainを追加しBrainスクリプトを適応する(BrainはAdd Componentから追加できる)

学習方法

  • 強化学習 : ある環境におかれたエージェントが環境に対して行動し得られる報酬が最大化されるような方策を求める手法
  • 模倣学習 : 他人が行う行動を模倣して学習する(ml-agentの場合は人間が操作する行動を模倣する)
  • カリキュラム学習 : タスクの難易度を徐々に上げていくことで、より効率的な学習を可能にする学習方法
  • RNN(Recurrent Neural Network) : 時系列を扱えるニューラルネットワークで過去の環境の状態も行動決定の材料に使用できる
  • LSTM(Long Short-Term Memory) : RNNの長期記憶の学習がうまくできないという問題を解決したもの(RNNの拡張は現段階でLSTMのみ)
  • ICM(Intrinsic Curiosity Module) : まだ見たていない場面い対する好奇心を報酬として勝手に学習させる学習方法

Agent,Brain,Academy

  • Agent : 学習環境内で独立して行動するオブジェクト環境の状態の観測とBrainが決定した行動の実行を行う
  • Brain : Agentが観測した状態に応じてAgentの行動を決定するオブジェクトで1つのBrainで複数のAgentのActionを決定可能
  • Academy : 学習環境を管理するオブジェクトで、各学習環境には必ず1つ存在する

学習シナリオ

  • Single-Agentシナリオ : 単一のBrainにリンクされた単一のAgentの学習シナリオ
  • Simultaneous(同時) Single-Agnet : 単一のBrainにリンクされた独立報酬をもらう複数のAgentの学習シナリオ=>Single-Agentの並列化版
  • Adversarial(敵対) Self-Play : 単一のBrainにリンクされた逆報酬をもらう敵対した2つのAgentの学習シナリオ
  • Cooperative(協同) Multi-Agent : 単一または複数のBrainにリンクされた共有報酬をもらう複数のAgentの学習シナリオ
  • Competitive(競争) Multi-Agent : 単一または複数のBrainにリンクされた逆報酬をもらう複数チームの敵対した複数のAgentの学習シナリオ(チームvsチーム)
  • Ecosystem(生態系) : 単一または複数のBrainにリンクされた独立報酬をもらう複数のAgentの学習シナリオ

Academy

Academyクラスのオーバーライドメソッド

  • virtual void InitializeAcademy() : 環境の初期化時に呼ばれる
  • virtual void AcademyReset() : 環境のリセット時に呼ばれる
  • virtual void AcademyStep() : ステップ毎に呼ばれる

Academyクラスのプロパティ

  • ResetParameters resetParameters : リセットパラメータの取得

Academyクラスのメソッド

  • boolGetIsInference() : 推論かどうかの取得
  • void SetIsInference(bool isInference) : 推論かどうかの指定
  • int GetEpisodeCount() : 現在のエピソード数の取得
  • int GetStepCount() : 現在のエピソードのステップ数の取得
  • void Done() : エピソード完了
  • bool IsDone() : Academyがエピソード完了したかどうかの取得
  • bool IsCommunicatorOn() : コミュニケータがONかどうかの取得
  • Communicator GetCommunicator() : コミュニケータの取得

コミュニケータ : Unityの学習環境と学習用Pythonスクリプトの間の通信を管理するオブジェクト

Academyの設定項目

  • Max Steps : エピソードの最大ステップ数で最大ステップ数に到達するとAcademyと全Agentのエピソード完了 一定時間後にエピソードが完了しない場合は0を指定(利用しない場合は0)
  • Training Configuration : 学習時のレンダリング品質と実行速度
  • Width : ウィンドウの幅(ピクセル)
  • Height : ウィンドウの高さ(ピクセル)
  • Quality Level : 描画のクォリティ(低0 ~ 5高)
  • Time Scale : 環境の実行速度(1~100倍)
  • Target Frame Rate : フレームレート(-1 : 最大[最も高いフレームレートということ])
  • Inference Configuration : 推論時のレンダリング品質と実行速度(基本的に設定はTraining Configurationと同じ)
  • Reset Parameters : リセット時に変更可能なリセットパラメータ

Academyの設定によるフレームレートの値を適用するには

  1. メニュー[Edit => Project Settings => Quality]
  2. V Sync Count を ** Don't Sync ** に指定

V Syncの設定について

  • Every V Blank : 垂直ブランクと同期. フレームレードがディスプレイのリフレッシュレートに依存
  • Every Second V Blank : 1つおきに垂直ブランクと同期
  • Don't Sync : 同期しない. スクリプトによるフレームレート設定を適用

Brain

BrainスクリプトはAddComponetでBrainと検索することで適用できる

Brainの設定項目

  • Vector Observation : 数値型の状態情報の設定
    • Space Type : データ型
    • Space Size : データサイズ(平面のx,y座標のみが環境からの情報ならサイズは2)
    • Stacked Vectors : 過去のVector Observationのスタック数
  • Visual Observation : 任意のカメラの画像情報の設定
    • Size : サイズ(カメラの数 使用しない場合は0)
    • Element 0X : カメラの設定(0Xはカメラの数)
      • Width : 幅
      • Height : 高さ
      • Black and White : グレースケール
  • Vector Action : 数値型の行動の設定
    • Space Type : データ型
    • Space Size : サイズ(行動の種類)
    • Action Descriptions : 行動の説明
      • Size : 行動の説明の数
      • Elemnt 0X : 行動の説明(0Xは行動の説明の数分Elementがあるということ)
  • Brain Type : Actionの決定方法
    • External : 外部のTensorFlowでActionを決定
    • Internal : 推論モデルでActionを決定
    • Player : 人間の操作(キー入力など)でActionを決定
    • Heuristic : 手書きのプログラムでActionを決定

Player Brainの設定項目

  • Broadcast : PythonスクリプトでAgentの情報を収集するか(チェックをいれると収集する)
  • Default Action : キー入力なし時に通知するAction値
  • Discrete Player Actions : キー入力時に通知するAction値
    • Size : キー設定の数
    • Element 0~X : キー設定
      • Key : キー
      • Value : Action値
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment