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 MB | 96×96×3 | 低 | 首选基线 |
| MobileNetV2-0.35 | 图像分类 | ~0.4 M | ~0.4 MB | 96×96×3 | 低 | 需确认残差ADD |
| Tiny YOLO | 目标检测 | ~0.9 M | ~0.9 MB | 160×160×3 | 中 | 后处理占SRAM |
| DS-CNN-S | 关键词唤醒 | ~0.02 M | ~20 KB | MFCC 10×40 | 低 | 音频首选 |
| TC-ResNet8 | 关键词唤醒 | ~0.06 M | ~60 KB | MFCC 16×40 | 低 | 精度略高 |
| LSTM小模型 | 音频/时序 | ~0.1 M | ~0.1 MB | 序列 | 高 | 算子支持差,慎选 |
从表中可以看出:视觉模型参数量普遍比音频模型大一个数量级以上,Flash压力主要来自视觉;音频模型虽小,但常涉及MFCC前端和序列处理,SRAM与算子支持是主要风险点。选型顺序建议是:先按任务确定模型族,再用参数量筛掉Flash超预算的,再用算子支持筛掉运行时跑不通的,最后用量化精度和实时性做终选。
三、把约束落到选型决策上
实际选型时,建议按以下顺序推进,避免在错误方向上反复调参:
- 任务定模型族。分类、检测、关键词唤醒、异常检测各自有成熟的小模型族,先锁定族,再在族内选规模。
- 参数量筛Flash。用INT8后的权重字节数加算子库开销,与芯片Flash预算比较,超了就降规模或降分辨率。
- 算子支持筛运行时。导出模型算子清单,与TFLite Micro/MicroNPU支持表比对,不支持的算子优先替换而非硬扛。
- 量化精度与实时性终选。用代表性数据集做PTQ,看精度下降;再用MACs和有效算力估算单帧时间,两者都过关才进入部署。
总结来说,MCX上的模型选型是一个“先算约束、再比模型”的过程:规模决定能不能放下,算子决定能不能跑通,量化决定精度能不能接受,实时性决定体验能不能达标。把这四个约束按顺序过一遍,再结合视觉与音频模型的不同风险点做取舍,就能在MCX的有限资源里找到真正可部署的模型。