2. TinyML基础

TinyML是机器学习与嵌入式系统交叉领域中最具工程落地价值的方向之一。其核心目标是在功耗受限、计算资源有限、内存容量极小的微控制器(MCU)或低功耗边缘处理器上,部署和运行经过压缩、量化、剪枝后的深度学习模型,实现端侧实时推理。与云端AI不同,TinyML强调极低的延迟(毫秒级响应)、极低的功耗(毫安甚至微安级)、离线运行以及数据隐私保护。在HIL(硬件在环)测试场景中,TinyML模型的推理延迟与功耗是衡量系统实时性和续航能力的关键指标,直接决定了整个嵌入式系统是否满足设计要求。

TinyML 技术栈与HIL测试关注点 数据采集层 传感器/ADC/IMU 音频/图像/振动 模型训练层 TensorFlow/Keras PyTorch → ONNX 模型优化层 量化/剪枝/蒸馏 TFLite转换 部署推理层 TFLite Micro CMSIS-NN/专用NPU 硬件平台层(MCU / NPU / SoC) ARM Cortex-M0/M4/M7 RISC-V 低功耗内核 NPU加速器(如Ethos-U55) DSP/硬件乘加单元 Flash: 256KB~2MB RAM: 64KB~512KB 时钟: 48MHz~400MHz 功耗: 1mW~100mW HIL测试关注点(本章课程核心) 推理延迟测量(us/ms级) 功耗曲线采集(mA/μA级) 实时性/确定性验证 资源占用分析

上图展示了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)进行了编译优化。

框架选型建议:如果项目使用ARM Cortex-M系列MCU,强烈建议使用TFLM + CMSIS-NN的组合。TFLM负责模型解析和调度,CMSIS-NN提供底层算子加速。如果使用RISC-V内核,则需要考虑TFLM + 自研优化库或使用其他框架(如NNoM)。

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可能发热,需要测试长时间运行的热稳定性。
硬件选型常见误区:不要盲目追求高算力NPU。对于大多数TinyML应用,模型经过量化后算力需求通常在几十到几百GOPS之间。选择算力过高的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格式。

部署过程:

  1. 使用TensorFlow训练模型,导出为TFLite格式,进行int8量化。
  2. 使用TFLM转换工具生成C++数组,集成到STM32工程中。
  3. 启用CMSIS-NN加速,编译时添加-DARM_MATH_DSP和-DARM_MATH_CM4宏定义。
  4. 配置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测试实践中,以下误区需要特别注意:

误区一:忽视数据预处理开销。很多开发者只优化模型推理时间,却忽略了数据采集、滤波、归一化等预处理环节。在STM32L4上,一次完整的FFT变换可能需要5~10ms,这部分时间同样计入延迟预算。
误区二:量化精度损失评估不足。int8量化虽然能显著提升推理速度,但可能导致模型精度下降。在HIL测试中,需要使用真实传感器数据验证量化后模型的准确率,不能仅依赖训练集评估。
误区三:功耗测试方法不当。使用万用表测量平均电流无法捕捉瞬时功耗尖峰。建议使用高采样率的功耗分析仪(如Joulescope、Nordic Power Profiler Kit),采样率至少1kHz,才能准确捕捉推理期间的功耗波形。
误区四:忽略中断对实时性的影响。推理过程中如果频繁触发中断,会导致推理时间抖动。HIL测试时应模拟真实中断负载,验证最坏情况下的延迟是否满足要求。