7.9. TensorFlow Lite for Microcontrollers

TFLM 是大多數相機用來執行已載入模型的執行期。它解析 .tflite 檔案——一個由運算子、權重與張量形狀組成的 FlatBuffer——並依序走訪運算子清單,將每個運算子分派給一個核心,由該核心產生下一個中間張量。

中間張量存放於一個在載入時配置的固定大小 tensor arena(張量競技場)中。相機分兩個階段來決定這個競技場的大小:首先,會針對最大可用堆積建立一個用完即丟的直譯器,讓模型能回報它所需的工作記憶體;接著再以該確切大小加上一小段餘裕,配置常駐的直譯器。較小的模型會為指令碼的其餘部分留下更多可用堆積。

TFLM 是 H7、RT1062 與 AE3 上的引擎。

三欄並排。左: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. 運算子解析器

TFLM 並未隨附每一個核心。相機會連結一個 resolver(解析器),列出它能執行的運算子,而針對該解析器載入的模型若包含清單上沒有的運算子,便會在載入時失敗。出貨的建置註冊了視覺與訊號處理網路中常見的運算子——卷積與密集層、池化與激活層、reshape 與 concat 運算子、quantize 與 dequantize 運算子——因此針對標準架構(YOLO、MediaPipe、MobileNet)之一訓練的模型,無需擴充清單即可載入。

AE3 建置額外註冊了 Ethos-U 運算子。Vela 編譯的模型在其他方面就是一個普通的 .tflite,TFLM 會正常走訪它;被 Vela 標記的子圖會命中 Ethos-U 運算子並分派給 NPU