1. 课程导入

TinyML(Tiny Machine Learning)是指在功耗、存储与算力都极其受限的微控制器(MCU)上,直接运行机器学习推理的一类工程实践。它并不是把云端模型简单“缩小”,而是围绕MCU的SRAM、Flash、主频、功耗预算与实时性约束,重新设计数据采集、特征处理、模型结构、量化压缩、算子实现与部署验证的完整链路。理解这一点,是学习本课程的前提:TinyML的核心不是“模型有多深”,而是“在毫瓦级预算内能否稳定完成一次有效推理”。

一、核心原理:TinyML到底“小”在哪里

传统AI推理通常依赖GPU或云端服务器,模型以FP32为主,内存以GB计,功耗以瓦计。TinyML则把推理下沉到MCU端,典型资源边界如下:

  • 算力:主频常见为24MHz~480MHz,无MMU、无操作系统或仅RTOS,缺少大容量缓存。
  • 存储:SRAM常为16KB~512KB,Flash常为128KB~2MB,模型权重与中间张量必须精打细算。
  • 功耗:常由纽扣电池或能量采集供电,平均功耗需控制在毫瓦甚至微瓦级。
  • 实时性:推理必须在毫秒级完成,且不能阻塞采样、控制与通信任务。

因此,TinyML推理系统工程的关键词是“协同”:模型结构要适配MCU算子,量化要匹配指令集,内存布局要匹配SRAM,调度要匹配实时任务。任何单点优化都无法替代系统级权衡。

一句话定义:TinyML是在MCU级资源约束下,以可量化、可部署、可验证为目标,完成“感知—特征—推理—决策”闭环的嵌入式机器学习工程方法。

二、发展背景:为什么现在必须学TinyML

TinyML的兴起由三条曲线交汇推动。第一,物联网设备数量爆发,海量传感器产生连续数据,全部上云既费带宽又费电;第二,MCU厂商在Cortex-M、RISC-V等内核上加入DSP与NPU扩展,使INT8推理成为可能;第三,TensorFlow Lite for Microcontrollers、CMSIS-NN、microTVM等工具链成熟,把“训练—量化—转换—部署”流程标准化。三者叠加,让“在传感器端直接做判断”从实验室走向量产。

典型场景包括:

  • 预测性维护:在电机振动传感器节点上识别异常频谱,仅上传告警而非原始波形。
  • 关键词唤醒:在低功耗麦克风前端检测“唤醒词”,主控平时休眠。
  • 手势与活动识别:在可穿戴IMU上区分步行、跑步、跌倒。
  • 视觉质检:在MCU+低分辨率摄像头模组上做缺陷初筛。

这些场景的共同点是:数据隐私敏感、通信成本高、响应必须快、供电受限。TinyML不是替代云端,而是把“第一道判断”放在最靠近物理世界的地方。

三、MCU推理系统工程的整体学习路径

本课程共30章,按“基础—模型—部署—优化—系统—实战”六段推进。下图给出整体学习路径与各阶段目标,便于你建立全局地图。

MCU TinyML 推理系统工程 · 学习路径 基础认知 MCU资源模型 TinyML定义与边界 模型设计 轻量网络结构 特征与窗口 量化压缩 INT8/PTQ/QAT 精度-体积权衡 部署运行 TFLM/CMSIS-NN 内存与算子 系统优化 功耗/延迟/调度 端到端验证 系统工程闭环 数据采集 → 预处理/特征 → 模型推理 → 后处理/决策 → 执行与通信 → 现场数据回流 约束贯穿:SRAM占用 · Flash占用 · 单次推理延迟 · 平均功耗 · 精度/召回 · 鲁棒性 验证手段:PC仿真 · 目标板基准 · 功耗测量 · 长期稳定性测试 阶段目标 A 能说清MCU资源边界 能判断任务是否适合TinyML 阶段目标 B 能完成量化与转换 能在目标板跑通推理 阶段目标 C 能优化延迟与功耗 能完成端到端系统验证

学习时建议按“先跑通、再优化、后系统”的顺序推进。很多初学者一上来就追求极致压缩,结果模型精度崩塌、调试困难。更稳妥的路径是:先用浮点模型在PC上验证算法可行性,再量化到INT8,最后在目标MCU上做内存与延迟基准。

四、方法流程:从需求到部署的六步法

  1. 需求定义:明确输入传感器、采样率、窗口长度、输出类别、精度下限与功耗上限。
  2. 数据与特征:采集现场数据,做归一化、分帧、滤波,确定特征维度。
  3. 模型训练:选择轻量结构(如DS-CNN、TinyMLP、1D-CNN),控制参数量。
  4. 量化转换:使用训练后量化或量化感知训练,生成INT8 TFLite模型。
  5. 部署集成:将模型转为C数组,接入TFLM解释器,配置Tensor Arena。
  6. 基准与迭代:测量推理时间、SRAM峰值、Flash占用与功耗,回到模型或算子层优化。

下面是一个典型的部署配置片段,用于说明模型与内存参数如何进入工程:

// model_settings.h
#define kTensorArenaSize   (64 * 1024)   // 64KB SRAM 张量区
#define kNumClasses        4             // 步行/跑步/跌倒/静止
#define kFeatureSize       128           // 每帧特征维度
#define kWindowSize        32            // 时间窗口帧数

// main.cpp
static tflite::MicroInterpreter interpreter(
    model, resolver, tensor_arena, kTensorArenaSize);
interpreter.AllocateTensors();
int8_t* input = interpreter.input(0)->data.int8;
// 填充 input 后调用 interpreter.Invoke()

五、案例/场景:一个电机异常检测任务

假设某工厂要在电机端加装振动传感器节点,目标是识别“正常/不平衡/轴承磨损”三类状态。若把原始振动数据全部上传云端,单节点每天产生数百MB数据,电池无法支撑。采用TinyML方案后,节点每2秒采集一次256点振动,计算FFT幅值特征,送入一个约12KB的INT8全连接网络,推理耗时约8ms,仅当置信度超过阈值时才通过LoRa上传告警。这样平均功耗从数十毫安降到几百微安,电池寿命从数天延长到数月。

提示:判断一个任务是否适合TinyML,可以问三个问题:数据是否连续产生?决策是否只需局部信息?延迟是否要求毫秒级?三者满足越多,端侧推理价值越大。

六、常见误区与复盘

误区 表现 正确做法
把PC模型直接搬到MCU Flash溢出、SRAM不足、推理超时 先量化,再按MCU算子集裁剪结构
只看模型精度 精度高但延迟大、功耗高 建立精度-延迟-内存-功耗四维指标
忽略数据分布 实验室准确,现场误报多 用现场数据做训练与验证,保留回流机制
Tensor Arena设置过小 AllocateTensors失败或运行崩溃 用基准工具测量峰值,留20%余量

注意:TinyML不是“越小越好”。过度压缩会带来精度下降与维护成本上升。工程目标是“在约束内达到可接受的业务指标”,而不是追求极限压缩比。

本章建立了TinyML的定义、发展背景与学习路径。接下来你将逐步进入MCU资源模型、模型设计、量化、部署与系统优化等具体环节。请记住:TinyML推理系统工程的本质,是在资源、精度、延迟与功耗之间做可验证的权衡。