4. 振动模型选型

在TinyML振动监测场景中,模型选型直接决定了部署后的推理延迟、RAM/Flash占用以及故障识别的准确率。MCU通常只有几十KB到几百KB的RAM,主频在几十MHz到两百MHz之间,且没有GPU加速。因此,模型结构必须同时满足三个约束:参数量小、计算量低、对振动时序特征有足够的表达能力。本章将围绕1D-CNN、LSTM(含轻量变体)和TinyML专用模型(如TCN、MobileNetV1-1D、TinyConv)展开对比,并给出基于实际约束的选型决策路径。

振动模型选型决策路径 MCU资源约束 RAM ≤ 64KB Flash ≤ 256KB 振动数据特征 采样率 1-10kHz 窗口 256-1024点 任务需求 故障分类/异常检测 实时性 ≤ 50ms 候选模型 1D-CNN / LSTM TCN / TinyConv 评估维度:参数量 / 推理延迟 / RAM峰值 / 准确率 / 抗噪性 1D-CNN(首选) ✅ 参数量小(5-50K) ✅ 推理快(<10ms) ✅ 适合局部特征提取 ⚠️ 时序依赖需加深层 LSTM(谨慎选择) ✅ 长时序记忆强 ❌ 参数量大(>100K) ❌ 推理慢(>50ms) ⚠️ 仅用于长依赖场景 TCN / TinyConv ✅ 因果卷积+膨胀 ✅ 并行计算效率高 ✅ 适合中等时序 ⚠️ 需调膨胀系数 结论:优先1D-CNN;若需长时序依赖,用TCN替代;LSTM仅在窗口>1024且无实时性要求时考虑

4.1 核心原理:为什么通用CNN结构不能直接用于振动MCU

振动信号本质上是时间序列,每个采样点与前后点存在强相关性。通用2D-CNN(如ResNet、VGG)是为图像设计的,其卷积核在空间维度滑动,直接用于一维振动数据会造成大量无效计算。更关键的是,2D-CNN的参数量通常在百万级以上,远超MCU的Flash容量。1D-CNN将卷积核沿时间轴滑动,每个卷积核只覆盖一小段窗口(如kernel_size=3或5),参数量可压缩到几千到几万。LSTM则通过门控机制(输入门、遗忘门、输出门)维护一个隐藏状态向量,理论上可以捕捉任意长度的时序依赖,但每个LSTM单元需要4组权重矩阵,导致参数量呈平方级增长。TinyML专用模型(如TCN)采用因果膨胀卷积,在不增加参数量的前提下扩大感受野,是1D-CNN和LSTM之间的折中方案。

关键认知:MCU上的模型选型不是“哪个准确率高选哪个”,而是“在RAM/Flash/延迟约束下,哪个准确率可接受”。一个100KB的LSTM模型即使准确率比30KB的1D-CNN高2%,如果无法在目标MCU上运行,就没有实际价值。

4.2 判断方法:基于资源约束的模型选型流程

选型应遵循“先算资源预算,再定模型结构,最后微调校准”的流程。具体步骤如下:

  1. 确定MCU资源上限:查阅芯片手册,记录可用RAM(如STM32F103为20KB,ESP32为320KB但实际可用约200KB)、Flash(通常256KB-1MB)、主频(如80MHz)。
  2. 估算模型参数量:1D-CNN参数量 ≈ 卷积核数 × 卷积核大小 × 输入通道数 + 全连接层参数;LSTM参数量 ≈ 4 × (输入维度 + 隐藏单元数) × 隐藏单元数。例如,一个输入维度为64、隐藏单元为32的LSTM,参数量约为4×(64+32)×32=12,288。
  3. 计算RAM峰值:RAM占用 = 输入缓冲区 + 每层激活值 + 权重(若不能放在Flash中)。TFLite Micro通常将权重放在Flash,但激活值必须驻留RAM。1D-CNN的激活值约为“序列长度 × 通道数 × 4字节”,LSTM的激活值还包括隐藏状态和细胞状态。
  4. 评估推理延迟:在目标MCU上运行基准测试,或使用STM32Cube.AI、TensorFlow Lite for Microcontrollers的benchmark工具。1D-CNN通常每层耗时1-5ms,LSTM每层耗时10-30ms。
  5. 对比准确率:在相同数据集(如CWRU轴承数据集或自采振动数据)上训练各模型,记录验证集准确率、F1分数和混淆矩阵。
模型结构参数量范围RAM峰值(窗口=512)推理延迟(80MHz MCU)适用场景
1D-CNN(3层卷积+全连接)5K-30K15-40KB5-15ms轴承故障分类、电机异常检测
LSTM(1层,隐藏单元32)12K-50K30-80KB30-80ms长时序趋势预测、多传感器融合
TCN(膨胀卷积,4层)8K-40K20-50KB10-25ms需长感受野但实时性要求高的场景
TinyConv(深度可分离1D卷积)3K-15K10-25KB3-10ms极低资源MCU(如Cortex-M0)

4.3 案例拆解:某风机轴承故障监测的模型选型实战

背景与约束:某工业风机需要部署振动监测节点,MCU选用STM32L431(Cortex-M4F,80MHz,RAM 64KB,Flash 256KB)。采样率4kHz,窗口长度512点(即128ms数据),要求故障分类延迟不超过30ms,且需区分正常、内圈故障、外圈故障、滚动体故障四类。

初始现象与目标:团队最初尝试使用2层LSTM(隐藏单元64),训练后准确率达96.5%,但部署时发现RAM峰值达到78KB,超出64KB限制,且推理延迟为65ms,无法满足实时性。目标是在不显著降低准确率的前提下,找到可部署的模型。

关键输入数据与参数:使用CWRU轴承数据集(采样率12kHz,降采样至4kHz),每类样本2000个,训练集/验证集=8:2。输入特征为原始振动波形(512点),不做额外特征工程。

分析判断过程:首先,将LSTM隐藏单元从64降至32,参数量从约50K降至12K,RAM峰值降至40KB,但准确率降至93.2%。其次,尝试1D-CNN(3层卷积,每层32个卷积核,kernel_size=5,全连接层64单元),参数量约18K,RAM峰值28KB,推理延迟12ms,准确率94.8%。最后,尝试TCN(4层膨胀卷积,膨胀系数1,2,4,8,每层32个卷积核),参数量约22K,RAM峰值35KB,推理延迟18ms,准确率95.6%。

实际操作步骤:使用TensorFlow训练各模型,然后通过TFLite Converter转换为int8量化模型,再用STM32Cube.AI生成C代码。在开发板上实测推理延迟和RAM占用,并验证量化后的准确率损失(1D-CNN损失0.8%,TCN损失0.5%,LSTM损失1.2%)。

结果对比:最终选择TCN模型,因为其准确率最高(95.6%),且RAM峰值35KB(余量充足),推理延迟18ms(满足30ms要求)。LSTM虽然准确率接近,但量化后RAM仍达45KB,且延迟超标。

风险与代价:TCN的膨胀系数需要针对不同转速工况重新调优;若风机转速变化范围大,可能需要增加一层卷积,导致RAM增加5KB。团队为此增加了转速归一化预处理,将振动信号除以RMS值,以降低工况影响。

经验复盘:在MCU选型时,不要只看参数量,要重点评估“激活值RAM”。LSTM的隐藏状态和细胞状态是常驻RAM的,即使参数量不大,RAM占用也可能超标。1D-CNN和TCN的激活值随窗口长度线性增长,但可以通过减小batch size(通常为1)来控制。

4.4 常见误区与总结复盘

误区一:盲目追求高准确率模型。很多开发者习惯在PC上训练大模型,然后尝试压缩部署。但振动信号的特征相对简单,1D-CNN和TCN已经能取得95%以上的准确率,继续增加模型复杂度只会带来边际效益递减。

误区二:忽略量化对LSTM的影响。LSTM的门控结构对数值精度敏感,int8量化后准确率下降通常比CNN更明显。如果必须使用LSTM,建议采用混合量化(权重int8,激活float16)或仅量化权重。

误区三:将窗口长度视为固定值。窗口长度直接影响模型输入维度和RAM占用。对于轴承故障,512点(128ms@4kHz)通常足够;但对于齿轮箱等低速设备,可能需要1024点。此时应优先考虑TCN,因为其膨胀卷积可以在不增加参数量的情况下扩大感受野。

误区四:忽视模型在MCU上的实际推理延迟。理论计算(如FLOPs)与实际延迟差异很大,因为MCU没有并行计算能力,且内存访问速度慢。建议在选型初期就用STM32Cube.AI或TFLite Micro的benchmark工具进行实测。

风险提示:当MCU的RAM小于32KB时,不建议使用任何LSTM变体,即使隐藏单元只有16个,其激活值也可能超过20KB。此时应选择TinyConv或极简1D-CNN(2层卷积,每层16个卷积核),并考虑将窗口缩短至256点。

总结:振动模型选型的核心是“资源-精度-延迟”三角权衡。对于大多数MCU振动监测场景,1D-CNN是首选基线模型;若需要更长的时序感受野,TCN是优于LSTM的选择;LSTM仅在窗口长度超过1024点且实时性要求宽松(>50ms)时才值得考虑。选型后必须进行量化校准和实测验证,确保模型在目标硬件上稳定运行。