7.9. TensorFlow Lite for Microcontrollers

TFLM は、読み込まれたモデルを実行するためにほとんどのカメラが使用するランタイムです。.tflite ファイル(演算子、重み、テンソル形状からなる FlatBuffer)を解析し、演算子リストを順番にたどって、各演算子を、次の中間テンソルを生成するカーネルへディスパッチします。

中間テンソルは、読み込み時に確保される固定サイズの テンソルアリーナ(tensor arena) に置かれます。カメラはアリーナのサイズを 2 パスで決定します。まず、最大の空きヒープに対して使い捨てのインタープリタを構築し、モデルが必要とする作業メモリを報告できるようにします。次に、その正確なサイズにわずかなマージンを加えて永続的なインタープリタを確保します。小さなモデルほど、スクリプトの残りの部分のためにより多くのヒープを空けておけます。

TFLM は H7、RT1062、AE3 のエンジンです。

3 つの列が並んでいます。左:H7 と RT1062 は Cortex-M7 上で CMSIS-NN カーネルとともに TFLM を実行します。中央:AE3 は Ethos-U55 NPU を備えた Cortex-M55 上で、CMSIS-NN と Ethos-U 演算子とともに TFLM を実行します。右:N6 は Neural-ART NPU 上で STAI を実行します。

predict() の中央にあるエンジンは、カメラファミリーごとに異なるスタックです。

7.9.1. op リゾルバ

TFLM はすべてのカーネルを同梱しているわけではありません。カメラは、実行できる演算子を列挙した リゾルバ(resolver) をリンクし、リゾルバに対して読み込まれたモデルがそのリストにない演算子を含む場合、読み込み時に失敗します。出荷されるビルドは、ビジョンや信号処理ネットワークでよく使われる演算子(畳み込み層と全結合層、プーリング層と活性化層、reshape と concat の演算子、量子化と逆量子化の演算子)を登録しているため、標準的なアーキテクチャ(YOLO、MediaPipe、MobileNet)のいずれかで学習されたモデルは、リストを拡張せずに読み込めます。

AE3 のビルドはさらに Ethos-U 演算子を登録します。Vela でコンパイルされたモデルはそれ以外は通常の .tflite であり、TFLM はそれを通常どおりたどります。Vela がタグ付けしたサブグラフは Ethos-U 演算子に到達し、NPU へディスパッチされます。