4、振动模型选型:适合MCU的小型神经网络结构(1D-CNN、LSTM、TinyML专用模型)对比与选择
在TinyML振动监测场景中,模型选型直接决定了部署后的推理延迟、RAM/Flash占用以及故障识别的准确率。MCU通常只有几十KB到几百KB的RAM,主频在几十MHz到两百MHz之间,且没有GPU加速。因此,模型结构必须同时满足三个约束:参数量小、计算量低、对振动时序特征有足够的表达能力。本章将围绕1D-CNN、LSTM(含轻量变体)和TinyML专用模型(如TCN、MobileNetV1-1D、TinyConv)展开对比,并给出基于实际约束的选型决策路径。
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之间的折中方案。
4.2 判断方法:基于资源约束的模型选型流程
选型应遵循“先算资源预算,再定模型结构,最后微调校准”的流程。具体步骤如下:
- 确定MCU资源上限:查阅芯片手册,记录可用RAM(如STM32F103为20KB,ESP32为320KB但实际可用约200KB)、Flash(通常256KB-1MB)、主频(如80MHz)。
- 估算模型参数量:1D-CNN参数量 ≈ 卷积核数 × 卷积核大小 × 输入通道数 + 全连接层参数;LSTM参数量 ≈ 4 × (输入维度 + 隐藏单元数) × 隐藏单元数。例如,一个输入维度为64、隐藏单元为32的LSTM,参数量约为4×(64+32)×32=12,288。
- 计算RAM峰值:RAM占用 = 输入缓冲区 + 每层激活值 + 权重(若不能放在Flash中)。TFLite Micro通常将权重放在Flash,但激活值必须驻留RAM。1D-CNN的激活值约为“序列长度 × 通道数 × 4字节”,LSTM的激活值还包括隐藏状态和细胞状态。
- 评估推理延迟:在目标MCU上运行基准测试,或使用STM32Cube.AI、TensorFlow Lite for Microcontrollers的benchmark工具。1D-CNN通常每层耗时1-5ms,LSTM每层耗时10-30ms。
- 对比准确率:在相同数据集(如CWRU轴承数据集或自采振动数据)上训练各模型,记录验证集准确率、F1分数和混淆矩阵。
| 模型结构 | 参数量范围 | RAM峰值(窗口=512) | 推理延迟(80MHz MCU) | 适用场景 |
|---|---|---|---|---|
| 1D-CNN(3层卷积+全连接) | 5K-30K | 15-40KB | 5-15ms | 轴承故障分类、电机异常检测 |
| LSTM(1层,隐藏单元32) | 12K-50K | 30-80KB | 30-80ms | 长时序趋势预测、多传感器融合 |
| TCN(膨胀卷积,4层) | 8K-40K | 20-50KB | 10-25ms | 需长感受野但实时性要求高的场景 |
| TinyConv(深度可分离1D卷积) | 3K-15K | 10-25KB | 3-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值,以降低工况影响。
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振动监测场景,1D-CNN是首选基线模型;若需要更长的时序感受野,TCN是优于LSTM的选择;LSTM仅在窗口长度超过1024点且实时性要求宽松(>50ms)时才值得考虑。选型后必须进行量化校准和实测验证,确保模型在目标硬件上稳定运行。