Memoプログラミングについてのメモ。Pythonこの記事はすでに古くなっています。以下の2018/11版の方をご覧ください。am1tanaka.hatenablog.comUnityで機械学習を利用できるようにするUnity公式のml-agentsをWindows7で動かすまでのメモです。Agentsを略した名前です。「Unityの機械学習エージェント」ということですね。機械学習には様々なものがありますが、このプロジェクトでは機械学習の代表格であるTensorFlow(テンソル・フロー)というオープンソースを利用します。ゲーム専用ではなく、デファクトスタンダードなAIシステムを採用しているのは大きな利点だと思います。TensorFlowは手書き文字や写真に写っているものを推定するなど様々な用途に使われていて、応用範囲がとても広いです。以前から使ってみたいと思っていましたが、よいきっかけになりました。今回のプロジェクトの利用の流れは大体以下の感じです。機械学習には、「学習する段階」と「学習成果を使って実行する段階」の2段階があります。機械学習を行うTensorFlowはPythonで動くソフトウェアですので、学習する段階はUnityとPythonを連携させて行います。学習結果はデータファイルに出力されます。それをUnityに含めてビルドすれば、機械学習で作成したAIに状況を判断させることができます。やって作成した「学習成果を使って実行する」アプリにはTensorFlowは不要なので、単体で配布することができます。Linuxのスタンドアロン実行形式][iOS][Android]の3種類とありました。2017.1以降Anaconda(Python)のインストールに管理者権限が必要インストールhttps://github.com/Unity-Technologies/ml-agents/blob/master/docs/installation.mdの流れに沿って作業を進めます。大まかには以下のとおりです。64-bit版のインストール(これでPythonも入る)ml-agentsリポジトリーの入手Pythonの仮想環境の作成ml-agentsのSetupを実行ではインストールをはじめましょう。64-bit版のインストールTensorFlowを動かすのに必要なので、Anacondaというデータサイエンス向けの機能が沢山用意されているPythonパッケージをインストールします。このパッケージはPythonを含むので、同時にPythonのインストールも完了することになります。Installer]をクリックしてダウンロードします。ダウンロードが完了したら、実行して、設定はそのままでインストールを完了させます。完了したら[Next]を押して、以下のチェックは不要なので外して、[Finish]をクリックして完了です。ml-agentsリポジトリーの入手Unity公式が提供している[ml-agents]リポジトリーを入手します。GitHubリポジトリーなのでクローンするのが本道な気もしますが、今回はシンプルにZIPをダウンロードして使います。ZIP]をクリックします(cloneの方がいい人はクローンしてください)。Projects]フォルダー内など、Unityからアクセス可能な場所にZIPファイルを展開します。展開したフォルダー内のunity-environmentフォルダーにUnityのプロジェクト、pythonフォルダーにPython関連のファイルが入っています。ここからは、このフォルダー内にインストールをしていきます。Pythonの仮想環境の作成Pythonは、プロジェクトごとに個別に環境を持たせることができます。通常のPython3ではvenvで行いますが、Anacondaはcondaで同様のことを行います。(余談:Pythonは特別な環境設定をせずに、複数の異なるバージョンや32-bit版、64-bit版のものをインストールしても問題ありません。プロジェクトごとに、[venv]や[conda]で必要なバージョンの仮想環境を作成して使うことができます。進んでます)Anacondaのプロンプトを起動します。Prompt]を起動します。Anaconda版のPythonが利用できるコマンドプロンプトが開きます。この後の作業で、文字コードがUTF-8じゃないとエラーが出る部分があるので、以下を実行して、コマンドプロンプトの文字コードをUTF-8に切り替えておきます。エラーが発生した場合コマンドラインのフォントがUTF-8の日本語に対応していないと以下のようなエラーが発生します。その場合、以下のように対処します。65001を実行すれば切り替わります。続きcdコマンドでml-agents-masterフォルダーを開きます。エクスプローラーでml-agents-masterフォルダーを開いてから、上のアドレスバーをクリックしてパスをコピーします。コマンドプロンプトでcdと入力して、右クリックして[貼り付け]を選べば楽です。以下を実行して、Anacondaの環境下にml-agents用の環境を作って、Python3.6.3が使えるようにします。Pythonのバージョンはその時々に応じて変更して構いません。python=3.6.3[Proceed]の問いが表示されたら[Enter]キーを押してインストールを開始します。残りのインストールは、パッケージに含まれるSetup.pyで行えます。これはml-agents環境にインストールしたいので、環境を切り替えます。ml-agentsこれで、コマンドラインの行頭が(ml-agents)に変わります。この後のインストールは、全てこの環境内に行われます。.しばらく待って、コマンドラインが表示されたらインストール完了です。この後もコマンドプロンプトは利用しますので、閉じないでおいてください。ml-agentsのボールのサンプルのセットアップUnityで機械学習をさせるための準備をします。ボールのバランスを取るサンプルを使います。GitHubに従って作業をします。先にダウンロードした[ml-agents-master]フォルダー内の[unity-environment]フォルダーを選択して開く以下のような警告が表示されたら、構わず[Continue]して読み込む[Project]ビューから[ML-Agents]>[Examples]>[3DBall]フォルダーを開いて、[Scene]シーンをダブルクリックして開くこれで、ご存知の以下のシーンが開きます。Build]にチェック(どっちでもいいです)[Build]をクリックフォルダーを[ml-agents-master]まで戻してから、[python]フォルダーをダブルクリックして開くファイル名を3DBallとして、[保存]ボタンをクリック以上でビルドが完了したら、学習用の実行ファイル3DBallの出来上がりです。トレーニングするトレーニングはJupyter(ジュピター)を使って行うと楽です。インストール済みなのでコマンドラインから以下で起動します。notebookこれで呼び出したパスが参照できます。pythonフォルダーにいた場合、以下のような具合です。動作確認と環境設定の確認用の[Basics.ipynb]というファイルと、PPOで学習させる[PPO.ipynb]の2つがJupyterのノートブックです。Basicsは飛ばして、早速学習させましょう。[PPO.ipynb]をクリックして開きます。ノートブックでは、説明を読んだり、実行するプログラムをステップごとに実行していくことができます。Optimization(PPO)」と呼ばれるもので、詳細はhereで読んでくれ、というようなコメントになっています。(2)の[Run]ボタンで、現在選択されているセルが実行されますが、実行する前に1つだけ環境設定が必要です。下にスクロールさせて、4つ目のセルを表示します。env_nameから始まる行を探して、environmentを消して、実行ファイル名である3DBallに書き換えてください。Agents]のセルをクリックして青枠で囲まれたら、[Run]ボタンを押して実行します。自動的に次のセルがアクティブになりますので、また[Run]を押して実行します。graph]のセルになるまで[Run]をしてください。待っていると、以下のような小さいウィンドウが表示されて、先にビルドした[3DBall]が起動して学習を始めます。10.82324のようなメッセージが表示されはじめます。Rewordの数値を確認してください。75を越えるぐらいでしたらかなり頭が良くなっていますので、学習を終了させましょう。[3DBall]の[x]ボタンをクリックして閉じてください。JupyterにJSONDecodeErrorなどが表示されますが大丈夫です。Rewardの値は、時々低い値になる場合があります。そのままですと、かなり頭が悪いAIになります。学習を継続させれば改善しますので、改善したい場合は[3DBall]を閉じずに待ってください。Modelが表示されます。納得がいく値が出るまで待ってください。graphの下のセルを[Run]して実行します。このように表示されたら、学習した人工知能のデータが保存されます。手動で停止しなくても、max_stepsで定義されているステップ数を実行したら自動的に学習は終了して、.bytesファイルが保存されます。デフォルトでは5e5が代入されていますが、これは5*10の5乗で、50万ステップを表しています。1e5ぐらいにしておくと、10万回で自動的に終了して保存されます(2017/11/11追記)トレーニング結果をUnityに組み込むプラグインのインポートTensorFlowの学習成果をUnityに組み込んで、単独のアプリとして動くようにしましょう。TensorflowのデータをUnityで扱えるようにするためのプラグインが必要なので、Unityのプロジェクトにインポートします。Project]をしてから、Unityを一度閉じて、起動し直します。Typeが使えるようになります。学習データを組み込む学習データを組み込んで、Unityで結果を見ましょう。Model]欄の[Missing]となっているところにドラッグ&ドロップ以下は恐らく最初から設定済みですが、念のため確認しておいてください。controlで制御する設定なので、TensorFlowモデルがノイズパラメーターを必要としているので設定しています。Controlだった場合はepsilonは不要です以上できたら実行してください。学習が成功していれば、ボールをなるべく落とさないようにパネルが自動制御されるはずです。以下はRewardが80ぐらいの学習データで動かしたものですが、安定して制御できています。学習していない状態を確認する学習を殆どさせていないとどうなるでしょうか。殆ど学習させていないデータを用意したので確認してみましょう。ダウンロードして、[Project]ビューの[TFModels]フォルダーにドラッグ&ドロップします。1]をドラッグ&ドロップして設定してください。実行してみてください。バランスが取れなくなります。これが初期に近い状態です。この状態から機械学習をさせて、先に確認したような動きに変わったのです。Modelsが表示されるようになっています。Jupyterの以下のsave_freqが保存するまでの学習回数の設定です。この値を変更すると、保存タイミングを変更することができるようになります。500回に減らしたのが下手バージョンのデータです。経過を見る限り、今回の内容なら2万回ぐらいで十分に上達するようです。environment]のところでtimeoutが発生して失敗します。kernel]アイコンをクリックしてカーネルの再起動をします。[Restart]をクリックします。kernel]と表示されて、消えるまで待ちます。じるので、簡単に手順をまとめておきます。Prompt]で、[Ctrl]+[C]キーを押すJupyterが停止したら、exitを実行してコマンドプロンプトを閉じる以上です。設定が完了したプロジェクトを再開する方法です。まとめ長かったですが、以上で機械学習を利用するUnityプロジェクトの環境構築が完了です。TensorFlowを利用した様々な機能を開発するよい土台となりそうです。次は、このサンプルが何をやっているかの調査をして、把握できたらUnityプロジェクトの[examples]フォルダーに入っている他のサンプル([Basic][GridWorld][Tennis]の3つ)もいじってみたりしつつ、応用範囲を広げて行ければと考えています。23:05Unityの公式サンプルml-agentsでAIを試すTweet広告を非表示にする関連記事2019-01-18UnityのML-Agentsで、新しい学習環境を作成する(0.6.0a版)0.7.0だと色々変更になったものと思います。0.5.0aのものです。Learning)が使えるML-Agentsについて...2018-02-12Projenyにカスタムのパッケージを登録するUnity用のパッケージマネージャーProjeny、使い続けています。»プロフィールid:am1tanakaプログラミングについてのメモ。Page月別アーカイブはてなブログをはじめよう!am1tanakaさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。