7.9. TensorFlow Lite for Microcontrollers¶
TFLM 是大多数摄像头用来执行已加载模型的运行时。它解析 .tflite 文件——一个由算子、权重和张量形状组成的 FlatBuffer——并按顺序遍历算子列表,把每个算子分派给一个内核,由内核产生下一个中间张量。
中间张量驻留在加载时分配的固定大小 张量竞技场(tensor arena) 中。摄像头分两遍确定竞技场的大小:首先,针对最大可用堆构建一个一次性使用的解释器,使模型能够报告它所需的工作内存;随后以恰好该大小加上一小段余量分配持久化解释器。模型越小,留给脚本其余部分的堆空间就越多。
TFLM 是 H7、RT1062 和 AE3 上的引擎。
7.9.1. 算子解析器¶
TFLM 并不附带所有内核。摄像头链接进一个 解析器(resolver),列出它能够执行的算子;针对该解析器加载的模型如果包含列表之外的算子,就会在加载时失败。随固件发布的构建注册了视觉和信号处理网络中常见的算子——卷积层和全连接层、池化层和激活层、reshape 和 concat 算子、quantize 和 dequantize 算子——因此基于某个标准架构(YOLO、MediaPipe、MobileNet)训练的模型无需扩展列表即可加载。
AE3 构建额外注册了 Ethos-U 算子。一个由 Vela 编译的模型在其他方面就是一个普通的 .tflite,TFLM 会照常遍历它;被 Vela 标记的子图会命中 Ethos-U 算子并分派给 NPU。