2. TinyML基础
TinyML是机器学习与嵌入式系统交叉领域中最具工程落地价值的方向之一。其核心目标是在功耗受限、计算资源有限、内存容量极小的微控制器(MCU)或低功耗边缘处理器上,部署和运行经过压缩、量化、剪枝后的深度学习模型,实现端侧实时推理。与云端AI不同,TinyML强调极低的延迟(毫秒级响应)、极低的功耗(毫安甚至微安级)、离线运行以及数据隐私保护。在HIL(硬件在环)测试场景中,TinyML模型的推理延迟与功耗是衡量系统实时性和续航能力的关键指标,直接决定了整个嵌入式系统是否满足设计要求。
上图展示了TinyML从数据采集到HIL测试的完整技术链路。在实际工程中,HIL测试需要同时关注模型推理延迟、系统功耗、内存占用以及实时性等多个维度。下面从定义、场景、框架、硬件四个维度展开详细讲解。
2.1 TinyML定义与核心约束
TinyML并非一个严格的学术定义,而是工业界对“在极低功耗设备上运行机器学习模型”这一工程实践的统称。其典型特征包括:模型参数量通常在几十KB到几MB之间,运算量在几M到几十M MACs(乘加运算)范围内,运行设备的内存小于1MB,功耗预算在毫瓦级。与边缘计算(Edge AI)相比,TinyML更强调极致的资源受限环境,通常运行在电池供电或能量采集的设备上。
- 内存约束:Flash存储通常为256KB~2MB,RAM为64KB~512KB,模型和中间计算结果必须严格适配。
- 算力约束:MCU主频一般在48MHz~400MHz之间,缺乏GPU或大算力NPU支持,需依赖硬件加速指令(如CMSIS-DSP、SIMD)。
- 功耗约束:待机功耗需低于10μA,活跃推理功耗需控制在1mW~50mW范围内,否则电池寿命无法保证。
- 实时性约束:推理延迟通常要求小于100ms,部分工业控制场景甚至要求小于10ms。
理解这些约束是进行HIL测试的前提。例如,在测试推理延迟时,不能仅关注模型本身的运算时间,还需考虑数据采集、预处理、特征提取以及后处理等环节的耗时。同样,功耗测试需要区分待机功耗、活跃推理功耗和通信功耗,不同状态下的功耗差异可能达到几个数量级。
2.2 典型应用场景与HIL测试切入点
TinyML的应用场景广泛分布在工业预测性维护、可穿戴设备、智能家居、农业物联网、医疗健康监测等领域。每个场景对延迟和功耗的要求差异显著,HIL测试策略也随之不同。
| 应用场景 | 典型任务 | 延迟要求 | 功耗预算 | HIL测试重点 |
|---|---|---|---|---|
| 工业电机振动监测 | 异常分类(正常/轴承故障/不平衡) | <50ms | <30mW | 连续推理稳定性、长时间功耗漂移 |
| 可穿戴健康手环 | 心率异常检测、步态识别 | <200ms | <5mW | 待机功耗、事件触发功耗、电池寿命估算 |
| 智能语音唤醒 | 关键词识别(KWS) | <100ms | <10mW | 唤醒延迟、误唤醒率、连续监听功耗 |
| 农业土壤监测 | 土壤湿度/养分分类 | <1s | <1mW(平均) | 低占空比模式下的功耗、唤醒时间 |
在HIL测试中,需要根据具体场景设计测试用例。例如,对于工业振动监测,需要模拟不同转速、不同负载下的振动信号,验证模型在连续运行时的延迟抖动和功耗变化;对于语音唤醒,则需要模拟不同信噪比的环境噪声,测试模型在复杂声学环境下的响应时间和功耗。
2.3 主流框架:TensorFlow Lite Micro与CMSIS-NN
目前TinyML领域最主流的推理框架是TensorFlow Lite Micro(TFLM)和CMSIS-NN。两者定位不同:TFLM是一个完整的推理引擎,负责模型解析、算子调度和内存管理;CMSIS-NN则是ARM公司提供的针对Cortex-M系列内核优化的神经网络内核函数库,通常作为TFLM的底层加速后端。
2.3.1 TensorFlow Lite Micro框架
TFLM是TensorFlow Lite的微控制器版本,专为内存受限的MCU设计。其核心特点包括:
- 极小的运行时:基础解释器仅需约16KB的Flash和几KB的RAM。
- 静态内存分配:模型推理前完成内存规划,避免动态内存分配带来的不确定性。
- 算子精简:支持约80个常用算子,覆盖卷积、全连接、池化、激活函数等。
- 量化支持:原生支持int8和uint8量化模型,在8位MCU上实现高效推理。
在HIL测试中,TFLM的静态内存分配特性使得内存占用可预测,便于进行资源上限验证。但需要注意,TFLM的算子实现默认是C++可移植版本,性能可能不如CMSIS-NN优化后的版本。因此,在实际部署时通常会将TFLM与CMSIS-NN结合使用。
2.3.2 CMSIS-NN优化库
CMSIS-NN是ARM官方提供的神经网络优化库,针对Cortex-M3/M4/M7/M33等内核进行了深度优化。其核心优化手段包括:
- SIMD指令利用:使用ARM的SIMD(单指令多数据)指令集并行处理多个数据。
- 数据重排:将输入特征图重排为更适合硬件流水线处理的格式。
- 定点运算优化:使用16位或8位定点运算替代浮点运算,减少计算周期。
- 内存访问优化:减少Cache miss,提高数据局部性。
根据ARM官方数据,CMSIS-NN相比纯C++实现的TFLM算子,推理速度可提升4~6倍。在HIL测试中,如果发现推理延迟超标,优先检查是否启用了CMSIS-NN加速,以及是否针对具体内核(如Cortex-M7)进行了编译优化。
2.4 硬件平台:MCU与NPU的选型与测试考量
TinyML的硬件平台选择直接影响推理延迟和功耗表现。当前主流平台分为三类:低功耗MCU、集成NPU的MCU、以及MCU+外部NPU的组合方案。
2.4.1 低功耗MCU平台
典型代表:STM32L4系列、STM32U5系列、NXP i.MX RT系列、Nordic nRF52/nRF53系列。这些MCU通常采用ARM Cortex-M4或M33内核,主频在64MHz~240MHz之间,内置Flash 256KB~2MB,RAM 64KB~512KB。其优势在于生态成熟、外设丰富、开发工具链完善,适合大多数TinyML应用。
在HIL测试中,这类平台需要重点关注:
- CPU负载率:推理期间CPU占用率是否过高,是否影响其他实时任务。
- 中断延迟:推理过程中是否屏蔽了关键中断,导致系统响应超时。
- 功耗模式切换:推理完成后能否快速进入低功耗模式,唤醒时间是否满足要求。
2.4.2 集成NPU的MCU平台
典型代表:STM32N6系列(集成Neural-ART加速器)、NXP i.MX 8M Plus(集成Ethos-U65)、瑞萨RA8系列(集成Helium技术)。这类平台在MCU内部集成了专用的神经网络加速单元,能够显著提升卷积运算效率,降低CPU负载。
例如,STM32N6内置的Neural-ART NPU可提供高达600 GOPS的算力,同时功耗控制在毫瓦级。在HIL测试中,NPU平台的测试重点与纯MCU平台有所不同:
- NPU利用率:监控NPU的忙碌/空闲状态,确保模型推理充分利用NPU算力。
- 数据搬运开销:CPU与NPU之间的数据交互可能成为瓶颈,需要测量DMA传输时间。
- 混合部署:部分算子运行在NPU上,部分算子回退到CPU,需要测试混合调度的延迟。
2.4.3 MCU+外部NPU组合方案
当模型复杂度超出MCU内置NPU的能力时,可采用MCU+外部NPU芯片的组合方案。例如,使用STM32H7系列MCU搭配Hailo-8或Kneron KL720等外部NPU。这种方案的优势是算力弹性大,但会增加PCB面积、功耗和成本。
在HIL测试中,这种组合方案需要额外关注:
- 通信接口延迟:MCU与NPU之间通常通过SPI或并行接口通信,接口速率直接影响整体延迟。
- 功耗叠加:MCU功耗与NPU功耗需要分别测量,并评估总功耗是否在预算范围内。
- 热管理:高负载推理时NPU可能发热,需要测试长时间运行的热稳定性。
2.5 案例拆解:基于STM32L4的电机振动监测TinyML部署与HIL测试
下面通过一个完整的案例,展示TinyML从模型部署到HIL测试的闭环流程。
项目背景:某工业设备制造商需要在电机轴承上部署振动异常检测系统,要求实时监测轴承状态,检测到异常时在100ms内发出报警信号。设备采用电池供电,要求平均功耗低于20mW,电池寿命至少6个月。
硬件选型:选用STM32L476RG(Cortex-M4F,80MHz,1MB Flash,128KB RAM),外接ADXL345三轴加速度计(I2C接口,采样率3200Hz)。
模型设计:使用1D卷积神经网络,输入为256个采样点(约80ms数据),包含3层Conv1D(每层16个滤波器,核大小3)和1层全连接层(3类输出:正常/轴承故障/不平衡)。模型参数量约12KB,量化后为int8格式。
部署过程:
- 使用TensorFlow训练模型,导出为TFLite格式,进行int8量化。
- 使用TFLM转换工具生成C++数组,集成到STM32工程中。
- 启用CMSIS-NN加速,编译时添加
-DARM_MATH_DSP和-DARM_MATH_CM4宏定义。 - 配置ADC或I2C DMA采集振动数据,使用双缓冲机制避免数据丢失。
HIL测试过程:
使用STM32L476 Discovery开发板,配合IAR Embedded Workbench的功耗测量工具和逻辑分析仪进行测试。
| 测试项 | 测试方法 | 测量结果 | 是否达标 |
|---|---|---|---|
| 单次推理延迟 | GPIO翻转法,测量推理函数执行时间 | 38ms(含数据预处理) | 是(<100ms) |
| 平均功耗 | 使用Joulescope功耗分析仪,连续运行1小时 | 18.5mW(含传感器采样) | 是(<20mW) |
| 待机功耗 | 进入STOP2模式,测量静态电流 | 3.2μA | 是(<10μA) |
| 延迟抖动 | 连续运行1000次推理,统计延迟标准差 | 标准差2.1ms | 可接受 |
测试中发现的问题与优化:
初次测试时,推理延迟达到62ms,超出预期。通过分析发现,CMSIS-NN未正确启用,算子回退到了C++实现。在编译选项中添加-DARM_MATH_CM4并链接CMSIS-DSP库后,延迟降至38ms。此外,数据采集使用阻塞式I2C读取,导致CPU空转等待,改为DMA方式后,CPU利用率从85%降至45%,为其他实时任务留出了余量。
复盘经验:
- HIL测试必须覆盖“数据采集→预处理→推理→后处理→输出”全链路,不能只测推理函数本身。
- 功耗测试需要区分不同工作状态,待机功耗和活跃功耗的优化策略完全不同。
- CMSIS-NN的启用需要同时满足编译宏定义、链接库和内核匹配三个条件,缺一不可。
2.6 常见误区与总结复盘
在TinyML基础学习和HIL测试实践中,以下误区需要特别注意: