関連ブログ
- [UE5] 元の位置に戻るカメラの実装 2024.12.18UE
- [UE5]難易度変更に対応したシューティングゲームを作ってみよう 2024.12.11UE
- [UE5] インタラクト可能なモノの量産に役立つBPを作ってみよう 2024.12.04UE
CATEGORY
2022.10.12UE5UE/ C++UE/ Plugin
執筆バージョン: Unreal Engine 5.0 |
UE5から追加された機械学習モデルの推論用プラグインのNeural Network Inferenceについて紹介します。
このプラグインを使用すると簡単にONNX形式の機械学習モデルの読み込み、推論を行うことが可能になります。
免責事項
NNIプラグインは現在Beta版なので今後大幅な変更が行われる可能性があります。
機械学習モデルとはなにか説明するとこういうものらしいです。
機械学習モデルとは、特定の種類のパターンを認識するようにトレーニングされたファイルのことです。 モデルのトレーニングは、データのセットに対して行います。その際モデルには、それらのデータについて推論し、データから学習するために使用できるアルゴリズムを提供します。
機械学習モデルとは - Microsoft Docs
画像処理や自然言語処理、音声処理などいろいろな分野があるので、あまり詳しくない人に一言で説明するのは難しいですが、いわゆるディープラーニングってやつです。
最近は絵を描くAIが話題ですね。そういうやつです。
AI DungeonのようなAIを駆使した画期的なゲームをきれいなグラフィックで作りたいと思いませんか?
Unreal Engineというのを使えば簡単にきれいなグラフィックのゲームが作れるらしいので、UEを使って機械学習モデルを動かしてみましょう。
UEで機械学習モデルを動かすには以下のような方法が考えられます。
実装の難易度は以下のようになると考えます。
WebAPI経由 <= サードパーティ製のプラグイン < NNI < C++版ライブラリ
WebAPI経由が最も楽に実装することが出来ると思います。
APIを提供する側がPythonで実装出来るのでデータの処理が圧倒的に楽になります。ただ、リアルタイムでの処理が難しいという欠点もあります。
以前作成した記事のような推論に時間がかかり、データの処理が複雑なものはこの実装が向いていると考えています。
サードパーティ製のプラグインは調べると色々出てきます。
実際に使用したことがないので詳しいことはわかりませんが、目的に沿っているものがあればそのまま使用できそうですね。
https://www.unrealengine.com/marketplace/ja/product/nnengine-neural-network-engine
https://github.com/AntiAnti/SimplePyTorch
そしてUE5から標準で追加されたNeural Network Inferenceですが、立ち位置的にはサードパーティ製のプラグインとC++版ライブラリの中間に位置すると思います。
C++版ライブラリを利用する場合と比べて依存関係を気にせず利用できるところが利点だと思います。
NNIとはUE5から追加された機械学習モデルの推論用プラグインです。標準でUE5に組み込まれています。
現時点ではWindows、Linux、Mac、PS5、Xbox Series XでのCPU推論、Windows DirectX 12でのGPU推論がサポートされています。
使用する際は基本的にC++が必須で、入力データの前処理や後処理なども自前で実装する必要があります。
使い方についてはmicrosoftのサンプルプロジェクトが非常に参考になります。
https://github.com/microsoft/OnnxRuntime-UnrealEngine
また、使い方などは書かれていませんが公式のドキュメントも用意されています。
今回はmicrosoftのサンプルを参考に実際に簡単なモデルを動かしてみました。
実装の詳細については解説しませんが、サンプルプロジェクトを公開しているので興味がある方はそちらをご参照ください。
はじめに手書き数字認識のモデルを動かしてみました。
モデルはMNIST手書き数字認識モデルを使用しました。
https://github.com/onnx/models/tree/main/vision/classification/mnist
書いた数字が認識されているのがわかると思います。これをアルゴリズムベースで実装しようとするとかなり大変です。
これだけだと地味なので、次はもう少しグラフィカルなものを動かしてみることにしました。
次に物体検出モデルをCity Sampleで動かしてみましたが、実用性は皆無ですね。
モデルはYOLOv7を使用しました。
https://github.com/ibaiGorordo/ONNX-YOLOv7-Object-Detection
NNIを使用すると簡単に機械学習モデルをゲームに組み込むことが出来るようになります。
今回は比較的簡単に実装できる画像処理系のモデルしか扱いませんでしたが、自然言語処理や音声処理のモデルも実装してみたいですね。