UnityでML-Agentsを使った機械学習の環境作りをする

今回はUnityで機械学習の補助をするコンポーネントML-Agentのインストールと機械学習の管理をするAnacondaのインストールをしてみます。

UnityのML-Agentは実際に機械学習をする機能ではなく機械学習を行うのはPythonスクリプトで、その管理を行うのがAnacondaになるようです。

Unityで機械学習をする為の環境作りが結構大変だったのでそれに特化した記事にしました。

実際にUnityで機械学習をさせるのは別の記事で出来たらと思います。(-_-)

今回の記事はUnity2020.1.9f1にて動作確認をしております。

スポンサーリンク

Unityで機械学習をする為の条件

Unityで機械学習をさせる為のML-Agentを使う為には以下の条件があります。

Unityは2019.4以降のバージョン
Pythonは3.6.1以降のバージョン

が必要になります。

Pythonはこの後ダウンロードするのでいいですが、Unityのバージョンは気を付けてください。

ML-Agentコンポーネントのインストール

まずはUnityのML-Agentコンポーネントをインストールします。

UnityメニューのWindowからPackage Managerを選択します。

ML-Agentコンポーネントをインストールする為にPackageManagerを開く

ML-Agentを選択し、Installボタンを押してインストールします。

ML-Agentコンポーネントをインストールする

今回の場合はPythonとML-Agentとのバージョンを合わせる為にML-Agentのプレビュー版である1.5.0をインストールします(上の画像では1.0.5に赤い四角がありますが1.5.0をインストールします)。

プレビュー版なのでPackage Managerの初期設定では表示されていません。

そこでUnityメニューのEdit→Project Settingsを選択し、Package ManagerのEnable Preview Packageにチェックを入れます。

Package ManagerにPreviewを表示する方法

こうすることでPackage Managerにプレビュー版のコンポーネントも表示されるようになります。

これでML-Agentコンポーネントのインストールが出来ました。

Anacondaのダウンロードとインストール

Anacondaのサイトに移動し自身の環境に該当するものをダウンロードします。

Anaconda | Individual Edition
Anaconda's open-source Individual Edition is the easiest way to perform Python/R data science and machine learning on a single machine.

Anacondaのダウンロード

わたくしの場合はWindowsの64bit版のPython3.8をダウンロードし、インストールしました。

インストールの設定はデフォルトの状態のままにしました。

インストールが完了したらWindowsのスタートメニューからAnaconda Promptを選択します。

Anaconda Promptを開く

コマンドプロンプトでのコマンド

コンソールのコマンドについていくつか見ていきます。

は現在のフォルダ内のフォルダとファイルの一覧を表示します。

で階層を指定してそのフォルダに移動出来ます。

例えば現在C:\Users\kamekumechanフォルダにいるとしたらそのkamekumechanフォルダ内にDesktopフォルダがあり、その中にabcフォルダがあるとすればAnacondaのプロンプトで以下のように入力するとDesktopフォルダのabcフォルダに移動出来ます。

その他の階層の移動方法としては

以下のように..で前の階層に移動出来ます。

以下のように.だと現在のフォルダ(カレントフォルダ)を表します。

以下のようにすると指定したML-Agent環境がアクティブになります。

以下の場合はmlagentsという名前で作ったML-Agent環境

以下のようにすると現在アクティブなML-Agent環境が非アクティブになります。

以下のように入力するとコンソール画面を閉じます。

以下のように入力するとAnacondaにインストールされたパッケージとそのバージョンを確認する事が出来ます。

他にもコマンドプロンプト自体のコマンドやAnacondaのコマンドもあります。

Pythonの環境作成

最初にAnacondaのバージョンをアップデートします。

コンソールに以下のように入力しEnterキーを押します。

次にAnaconda Promptのコンソール画面で以下のように入力し、pythonの環境を作成します。

わたくしの場合はmlagentsという名前のフォルダ内に環境を作成し、pythonが3.8なのでそこの番号は自分の環境に合わせて変更します。

pythonの環境を作成するコマンド

コンソールに以下のように表示されたらyキーを押してEnterを押し、パッケージをインストールします。

python環境をインストールするかの可否

しばらくすると以下のように環境作りとパッケージのインストールが完了した旨が表示され、次に環境をアクティブにするコマンドと非アクティブにするコマンドが表示されます。

pythonの環境作りとパッケージのインストールの完了報告

環境をアクティブにしたいので以下のようにコマンドを入力します。

コンソール内のコマンドをそのままマウスで選択してCtrl+CキーでコピーしCtrl+Vキーで貼り付けると間違いがありません。

環境がアクティブになると以下のようにコンソールに表示されるようになります。

Agent環境をアクティブにした状態

アクティブにした環境を非アクティブにしたい場合は以下のコマンドを実行すると現在アクティブである環境が非アクティブになります(他の環境がアクティブであればその環境がアクティブになります)。

この後、オンライン上からML-Agent環境パッケージのインストールを行う方法でやってみます。

最新のリリースバージョンをGitHubからダウンロードして、そこからインストールする方法もあります。

それは後で紹介します。

Python環境にPythonパッケージをインストールする

次にpython環境にPythonパッケージをインストールします。

コンソールで以下のように入力します。しばらく時間がかかります。

ここでエラーが出る可能性があります。

例えば以下のような感じです。

ML-Agent関連のパッケージをPythonにインストールした時のエラー

2020年10月以降だとパッケージの依存関係のチェックが変わるらしくエラーが出るらしいので、

–use-feature=2020-resolverというコマンドオプションを付けてパッケージの依存関係をチェックしてくださいという感じです。

詳しい所は以下のサイト等を参考にしてみてください。

pipの依存関係チェックが厳しくなる - Qiita
はじめにこれもPython Bytesポッドキャストを聴いていて知ったのですが、pipがモジュールインストール時に行う依存性チェックが厳しくなるみたいです。気にしないでいるとある日突然 pip をバージョンアップした途端に依存...

先ほどのエラーの中で

tensorflow 2.3.1
mlagents-envs 0.20.0

のパッケージで使用しているnumpyのバージョンが対応しているバージョンでない為にエラーが出ています。

tensorflow2.3.1に対応するnumpyのバージョンは1.16.0以上で1.19.0未満であること
mlagents-envs0.20.0に対応するnumpyのバージョンは1.14.1以上で1.19.0未満であること

となっているのでnumpyのバージョンを1.18.0に変更することにします。

そこでnumpyのバージョンを変更して依存関係のエラーを解消します。

(注)これらのバージョンの数値は変わってくる可能性があります。

コンソールに以下のように入力しEnterキーを押してnumpyの1.18.0のものをインストールします。

==の左右にスペースを入れるとエラーになります。

これでとりあえずML-Agentのパッケージのインストールが出来ました。

出るエラー内容や依存関係のエラーは変わってくるのでエラーに応じた対応が必要になってきます。(^_^;)

トレーニング用の設定ファイルのダウンロード

機械学習のトレーニング用の設定ファイルを以下からダウンロードします。

Unity-Technologies/ml-agents
Unity Machine Learning Agents Toolkit. Contribute to Unity-Technologies/ml-agents development by creating an account on GitHub.

今回はとりあえず動かす時に必要なので動くものをダウンロードして使うだけです。

まずはBranchをrelease_8_branchに変更し、configフォルダ→ppoフォルダを選択します。

3DBall.yamlファイルの中身をコピーし、自身のパソコン内にtrainer_config.yamlファイルを作成し、中身を貼り付けます。

わたくしの場合はGitHubの使い方がわからないのでコピー&ペーストになっています。(^_^;)

設定ファイルの中身の設定については以下に詳細が載っています。

Unity-Technologies/ml-agents
Unity Machine Learning Agents Toolkit. Contribute to Unity-Technologies/ml-agents development by creating an account on GitHub.

1から設定ファイルを作成するのは大変なので元からあるものを変えて使うと良さそうです。

最新リリース版のツールキットをダウンロードし環境を作成する方法

ここまではオンライン上のパッケージをインストールしてやりましたが、サンプルを含むリリース版をダウンロードし、ダウンロードしたオフラインのパッケージをインストールする方法もあります。

現在の最新リリース版は8なので以下のリンク先の一番下にあるSource Code(zip)を押し、Zipファイルをダウンロードしてデスクトップ等に展開します。

またこちらのページにパッケージの互換性も表示されています。

Release ML-Agents Release 8 · Unity-Technologies/ml-agents
ML-Agents Release 8 Package Versions NOTE: It is strongly recommended that you use packages from the same release together for the best experience.Package V...

デスクトップにファイルを展開すると、

C:\Users\ユーザー名\Desktop\ml-agents-release_8

というフォルダ階層になるので、コンソールでcdを使ってml-agentsフォルダまで移動します。

フォルダを移動したら以下のコマンドを打ちます。

これで現在のフォルダにあるml-agentsパッケージをインストール出来ます。

次にcdで階層を移動します。

で一つ上の階層のml-agents-envsフォルダに移動し、同じように以下のコマンドを打ちます。

これでml-agents-env関連のパッケージもインストールされます。

わたくしの場合はオンライン上からパッケージをインストールし、それぞれのパッケージの依存関係のエラーを解消し動作するようにしましたが、こちらの方が互換性がある状態のものをインストール出来るのでいいかもしれません。

ここら辺は以下を参照してください。

Unity-Technologies/ml-agents
Unity Machine Learning Agents Toolkit. Contribute to Unity-Technologies/ml-agents development by creating an account on GitHub.

Unityでの学習を開始する方法

Unityでの学習を開始する方法を見ていきます。

トレーニングの開始

Anacondaコンソールで以下のように入力してEnterキーを押し、トレーニングを開始します。

trainer_config.yamlファイルを作成したフォルダまでコンソールで階層を移動し以下のように入力します。

わたくしの場合はデスクトップにtrainer_config.yamlファイルを作成したのでcdコマンドを使ってDesktopフォルダまで移動し上記のコマンドを入力します。

–run-idはこの学習のIDを指定するもので上記の場合はtestIdという名前にしています。

試しにコマンドを打ってみます。

idはUnity-LearnのHummingbirdsで使ったhb_01というidを設定しています。

また–forceというコマンドオプションは以前同じidを使っていた場合に強制で上書きするというオプションです。

途中から再開する場合は–resumeオプションを指定します。

コンソールで機械学習を開始するコマンドを打つ

上の画像のようにUnityのロゴが表示され、Unity Editorのプレイボタンを押すと学習が開始されます。

mlagents-learnコマンドを打った後に

File: ファイル名 エラー内容

というようなエラーが発生する場合は打ったコマンドを間違えていたり、Unityエディター内のプレイボタンを押すのが遅いや、使っているYAMLファイルの中身の書き間違えだったり、構成がうまくいっていない可能性があります。

個人的にはやはりYAMLファイル(今回の場合はtrainer_configという名前のYAMLファイル)の中身が間違っていてエラーが発生したのでそこを気を付けるといいかもしれません。

ここまででUnityで機械学習をする為の環境作りは出来ました。

ですが、UnityのML-Agentコンポーネントを使った設定や機械学習をさせるゲームオブジェクトの作成やスクリプトの作成はまだしていません。

いきなり自分でスクリプトを作るのも大変なので、次回はダウンロードしたサンプルを使って機械学習をしてみることにします。

タイトルとURLをコピーしました