061、TensorFlow Lite Micro的Multi-model Pipeline项目:多模型流水线
061 TensorFlow Lite Micro的Multi-model Pipeline项目:多模型流水线
昨晚调试一块STM32U5板子到凌晨三点,问题出在一个看似简单的多模型切换上——两个模型分别做关键词识别和手势分类,单独跑都正常,一组合就随机死机。最后发现是模型A的中间张量缓冲区被模型B的推理过程覆盖了。这种“模型打架”的问题,在TinyML多模型场景里太常见了。
为什么需要多模型流水线
单模型能解决的问题有限。一个智能穿戴设备可能需要:先做语音活动检测(VAD)过滤静音段,再做关键词识别(KWS)唤醒,最后做情感分析。或者一个工业传感器:先做FFT预处理,再做异常检测,最后做分类。每个阶段用不同的模型,串成一条流水线。
TensorFlow Lite Micro的Interpreter设计上就是单例模式——一个解释器实例绑定一个模型。多模型意味着多个Interpreter实例,但共享同一块内存池。这就是问题的根源。
内存池的“共享陷阱”
TFLite Micro的内存管理基于预分配的Tensor Arena。每个Interpreter创建时都会从这块arena里分配自己的张量缓冲区。默认情况下,多个Interpreter会各自独立分配,互不知晓对方的存在。
// 错误示范:两个模型各自分配,互不感知