4. 边缘AI模型选型与约束分析

在MCX系列MCU上部署边缘AI,模型选型不是“挑一个精度最高的模型”这么简单,而是一次在存储、算力、算子支持、量化误差与实时性之间的多约束求解。MCX eIQ工具链支持TFLite Micro与Glow/MicroNPU两条路径,但无论走哪条路径,模型最终都要落到具体芯片的Flash、SRAM和NPU/CPU算力预算里。本节围绕四个约束维度展开,并给出典型视觉与音频模型的对比方法。

一、四个硬约束:先算清楚再选模型

1. 模型规模约束。MCX N系列典型配置为1~2 MB Flash、数百KB SRAM,MCX A系列更小。模型权重通常放在Flash,激活张量、中间缓冲和运行时堆放在SRAM。一个粗略但实用的估算方式是:

Flash占用 ≈ 权重参数量 × 每参数字节数 + 代码/算子库开销
SRAM峰值 ≈ 最大激活张量 + 双缓冲 + 运行时堆 + 栈

示例(假设值,非实测):
- INT8量化模型,权重 120 KB,算子库约 60 KB → Flash ≈ 180 KB
- 最大激活 48 KB,双缓冲 2×16 KB,堆 24 KB → SRAM ≈ 104 KB

注意INT8量化后每参数1字节,FP32则是4字节,同一网络量化前后Flash占用可差约4倍。选型时先看参数量,再看是否必须量化。

2. 算子支持约束。MCX eIQ的TFLite Micro解释器只实现了部分算子内核,MicroNPU/Glow路径对算子有更严格的图切分要求。常见支持较好的算子包括CONV_2D、DEPTHWISE_CONV_2D、FULLY_CONNECTED、MAX_POOL_2D、AVERAGE_POOL_2D、RESHAPE、SOFTMAX、ADD、MUL;而LSTM、GRU、自定义算子、动态shape、部分转置卷积往往需要回退到CPU或直接不支持。选型前应把模型算子清单与目标运行时支持表逐项比对,不支持的算子要么替换、要么改写、要么换模型。

3. 量化需求约束。MCU上几乎必须做INT8全整型量化。量化不是“压一下就行”,它引入两类误差:权重舍入误差和激活截断误差。判断量化是否可接受,通常看量化后验证集精度下降是否在容忍范围内(例如分类任务下降不超过1~2个百分点,示例阈值)。若下降过大,可尝试:逐通道量化、保留首尾层为FP32(若运行时支持混合精度)、调整代表性数据集、对敏感层做QAT(量化感知训练)。

4. 实时性指标约束。实时性由帧率/延迟要求反推算力预算。对视觉任务,若要求15 FPS,则单帧推理必须≤66.7 ms;对音频关键词唤醒,通常要求每次推理≤20~30 ms且常驻功耗低。推理时间可近似拆为:

单帧时间 ≈ MACs / (有效算力 × 利用率) + 内存搬运开销 + 前后处理

示例(假设值):
- 模型 30 MMACs,MCX N947 NPU 有效算力约 0.5 GOPS,利用率 40%
- 计算部分 ≈ 30e6 / (0.5e9 × 0.4) ≈ 150 ms → 不满足15 FPS
- 需降分辨率或换更小模型

这个估算说明:算力预算必须用MACs和有效利用率一起算,不能只看主频。

二、典型视觉与音频模型对比

下面用一张对比表把常见候选模型放在同一坐标系里。表中数值为典型量级示例,用于建立选型直觉,实际以具体模型和量化结果为准。

模型任务参数量级INT8 Flash输入算子风险MCX适配建议
MobileNetV1-0.25图像分类~0.2 M~0.2 MB96×96×3低首选基线
MobileNetV2-0.35图像分类~0.4 M~0.4 MB96×96×3低需确认残差ADD
Tiny YOLO目标检测~0.9 M~0.9 MB160×160×3中后处理占SRAM
DS-CNN-S关键词唤醒~0.02 M~20 KBMFCC 10×40低音频首选
TC-ResNet8关键词唤醒~0.06 M~60 KBMFCC 16×40低精度略高
LSTM小模型音频/时序~0.1 M~0.1 MB序列高算子支持差,慎选

从表中可以看出:视觉模型参数量普遍比音频模型大一个数量级以上,Flash压力主要来自视觉;音频模型虽小,但常涉及MFCC前端和序列处理,SRAM与算子支持是主要风险点。选型顺序建议是:先按任务确定模型族,再用参数量筛掉Flash超预算的,再用算子支持筛掉运行时跑不通的,最后用量化精度和实时性做终选。

MCX边缘AI模型选型:四约束筛选与视觉/音频对比 四约束筛选路径 ① 模型规模 Flash ≤ 预算 · SRAM峰值 ≤ 预算 ② 算子支持 CONV/DWCONV/FC/POOL/ADD/MUL ③ 量化需求 INT8全整型 · 精度下降 ≤ 1~2% ④ 实时性指标 单帧 ≤ 66.7ms(15FPS) · 音频 ≤ 30ms 候选模型通过 进入量化与部署验证 典型视觉与音频模型对比 视觉模型(Flash压力大 · 输入分辨率敏感) MobileNetV1-0.25 0.2M · 96×96 · 低风险 MobileNetV2-0.35 0.4M · 96×96 · 低风险 Tiny YOLO 0.9M · 160×160 · 中风险 关键约束:Flash容量、输入分辨率、后处理SRAM占用 典型实时性目标:10~15 FPS(单帧 66~100 ms) 量化策略:INT8全整型,首层可保留FP32(若支持) 音频模型(Flash小 · 前端与序列处理是风险) DS-CNN-S 0.02M · MFCC 10×40 · 低风险 TC-ResNet8 0.06M · MFCC 16×40 · 低风险 LSTM小模型 0.1M · 序列 · 高风险 关键约束:MFCC前端开销、序列算子支持、常驻功耗 典型实时性目标:单次推理 ≤ 20~30 ms,低占空比唤醒 量化策略:INT8,注意MFCC定点化与激活截断 选型顺序:任务定模型族 → 参数量筛Flash → 算子支持筛运行时 → 量化精度与实时性终选 视觉优先压分辨率与通道数;音频优先保前端与算子兼容性

三、把约束落到选型决策上

实际选型时,建议按以下顺序推进,避免在错误方向上反复调参:

  1. 任务定模型族。分类、检测、关键词唤醒、异常检测各自有成熟的小模型族,先锁定族,再在族内选规模。
  2. 参数量筛Flash。用INT8后的权重字节数加算子库开销,与芯片Flash预算比较,超了就降规模或降分辨率。
  3. 算子支持筛运行时。导出模型算子清单,与TFLite Micro/MicroNPU支持表比对,不支持的算子优先替换而非硬扛。
  4. 量化精度与实时性终选。用代表性数据集做PTQ,看精度下降;再用MACs和有效算力估算单帧时间,两者都过关才进入部署。
一个实用经验:在MCX N947上,INT8 MobileNetV1-0.25配合96×96输入,通常能在十几毫秒量级完成单帧推理(示例量级,实际以实测为准),是视觉分类的稳妥起点;音频关键词唤醒则优先选DS-CNN-S这类纯卷积小模型,避开LSTM等序列算子。
不要忽略前后处理的开销。视觉任务的图像缩放、颜色空间转换、NMS后处理,音频任务的MFCC计算,往往和模型推理本身同量级甚至更大。选型时要把这些环节一起算进SRAM和时间预算,否则会出现“模型跑得动、整条流水线跑不动”的情况。

总结来说,MCX上的模型选型是一个“先算约束、再比模型”的过程:规模决定能不能放下,算子决定能不能跑通,量化决定精度能不能接受,实时性决定体验能不能达标。把这四个约束按顺序过一遍,再结合视觉与音频模型的不同风险点做取舍,就能在MCX的有限资源里找到真正可部署的模型。