見出し画像

ML-Agent[0.13.1]を使った強化学習の環境構築

0.はじめに

近年、第三次AIブームが到来し、画像認識(パターン認識)などにおいて、人口知能はより身近な存在となってきました。
本記事では、人工知能の中でも機械学習(強化学習)を身近に感じてもらうために、Unityを使った導入方法を紹介します。
なお、UnityとAnacondaは【1.使用したもの】をすでにインストールしているものとして説明をしますので、インストール方法などについては別途サイトをご覧ください。

1.使用したもの

・WindowsPC
・UnityHub→Unity2019.3.13f1
・Anaconda(python3.7の64bitインストーラー)
・ML-Agents(var 0.13.1)


2.Unity ML-Agentsのダウンロード

「Unity ML-Agents」のダウンロードには2つの方法があります。ただし、保存場所が異なりますので、フォルダーの作成から説明します。

(0)フォルダーの作成

C:\Users\ユーザー名」に進み、”新規フォルダーの作成”で『Unity0.13.1』と名前を付けて作成してください(※フォルダー名は、英数字であればなんでもいい)。
今回は『Unity0.13.1』フォルダー内に"Unityプロジェクト"と”ml-agentsフォルダー"をまとめて説明しますが、以下の理由があるからです。
・日本語フォルダーや多階層によってうまく動作しない
・"Unity"と”ml-agents"を別々の保存先にするとうまく動作しない

※私が解決した方法であり、必ずしもこれが正しいわけではありません。

(1)GitHubからのダウンロード
URL: https://github.com/Unity-Technologies/ml-agents
↑には、最新のml-agentsのリポジトリがあります。
今回のように旧バージョンをダウンロードする際は、リンクページの下にいくと下図のような表があります。
今回は「0.13.1」をダウンロードし、(0)で作成したフォルダー内に解凍してください。
※説明の都合上、解凍したフォルダーの名前を「ml-agents」だけに変更してください。

画像1

(2)コマンドプロンプトを使ったダウンロード
コマンド入力によりダウンロードすることもできます。ただし、起動時のディレクトリ(選択フォルダー)がユーザー名になっています。違う場所にダウンロードしてしまっても、後で「ml-agents」フォルダーをいどうさせればよいので、安心してください。

手順
①コマンドプロンプトを起動する。
②「cd␣(0)で付けた名前」で(0)のディレクトリを移動する。
 ※私であれば「cd Unity0.13.1」である
③次のコードを入力(orコピペ)をしてダウンロードする。
 ※環境によって少し時間がかかります
 ※完了後「ml-agents」というフォルダーが作成されます。

git clone https://github.com/Unity-Technologies/ml-agents.git -b 0.13.1


3.Pythonの仮想環境の構築

次の手順で、「Anaconda Prompt」を使って、Pythonの仮想環境を構築します。

手順
(1)「mlagents」という名前の環境を作成する。「y/n」の選択肢が出たら「y」を選択し、インストールを続行する。
※すでに「mlagents」の名前の環境がある人は、削除して作り直すか、後ろに番号を付けるなどして対応してくだい。

$ conda create -n mlagents python=3.7

(2)環境をアクティブ化する

$ conda activate mlagents //自分で付けた環境名

(3)【2.Unity ML-Agentsのダウンロード】でダウンロードした「ml-agents」ディレクトリに移動する。
※ユーザー名のディレクトリからスタートしているものとする

cd Unity0.13.1/ml-agents

(4)次のコマンドを実行して、ml-agentsをインストールします。
※2回目の「pip install -e ./」は時間かかります。

cd ml-agents-envs
pip install -e ./
cd ..
cd ml-agents
pip install -e ./
cd ..


4.Unityの環境設定

(1)プロジェクトの新規作成
プロジェクト名:ML-Agents sample (←様々なサンプルを試せるので)
保存先:C:\Users\ユーザー名\Unity0.13.0
テンプレート:3D

新規作成

(2)強化学習用アセットのコピー
「ml-agents → UnitySDK → Asset」のフォルダー内にある『ML-Agents』のフォルダーをUnityのプロジェクトウィンドウ内にドラッグしてコピーする。

アセットのコピー

(3)Platformの設定
「File → Build Settings」から『PC, Mac & Linux Standalone』を選択する。

プラットホーム

(4)「Api Compatibility Level」を設定
"Build Setting"の左下にある『Player Settings...』を選択し、左の『Player』から「Other Settings → Api Compatibility Level」を「.Net 4.x」に選択する。
※選択後は、✕で閉じる

api設定

(5)「Barracuda 0.4.0」をインストール
「Windows → Package Manager」を開き、『Advanced』から「Show Preview Packages」を選択する。右の検索スペースに『Barracuda』と入力し、左にある"▽"マークを押して展開して"See all versions"でさらに展開する。「preview - 0.4.0」を選択し、右下の"install"でインストールする。
補足:
『ml-agents 0.13.1』は「Barracuda 0.4.0」で動き、
『ml-agents 0.14.0』からは「Barracuda 0.5.0」で動きます。
旧バージョンは最新バージョンに対応していないことがあるので気を付けてください。

barracuda設定

(6)プロジェクトの保存
「File → Save Project」で設定を保存します。


5.サンプルを開く

(1)3DBallのシーン選択
プロジェクトウィンドウより「Assets → ML-Agents → Examples → 3DBall → Scenes」にある『3DBall』を選択する。

3Dball選択

(2)まずは実行
再生ボタンを押すことで、すでに訓練(学習)された「推論モデル」が動作し、球を落とさないようにCubeが動きます。

サンプル実行

(3)すでにあるモデルを取り除く
すでに訓練された「推論モデル」が"Prefab"に組み込まれているので、一度取り除きます。
①プロジェクトウィンドウより「Assets → ML-Agents → Examples → 3DBall → Prefabs」にある『3DBall』をダブルクリックで選択し、"Prefab"の編集を有効にする。
②ヒエラルキーウィンドウの”Agent"を選択する。
③インスペクターウィンドウより「Behavior Parameters(Script) → Model」にある『3DBall(NNModel)』を"none"に変更する。

画像9

(4)シーンの保存
「File → Save」で、シーンを保存する。

(5)補足
学習モデルをのけて実行すると次のようになります。学習の時はどれだけのスピードでやってるかの参考に覚えておいてください。

学習なし


6.Pythonスクリプトを使って学習させる

(0)Anacondaを終了してしまった場合
"Anaconda Prompt"を再度起動し、アクティブ化する。
※アクティブ化の『mlagents』は【3.Pythonの仮想環境の構築】でつけた名前です。

$ conda activate mlagents

次に、「ml-agents」のディレクトリに移動する。

cd Unity0.13.0/ml-agents

(1)学習の準備をする
次のコマンドを入力して、学習を始める準備をする。
※(3)でも述べるが、原則『推論モデル』の名前は、trainer_config.yamlに書かれた名前で保存される。ステップごとに保存したい場合は、「id=firstRun」の部分を変更すれば別のフォルダーが作成され、別途保存できる。ただし『推測モデル』名前は変わらない

mlagents-learn config/trainer_config.yaml --run-id=firstRun --train

(2)Unityを実行する
プロンプトが下図のようになったら、スタートの合図です。Unityに戻って実行ボタンを押すと学習が開始されます。

実行画面

実行したて(落ちても次へ次へとどんどん学習しています)

じっこうしたて

10000ステップ後(だいぶ落とさなくなりました)

実行中

画像13

(3)学習を終了する
終了するには2つの方法があります。
・プロンプトの方で、「Ctrl + C」で止める
・Unityの方で、実行ボタンを押して止める
終了するとプロンプトが次の図のようになり、赤枠で囲まれた部分が『推論モデル』の保存先+データ名となる。
保存先:models → firstRun-0
保存名:3DBall.nn  (←nn形式が推論モデル)

終了時


7.『推論モデル』を使って実行

(1)『推論モデル』をUnityにコピー
①プロジェクトウィンドウの「Assets → ML-Agents → Examples → 3DBall」内に、『NNModel』と新規フォルダーを作成する。
②「ml-agents → models → firstRun-0」の中にある、『3DBall.nn』を『NNModel』の中にドラッグしてコピーする。

NNmodelフォルダ作成

コピー

(2)プレハブに組み込む
①プロジェクトウィンドウより「Assets → ML-Agents → Examples → 3DBall → Prefabs」にある『3DBall』をダブルクリックで選択し、"Prefab"の編集を有効にする。
②ヒエラルキーウィンドウの”Agent"を選択する。
③インスペクターウィンドウより「Behavior Parameters(Script) → Model」に先ほど保存した『3DBall.nn』をドラッグして追加する。

画像18

(3)実行
実行すると、学習したことを生かしてボールが落ちないようにバランスをとる。下の図は30000回実行した学習結果である。

画像19


8.他のサンプルでも試してみよう

ここまで出来たら、あとはサンプルのシーンを変えるだけです。手順としては次のようになります。

①シーンを切り替える
②『推論モデル』を取り除く
③AnacondaでPythonスクリプトの実行
※アクティブ化にすることを忘れないように
の繰り返しである。

①➁については【5.サンプルを開く】、③については【6.Pythonスクリプトの実行】を参考にしてください。

テニスの実行例を載せておきます。
・モデルをなくした場合(全然動きませんパラメータの都合かな?)

未学習テニス

・学習中

学習中

・4000stepでの学習結果
相手側にうまく返せるようになってきました。

画像22

・『サンプルの推論モデル(青)』vs『4000step推論モデル(紫)』
青の方が滑らかで確実にボールを終えてますが、紫はまだ追い切れてませんね。

画像23

9.最後に

ML-Agetnsは「0.13.1」から「0.14.0」にバージョンアップをした際に、フォルダーの構成が変わってしましましたが、動作としての流れは、全く同じです。また、ペンギンを使ったものや木の棒を取りに行く犬など、まだまだ試せるサンプルはありますので、本記事でうまくいったら他の記事でも試し、機械学習に少しでも興味を持ってもらえたらと思います。
↓Next Stage


この記事が気に入ったらサポートをしてみませんか?