見出し画像

AIライブラリを活用したスピードAI開発!〜Unity Barracuda〜

アタリのエンジニアは日々業務と並行しながら、常に新しい技術に触れてその可能性を模索しています。今回はUnity Barracuda(ユニティーバラクーダ)について、デモの作成・概要・その有用性をまとめました。

ところでBarracudaという名称は日本名でオニカマスという獰猛な魚の名前のようですが、この魚はある魚雷の名前の由来でもあるそう。Unityにおいて魚雷のような、ブレイクスルーを起こす期待がこもっているのでしょうか?

画像1

フォーマットの共通化により、スピーディーなAI実装が可能に!

これまでAIの開発は、学習時間などでコストがかかりとても大変でした。

また、AIを開発するにはPyTorchやTensorflowなどのフレームワークを使う事が一般的ですが、各フレームワークで実装された学習済みModelデータなどのフォーマットは統一されていないため、目的のModelデータを利用するためにバージョン合わせやフレームワーク変更、移植などがそれぞれに必要でした。

そこへONNXという学習Modelのフォーマット違いを吸収する仕組みが考案され、ONNXを通してAIを一元的に扱えるようになりました。このONNXフォーマットがUnityBarracudaでも採用されています。


Unity Barracudaは現時点でまだONNXに完全対応ではありませんが、AIフォーマットの違いなどの煩わしさから悩まされることなく、これまでより格段にスピーディーなAI実装ができるようになりました。

Unity Barracudaを検証しよう!

実際にパーソンセグメンテーション・スタイルトランスファー・ボーン検出・物体認識(YOLO)の4つの学習済みAIモデルデータを使ってUnity Barracudaの検証をしてみました。



■パーソンセグメンテーションによる"バーチャルグリーンバック"

iPhoneのARKitにはピープルオクルージョンという人物を検出する技術がありますが、それと近いものを一般的なWebカメラで実現できます。
パーソンセグメンテーションというAIライブラリを利用して、Webカメラから入力された動画から人物を検出し、そのほかのエリアをグリーンのスクリーンに置き換え、バーチャルグリーンバックを実現しています。
ARKitのピープルオクルージョンに比べると少し精度が劣りますが、悪くはなさそうです。この技術はオンラインミーティングツールのバーチャル背景合成・背景ぼかしにも使われているので、目にする機会が増えていますね。

■スタイルトランスファーによる"動画スタイル変換フィルター"

TikTokやInstagramでよく目にする動画フィルターがあります。カラーを重ねているもの・ハートをランダムに発生させているものなどさまざまなものがありますが、このスタイルトランスファーを使うと、インプットするリファレンス画像に近い動画へスタイルを変換してくれます。
この動画左下の正方形画像がリファレンスとなる画像です。最初のスタイルフィルターがかかっていない動画と見比べてみてください。カラーを重ねるタイプと違って線などの雰囲気も変わっているのが分かります。思いも寄らないスタイルになることもあり、AIアートのようでかっこいいです!

■ボーン検出による"モーションキャプチャー"

モーションキャプチャーを行う手法としては光学式やセンサー式などさまざまありますが、専用のスーツや専用の特殊なカメラなどの機材が必要で、準備も大変です。
このボーン検出のAIライブラリを使って、一般的なカメラだけでモーションキャプチャーを実装してみました。動画のとおり、想像以上の精度で検出できているので驚きです。元の動画は背景がごちゃごちゃとしていますが、きれいに人の骨が検出されているのがわかります。ただ今回使用したAIライブラリは商用利用ができないものなので、残念ながら商用プロジェクトに使うことはできなさそうです。

■物体認識(YOLO)による"食べ物判定"

高速な物体認識で有名なYOLOも試してみました。スマホのカメラで撮影すると、動画から物体を認識してその物体が何であるかを判定してくれます。

データセットがあればさまざまな物体の判定が可能ですが、今回は食べ物のデータセットを利用してみました。
ローカライズされたデータセットだったので、寿司などの日本の食べ物も判定できましたが、動画の通り得意なものと不得意なものがありました。なお、餃子は中国読みの"Jiaozi"と出ていました。
色々な食べ物でいっぱい試したくなりますが、気がついたらお腹いっぱいになっちゃいそうです!

Unity Barracudaにどう期待する?

AIをゼロから開発・学習してアプリに実装するには膨大な時間が必要でしたが、ONNXのようなAIライブラリへの共通規格の登場と、Unity Barracudaの登場により、スピーディーにアプリへ実装できる時代になってきました!

具体的な活用ケースを考えてみましょう。

①高度なセンサーを使えない場合
イベントや店舗展示で以下のような課題に直面する時があります。
 ・センサーがうまく検知しづらい野外

 ・センサーの干渉や混線・物理的な距離がとれない
 ・予算的な理由などで高度なものが使えない
このような時に、対応した学習済みのモデルデータがあればソフトウェアで実装ができます。

②誰でも体験できるようにしたい場合

これまで高価なスマホやiPadPro等でないと不可能だったことが、Webカメラや安価なスマホカメラでも体験可能になります。
Unityで作るため、AndroidやiPhone、Windowsなどのマルチプラットフォームにも対応できるのもいいですね。

③精度の向上をしたい場合

高度なセンサーと組み合わせて、AIライブラリで精度の向上を試すこともできます。センサーが苦手な部分にちょうど合うAIライブラリを組み合わせ、よりハイクオリティな精度を出せるかを検証する価値があります。

Unity Barracudaをうまく活用することで、これまで実現できなかった課題もクリアできそうです!
ひとつのアプローチとしていい手段だと思いました。

アタリではUnity Barracudaのほかにも、様々な新しい技術の可能性を模索しています。ぜひお気軽にご相談ください!

用語解説と技術メモ

▼Unity Barracudaとは?

Unity Barracudaは、Unity向けの軽量でクロスプラットフォームのニューラルネットワーク推論(AI)ライブラリです。ディープラーニングのランタイム部分だけをプラグインとしたものです。
https://docs.unity3d.com/Packages/com.unity.barracuda@2.2/manual/index.html

▼AIライブラリの種類について
AIライブラリは、画像分類・オブジェクト検出・姿勢推定・画風変換・文字の変換候補生成・音声認識・手書き文字の認識などさまざまです。
Googleが公開しているTensorFlowのページが参考になります。
https://www.tensorflow.org/lite/examples?hl=ja

▼ONNX(オニキス)とは

AI開発については、PyTorchやTensorFlowなどのフレームワークを使います。それらのフレームワークにおけるバージョン合わせや仕様の差分などを吸収して交換可能にするオープンソース規格がONNXです。
Unity BarracudaはONNXに対応しています。
https://onnx.ai/

▼学習済みモデルデータの入手について

学習済みモデルデータはModelZooと呼ばれるさまざまなサイトで配布されています。
 注意点

 ・ONNXフォーマット以外のモデルデータも含まれている
 ・モデルデータによっては商用利用ができないことがある
 ・Unity Barracudaには未対応の機能が残されているため、学習済みモデルが動作しないことがある(未対応機能などは、Unityドキュメントページで確認可能です)