アオイの備忘録ブログ

色んな事を書く備忘録用ブログです(※更新頻度は神のみぞ知る)

Rev.9 ML-Agents環境構築と学習サンプル実行

bianco.hatenablog.com

で作った環境を使ってサンプルの学習を行う。

 

■ 手順

 

1. Unityプロジェクトの設定と基本設定

[1]. Unityのプロジェクトを新規作成

Unityの新規プロジェクトをどこでも良いので作る

 

[2].  Unityの各種設定を行う(※エディタが日本語設定の場合)

(1).[ファイル]→[ビルド設定]→[アーキテクチャ]をx86_64に変更

f:id:Bianco:20200425202815p:plain

f:id:Bianco:20200425202840p:plain

(2).[編集]→[プロジェクト設定]→[Player]→[その他設定]→[API 互換性レベル]を.NET 4.xに変更

f:id:Bianco:20200425203828p:plain

f:id:Bianco:20200425203844p:plain

(3). [ウィンドウ]→[Package Manager]→[Add Package from disc]で
cloneしてきたGitHubリポジトリのml-agentsフォルダの
/com.unity.ml-agents/package.jsonをインストール

f:id:Bianco:20200425212542p:plain

f:id:Bianco:20200425212603p:plain

f:id:Bianco:20200425212603p:plain

f:id:Bianco:20200425212639p:plain
インストールが完了するとパッケージリストにML-Agentsが増えてるはず

f:id:Bianco:20200425213127p:plain

(4). ML-Agenstフォルダをコピー

cloneしたml-agentsフォルダの「ProjectAssets」にある ML-Agents フォルダを
ローカルのUnityプロジェクトのAssetsフォルダにコピーする
追加されてるとプロジェクトウィンドウにML-Agentsフォルダが追加されてるはず。

f:id:Bianco:20200426020104p:plain

 

2. Pythonスクリプトによる学習

学習用のPythonスクリプトから実行して学習を行う
今回は3DBallサンプルを使用

f:id:Bianco:20200425214847p:plain

AnacondaPromptを開いてconfigフォルダのあるルートに移動し以下のコマンドを実行

mlagents-learn <学習コンフィグファイルのパス> --run-id=<実行ID> --train
mlagents-learn config/trainer_config.yaml --run-id=3DBall-1 --train

config/trainer_config.yaml:学習用のハイパーパラメータをまとめ訓練設定ファイル実行ID:訓練結果を識別するために使用する任意の文字列
--train:推論でなく学習である事の設定

実行すると以下のログとUnityのロゴが出る

f:id:Bianco:20200425225731p:plain

この[non-resource variables are not supported in the long term]の時に
Unityの再生ボタンを押してプロジェクトを実行すると学習が始まる
※本来は「Start training by pressing the Play button in the Unity Editor」という
ログが出るらしいが 0.15.1 だと何故か出ない、0.15.1の仕様なのか自分の環境だけの可能性もかなりあるが何故出ないのか分からないので情報求ム。

学習が始まると以下のログが出る

f:id:Bianco:20200426004309p:plain

Step:回数
Mean Reward:平均報酬
Std of Reward標準偏差(データのバラつきを表す値)

f:id:Bianco:20200426012634p:plain
50000ステップ(学習コンフィグファイルの初期設定値)に達すると学習完了
全て学習が終わるとml-agentsフォルダのmodelsフォルダが出来て
nnファイル(推論モデルが出力される。(※今回は3DBall.nnファイルが出力される)

f:id:Bianco:20200426041007p:plain

3. 出力された推論モデル(nnモデル)を利用して実行する

(1). 出力されたnnモデルをローカルプロジェクトのAssetにコピー
(※基本Asset内ならどこでも良い)


(2). プレハブのモデルに出力した推論モデルを設定

・プロジェクトウィンドウの「Assets→ML-Agents→Examples→3DBall→Prefabs」
ある「3DBall」を選択し、インスペクターで「プレハブを開く」をクリック

f:id:Bianco:20200426042035p:plain

f:id:Bianco:20200426042045p:plain

・プレハブウィンドウの3DBallを選択してインスペクターを開き
「Behavior Parameters」の「モデル」に、出力した推論モデル「3DBall.nn」を
ドラッグか右端になる小さいアイコンをクリックすると読み込みファイル選択
ウィンドウが出るのでそこで推論モデルを選択する

f:id:Bianco:20200426043100p:plain

※「Agent」(今回は3DBall Agent)は強化学習のエージェント情報を管理するコンポーネントです。シーン「3DBall」内には12個のプレハブ「3DBall」のインスタンスが存在します。12個すべてのインスタンスの「Agent」に対して設定更新する代わりに、プレハブ「3DBall」でまとめて更新出来る。

・Unityの再生ボタン(▶ボタン)を押して実行すると箱がボールを落とさない様に
バランスを取るのが確認出来るはず

 

■ 終わり

ここまで来るだけで心身共に疲弊した。
正直もうめんどくさ過ぎてやる気出ないがこれからオリジナルで何かめちゃくちゃx100
簡単なアプリの作成を開始する予定

 

■ 参考

UnityのML-Agentsで、新しい学習環境を作成する - tanaka's Programming Memo 

Unity ML-Agents 0.15.0 のチュートリアル (1)|npaka|note