UE5の ニューラルネットワーク
このスライドの内容 • UE5にニューラルネットワーク関連の機能が 標準でいくつかあるので、試してみた感想をまとめました。 • Learning Agents • NNE (Neural Network Engine)
Learning Agents
Learning Agentsとは • Epic標準の機械学習のプラグイン • 5.5だとExperimental • 強化学習(RL)、模倣学習(IL)に特化 • 今日の内容は公式チュートリアルに詳細に記載
最初に結果(ゴール:車がコース通りに自走する) • 2時間弱、強化学習した結果を元に推論で車を動かす https://youtu.be/AjQNHmsz-KA
改めて、強化学習 (RL)とは • 一般的な強化学習のフロー Epic Gamesの発表スライドから
Learning Agentsの強化学習フロー概要図 Manager (Actor Component) Interactor Specify Observation Policy Run Inference Gather Observation Specify Actions Perform Actions PPO Trainer PPO : Proximal Policy Optimization Run Training Training Environment Gather Rewards Gather Completions Reset Episode Epic Gamesの発表スライドを参考に加筆 アプリ固有のロジック実装
学習環境 • コースに学習用のスプライン(ガイド)を設置
学習環境 • Agent(車)を配置 • 学習効率を上げるためにAgentは32台(31 + 1(プレイ時にSpawn )) • 学習効率を上げるために各AgentはランダムにSpawnするので キレイに置く必要はなし
アプリ固有の観測データ(Observation)を定義 • 任意に定義可能で本チュートリアルだと • コースのスプラインに対する、車の相対位置と相対方向 • 車の速度
定義した観測データをデバッグ表示 • 定義した観測データはVisual Logger(UE標準機能)で確認可能
チュートリアルのサンプルプログラムの注意事項 • 学習時はPython(PyTorch)を利用するけど 推論時はPythonを利用しないから、パッケージをそのまま 展開できる利点を強調しておきながらそうなっていない。。。 推論時は右側の処理はいらないので 分岐してあげるとPythonが起動せずに動作
学習 • 学習開始直後 https://youtu.be/YgHAyjGxinY
学習 • 学習開始から2時間弱経過 https://youtu.be/sEBdgnLBpRw
学習結果の管理(保存、読込) • Data Asset (Learning Agents Neural Network)として管理 • 前の学習結果から再開することも可能(フラグで制御) (保存) Falseで前の学習結果から学習再開 (読込)
学習結果の柔軟性 • コースのスプラインに対するローカル座標で学習しているので ワールド座標で位置や回転が変わっても同じコースならそのまま動く
ヘッドレス学習 • 強化学習をさらに効率的に学習するためのヘッドレス学習にも対応 • CIとの連携などにも便利 https://youtu.be/T-eMXCtRQtQ
ヘッドレス学習 • チュートリアル内だとパッケージを作るとなっているが スタンドアローン起動からも可能 ヘッドレスを実現するオプション(標準であるもの)
ヘッドレス学習結果の管理(保存、読込) • エディタ外で処理する都合で学習結果はバイナリとして保存 • 推論時はバイナリを読込む (保存) (読込)
TensorBoard • 学習はPython(PyTorch)で動いているので、TensorBoardが利用可能
模倣学習 • チュートリアル内のフローだと • プログラム or プレイヤーで車の操作を記録(右下のData Asset) • 記録した内容を元に模倣学習 • 模倣学習した結果を元に強化学習 • 模倣学習の目的 • 学習時間の短縮 • 人間らしい挙動の学習 • 複雑な環境での学習 • しかし、期待通り?に動作せず?。。。 車の操作を記録したData Asset
模倣学習(Epic Gamesの発表スライドから) • 雰囲気
模倣学習(Epic Gamesの発表スライドから) • Transformerモデル!?
Learning Agentsのまとめ • UEの開発経験がある人には導入しやすい強化学習のフレームワーク • アプリ固有のロジックが追加しやすい(拡張性がある) • 学習構造 : Observation, Action, Reward, etc.(BP or C++) • 学習モデル(Python)
NNE (Neural Network Engine)
NNE (Neural Network Engine)とは • Epic標準のニューラルネットワーク関連のプラグイン • さまざまなニューラルネットワークランタイムにアクセスし、ランタイム固 有のコーディングを必要とせずに、ニューラルネットワークを評価するため の共通APIを提供します。(公式の説明原文ママ) • 5.5だとExperimental • Learning Agentsも実は利用している • 有志の方の神スライドがわかりやすい Learning Agentsも利用している
ポスプロでの利用 • .onnxファイルをインポートして、ポスプロのマテリアルで参照可能 .onnxをインポート anime_style_512x512.onnxを適用後
ポスプロでの利用 • ポスプロなのでシーンカラーとブレンドが可能
処理負荷は? • かなり厳しいけど、一応リアルタイムで処理はできている
MNISTでの利用 • mnist-12.onnxを利用して、NNEでMNISTを実行(Pythonは未使用) https://youtu.be/Uo0r9ORsucU 参考: ・historia-Inc/NNI_Sample ・UE5.4 での NNE Runtime - ほげたつブログ
ONNXファイルの確認ツール(Netron) • 実装で.onnxファイルの中身を確認するのに便利でした
NNEのまとめ • モデル(.onnx)をUEで低開発コストで実行できるフレームワーク • Learning Agentsが参照していることからも、 今後の各ニューラルネットワーク機能のコア機能になる?
おわり