前回のBarracudaに続きTensorflow LiteをUnityで動かしてみました。
Unity上で学習するのはML-Agentで十分で。私の用途では、軽量、複数のプラットフォーム(iOS, Android, macOS, Windows)で動作可能なUnityのプラグインが必要でした。Tensorflow Liteはコア部分はシンプルなC言語のAPIで用途にあっていそうです。
Tensorflowリポジトリの奥深くに、Unity Pluginが隠されています。 tensorflow/tensorflow/lite/experimental/examples/unity/TensorFlowLitePlugin at master · tensorflow/tensorflow · GitHub
macOS, iOSで動作確認をしてみました。 以下、MNISTとSSDの動作サンプルです。
Tensowflow Lite SSD CPU worked on Unity #madewithunity pic.twitter.com/sJ98lWvXV3
— Koki Ibukuro (@asus4) November 15, 2019
Barracudaとは別のMNISTモデルをつかったので、純粋な比較ではないのですが、Barracudaよりも高速でした。
GitHubのリポジトリはこちら。 GitHub - asus4/tf-lite-unity-sample
Tensorflow Lite のUnity プラグインは非常にシンプルで。*.tfliteモデルのInputs/Outputsの型を確認するAPIがないのですが、NetronというElectron製アプリでいろいろなモデルを読み込み確認できて便利でした。
またTensorflow LiteにはGPUデリゲートという機能があり、iOSはMetal, AndroidはOpenGL ES 3.1 で計算することができます。macOSでもMetalで行けるはずなのですが、ソースコード中にUIKitに依存する場所があり、ちょっと手直し中です。できたらお知らせします。
WindowsのGPU Delegate対応Unity Pluginはt-takasakaさんが作っていました。
追記
その後、macOSでもGPU Delegate動かすことに成功しました。
Add Build Setting TFLite Metal Delegate for macOS bundle · asus4/tensorflow@d0b45bd · GitHub