Unity Sentis で AI モデルを活用した次世代機能を作成する

Unity Sentis は、開発者がゲームやアプリケーションに AI モデルを統合できるようにするために開発されました。現在プレリリースのオープンベータ版として公開中の Sentis は、あらゆる種類のプロジェクトにおける、物体認識、音声認識、スマート NPC などの複雑な機能の実装を可能にします。
ONNX ファイル形式でインポートされた AI モデルは、Unity がサポートするすべてのプラットフォームで直接実行することができます。つまり、クラウドインフラストラクチャを必要とせず、直接ユーザーデバイス上の Unity ランタイムで、大半の AI モデルを実行できます。
Unity Sentis パッケージのドキュメントはこちらでご確認ください。また、パッケージは Package Manager 経由でダウンロードできます。パッケージがプロジェクトにインストールされ、目的の AI モデルが使用できるようになれば、統合は至ってシンプルです。
最終的に、プロジェクトで使用するモデルは開発者の裁量に任されます。各モデルは、解決したいタスクに依存します。最初は、マーケットプレイスで、HuggingFace、Keras、PyTorch などの興味を引くモデルをチェックしてみるといいかもしれません。また、機械学習に携わった経験があれば、自身でモデルを訓練したり、強化学習のニーズに対して Unity ML-Agents を用いたりすることもできます。主な要件は、モデルを ONNX ファイル形式に変換する必要があることです。必要に応じて、TF2ONNX などの ONNX コンバーターを使用できます。
Sentis ドキュメントの Import a model でコードサンプルを参照してください。
モデルを Unity に読み込むには、他のアセットを読み込む際と同じプロセスに従う必要があります。エディター内の Project ウィンドウの Assets フォルダーにドラッグアンドドロップするだけです。Sentis はインポートされたモデルを自動的に最適化します。次に、ランタイム Model オブジェクトを作成します。
Sentis ドキュメントの Load a model でコードサンプルを参照してください。
入力の作成は至ってシンプルで、ONNX Model Import Settings から、必要なモデル入力の形状とサイズを確認します。次に、データソースからテンソルを作成します。複数の入力が必要な場合は、1 つの辞書にすべてを格納してください。
Sentis ドキュメントの Create input for a model でコードサンプルを参照してください。
モデルを実行する準備ができたら、ユーザーのデバイス(CPU または GPU)上でモデルを実行可能なタスクに分割するワーカーを作成する必要があります。ワーカーの作成は、このコード例を用いて実現できます。
ワーカーのセットアップが完了したら、いよいよ AI モデルを実行します。ここで、モデルの入力と出力をゲームコードに統合し、プロファイラーを用いてバジェット内に収まっているかを確認します。バジェットがかかりすぎている場合は、モデルを多くのフレームにわたって「スライス」したり、Sentis で提供されている他のパフォーマンス調整オプションを検討したりできます。
モデルの実行、出力の取得、出力の最適化の方法については、Sentis ドキュメントの Run a model を参照してください。
最後のステップは、ゲームのテストとデプロイです。他の Unity Runtime プラットフォームでの通常のプロセスと同じように行います。ゲームのバイナリ内にモデルを含めるには、いくつかのオプションがあります。ビルドに埋め込んだり、ストリーミングアセットとして実行し、必要に応じてダウンロードしたりすることができます。また、セキュリティ上の理由によるモデルの暗号化を検討することも可能です。
Sentis ドキュメントの Encrypt a model でコードサンプルを参照してください。
この初心者向けサンプルでは、施錠された部屋の扉の鍵を開けるというタスクを物体検出モデルの実行により実装した例を通して、ニューラルネットワークを用いた Sentis の基本的な使用方法を紹介しています。手書きの数字を検出する MNIST という AI モデルを実行しています。このモデルは、手書きの数字を読み取り、最もそれらしいと思われる数字を特定します。
このサンプルでは、Sentis を使用して、難易度を設定できる、オセロというボードゲームの対戦ボットを実装しています。ゲームのルールに基づいて訓練されたニューラルネットワークを実行し、各ターン後のゲームの勝率を決定し、最も勝利する可能性が高い手を予測します。複雑なヒューリスティックと探索木を用いた従来のアプローチよりもシンプルな解決策です。
このサンプルでは、Sentis を拡張現実(AR)体験に統合する方法を紹介しています。深度推定ニューラルネットワークを使って、現実世界の物体がゲームシーンの物体を覆い隠せるようにしています。深度はカメラからの動画フレームを処理することで決定されるため、高価なスマートフォンにしか搭載されていない LiDAR センサーを使う従来のアプローチよりもスケーラブルなソリューションです。
カメラ付きのモバイルデバイスで動作し、LiDAR センサーは必要ありません。
AI モデルは、これまでのコードでは開発が不可能だったり、非常に時間がかかったりするような、魅力的な機能を実装するのに役立ちます。ユースケースは、AI モデルのすべてのカテゴリにわたり、導入を選択したモデルによりアプリケーションで実現できることが異なります。ただし、Sentis が提供できる開発プロセスのサポート例をいくつか紹介しておきます。
開発者が Unity を選ぶ大きな理由の 1 つは、複数のプラットフォームでの公開をより簡単に行えることですが、それでも最適化は課題になり得ます。TensorFlow の Super Resolution のようなアップスケーリングモデルを使うことで、ゲーム内の低解像度の画像やテクスチャをアップスケールして実制作で使用可能なレベルにしたり、各デバイスの必要に応じてアセットを最適化したりすることができます。
プレイヤーインタラクションは、相手が NPC または他のプレイヤーであるかどうかを問わず、オンラインでつながるゲームにおける鍵となります。OpenAI の Whisper のような音声文字変換モデルを使えば、リアルタイムの音声をゲーム内テキストに変換できます。また、AI モデルを導入してダイアログを自動化し、手動コーディングの制限を受けずに、プレイヤーと NPC 間の有意義なインタラクションを生成することもできます。
AI では、斬新な機能の開発に重点が置かれがちですが、ゲームパフォーマンスの向上においても、素晴らしい応用例があります。その一例として、アップスケールを行う GAN AI モデルを用いて、ゲームシーンのプリレンダリングされたフレームを再現し、モバイルでのレイトレーシングを改善する AI モデルの使用が挙げられます。このようなアプリケーションがあれば、ユーザーデバイスのパフォーマンスに大きな影響を与えることなく、小規模なプロジェクトで光の屈折やコースティックスエリアライトのようなパストレーシング機能を実装することができます。
拡張現実(AR)や仮想現実(VR)もまた、Sentis で AI モデルを使用する際の良いユースケースとなり得ます。例えば、Ultralytics の YOLO モデルを VR で使用してゲームシーンの物体を検出したり、AR で使用してデバイスのカメラフィードから現実世界の物体を検出したりすることができます。これは、AI でしか実現できない超視力的な感覚をユーザーに提供できます。
Unity Sentis は現在、Unity 2021.3 以降を使用しているすべての Unity 開発者を対象に、Package Manager 経由でオープンベータ版として無料で提供されています。
