Tensorflow LiteをUnityで動かす

前回のBarracudaに続きTensorflow LiteをUnityで動かしてみました。

Unity上で学習するのはML-Agentで十分で。私の用途では、軽量、複数のプラットフォーム(iOS, Android, macOS, Windows)で動作可能なUnityのプラグインが必要でした。Tensorflow Liteはコア部分はシンプルなC言語APIで用途にあっていそうです。

Tensorflow Lite サイトより引用

Tensorflowリポジトリの奥深くに、Unity Pluginが隠されています。 tensorflow/tensorflow/lite/experimental/examples/unity/TensorFlowLitePlugin at master · tensorflow/tensorflow · GitHub

macOS, iOSで動作確認をしてみました。 以下、MNISTとSSDの動作サンプルです。

Barracudaとは別のMNISTモデルをつかったので、純粋な比較ではないのですが、Barracudaよりも高速でした。

GitHubリポジトリはこちら。 GitHub - asus4/tf-lite-unity-sample

Tensorflow Lite のUnity プラグインは非常にシンプルで。*.tfliteモデルのInputs/Outputsの型を確認するAPIがないのですが、NetronというElectron製アプリでいろいろなモデルを読み込み確認できて便利でした。

f:id:asus4:20191118183116p:plain
netron

github.com

またTensorflow LiteにはGPUデリゲートという機能があり、iOSはMetal, AndroidOpenGL ES 3.1 で計算することができます。macOSでもMetalで行けるはずなのですが、ソースコード中にUIKitに依存する場所があり、ちょっと手直し中です。できたらお知らせします。

WindowsGPU Delegate対応Unity Pluginはt-takasakaさんが作っていました。

github.com

追記

その後、macOSでもGPU Delegate動かすことに成功しました。

Add Build Setting TFLite Metal Delegate for macOS bundle · asus4/tensorflow@d0b45bd · GitHub