3、时序分类模型基础:常用模型(CNN、RNN、LSTM、TCN、Transformer)及其在传感器分类中的应用
传感器产生的数据本质上是带时间戳的序列信号——加速度计的振动波形、IMU的姿态轨迹、心电图的节律变化、工业设备的温度/压力曲线,这些数据在时间维度上具有强相关性。时序分类模型的目标就是从这些连续采样点中提取判别性特征,判断当前信号属于哪一类状态(如静止/行走/跑步、正常/故障、清醒/睡眠)。本章将系统梳理五类主流时序分类模型的结构原理、适用场景与压缩潜力,为后续参数压缩技术奠定模型层面的认知基础。
上图展示了传感器时序分类的完整链路:原始信号经滑动窗口切分和归一化后,送入不同结构的特征提取模型,最终输出分类概率。模型选择直接影响后续压缩策略——CNN和TCN因结构规整、算子简单,更适合量化与剪枝;LSTM的门控结构对数值敏感,压缩时需谨慎;Transformer的自注意力机制计算量大,在MCU级别部署通常需要结合蒸馏或结构重构。下面逐一剖析各模型的核心原理与传感器应用场景。
3.1 CNN:局部感受野与平移不变性
核心原理
一维卷积神经网络(1D-CNN)将传感器信号视为长度为L、通道数为C的多变量序列。卷积核沿时间轴滑动,通过局部感受野提取短时模式——例如加速度信号中一个完整的步态周期(约0.5~1秒)可被多个卷积核分解为峰值、谷值、斜率等局部特征。CNN的权值共享特性大幅减少了参数量,且池化层(MaxPooling/AvgPooling)提供了平移不变性,使模型对信号在时间轴上的微小偏移不敏感。
# 1D-CNN 传感器分类模型示意(PyTorch风格)
class SensorCNN(nn.Module):
def __init__(self, in_channels=6, num_classes=5):
super().__init__()
self.conv1 = nn.Conv1d(in_channels, 32, kernel_size=7, stride=2)
self.conv2 = nn.Conv1d(32, 64, kernel_size=5, stride=2)
self.pool = nn.AdaptiveAvgPool1d(1)
self.fc = nn.Linear(64, num_classes)
def forward(self, x):
# x: (batch, 6, 128) 6轴传感器,128个时间点
x = F.relu(self.conv1(x))
x = F.relu(self.conv2(x))
x = self.pool(x).squeeze(-1)
return self.fc(x)
传感器应用场景
- 人体活动识别(HAR):使用手机或可穿戴设备的加速度计+陀螺仪(6轴),识别走路、跑步、上楼、下楼、静止等状态。CNN可自动学习步频、振幅等特征,无需手工设计。
- 工业设备振动监测:对旋转机械的振动信号进行分类,区分正常、轴承磨损、不平衡、松动等故障模式。CNN的局部卷积核能捕捉特定频率成分的短时变化。
- ECG心电分类:对单导联心电信号识别正常窦性心律、房颤、室性早搏等。CNN可提取QRS波群、ST段等局部形态特征。
3.2 RNN与LSTM:时序依赖的循环建模
核心原理
循环神经网络(RNN)通过隐藏状态在时间步之间传递信息,理论上可以建模任意长度的时序依赖。但标准RNN存在梯度消失/爆炸问题,难以学习长距离依赖(超过10步)。长短期记忆网络(LSTM)引入输入门、遗忘门、输出门和细胞状态,使梯度可以沿时间轴有效传播,可建模数百步的依赖关系。LSTM的数学表达如下:
f_t = σ(W_f · [h_{t-1}, x_t] + b_f) # 遗忘门
i_t = σ(W_i · [h_{t-1}, x_t] + b_i) # 输入门
C̃_t = tanh(W_C · [h_{t-1}, x_t] + b_C) # 候选细胞状态
C_t = f_t * C_{t-1} + i_t * C̃_t # 更新细胞状态
o_t = σ(W_o · [h_{t-1}, x_t] + b_o) # 输出门
h_t = o_t * tanh(C_t) # 隐藏状态
传感器应用场景
- 手势识别:使用表面肌电(sEMG)或加速度计信号识别不同手势。手势动作持续0.5~2秒,包含复杂的时序肌肉激活模式,LSTM能捕捉动作的先后顺序和持续时间。
- 语音关键词检测:在低功耗麦克风阵列上识别“你好”“停止”等唤醒词。语音信号是典型的时序依赖数据,LSTM对音素间的过渡建模优于CNN。
- 工业过程异常检测:对温度、压力、流量等多变量过程信号进行时序建模,检测异常模式。LSTM能记住正常工况的长期模式,对缓慢漂移的异常更敏感。
3.3 TCN:因果空洞卷积的时序建模
核心原理
时序卷积网络(TCN)结合了CNN的并行计算优势和RNN的长程依赖建模能力。其核心是因果卷积(保证输出只依赖当前及过去时刻)和空洞卷积(指数级扩大感受野)。通过堆叠多层空洞卷积,TCN可以用较少的层数覆盖很长的历史窗口。例如,使用kernel_size=3、dilation=1,2,4,8的四层TCN,感受野可达1+2×(1+2+4+8)=31个时间步。
# TCN残差块示意
class TCNBlock(nn.Module):
def __init__(self, in_ch, out_ch, kernel_size=3, dilation=2):
super().__init__()
self.conv1 = nn.Conv1d(in_ch, out_ch, kernel_size,
dilation=dilation, padding=(kernel_size-1)*dilation//2)
self.conv2 = nn.Conv1d(out_ch, out_ch, kernel_size,
dilation=dilation, padding=(kernel_size-1)*dilation//2)
self.relu = nn.ReLU()
self.residual = nn.Conv1d(in_ch, out_ch, 1) if in_ch != out_ch else None
def forward(self, x):
out = self.relu(self.conv1(x))
out = self.relu(self.conv2(out))
return out + (self.residual(x) if self.residual else x)
传感器应用场景
- 可穿戴步态分析:对足底压力或IMU信号进行步态相位分类(支撑期、摆动期)。TCN的因果结构确保实时推理时不会使用未来数据,适合在线处理。
- 智能电表负荷识别:对电流/电压波形进行分类,识别不同家用电器的开关状态。TCN能捕捉电器启动时的瞬态特征和稳态周期特征。
- 环境声音分类:对麦克风信号识别雨声、交通噪声、警报声等。TCN的并行计算比LSTM快3~5倍,适合实时性要求高的场景。
3.4 Transformer:全局注意力机制
核心原理
Transformer通过自注意力(Self-Attention)机制直接建模序列中任意两个位置之间的依赖关系,不受距离限制。对于长度为L的输入序列,自注意力计算复杂度为O(L²)。在传感器场景中,通常使用窗口化注意力或稀疏注意力来降低计算量。其核心公式为:
Attention(Q, K, V) = softmax(QK^T / √d_k) V
其中Q、K、V分别由输入序列线性变换得到,d_k为键向量的维度。多头注意力机制允许模型同时关注不同子空间的特征模式。
传感器应用场景
- 多传感器融合分类:将加速度计、陀螺仪、磁力计、气压计等多源信号拼接为多通道序列,Transformer的全局注意力能自动学习跨传感器的时间对齐和特征交互。
- 长序列生理信号分析:对长达数小时的ECG或EEG信号进行整体分类(如睡眠分期)。Transformer能捕捉远距离的周期性模式,如睡眠纺锤波与慢波之间的关联。
- 工业声学异常检测:对工厂环境中的声音序列进行异常分类。Transformer能建模设备启停、周期性运转等长程模式。
3.5 模型对比与选型决策
| 模型 | 参数量级 | 时序依赖长度 | 计算复杂度 | 压缩难度 | 典型传感器场景 |
|---|---|---|---|---|---|
| 1D-CNN | 10K~500K | 短(<50步) | 低 | ★☆☆☆☆(易) | HAR、振动故障、ECG |
| LSTM | 50K~2M | 长(>100步) | 中 | ★★★☆☆(中) | 手势、语音、过程异常 |
| TCN | 30K~800K | 长(可配置) | 中低 | ★★☆☆☆(较易) | 步态、负荷识别、环境声音 |
| Transformer | 1M~50M | 极长(全局) | 高 | ★★★★★(难) | 多传感器融合、睡眠分期 |
选型决策流程
- 确定时序依赖长度:如果分类只依赖最近10~20个采样点(如步态峰值检测),CNN足够;如果需要依赖过去1秒以上的上下文(如手势完整轨迹),选择TCN或LSTM。
- 评估硬件资源:MCU(Flash<512KB,RAM<128KB)优先选CNN或TCN;带NPU的边缘设备(如手机)可考虑Transformer。
- 考虑实时性:LSTM的串行推理不适合高帧率(>100Hz)场景;TCN和CNN可并行计算,延迟更低。
- 压缩成本预算:如果项目周期紧,选择CNN+PTQ量化即可;如果追求极致精度,选择TCN+QAT+结构化剪枝。
3.6 案例拆解:基于1D-CNN的工业振动故障分类与压缩
初始方案:团队最初使用LSTM(隐藏单元128,2层),参数量约180K,在验证集上准确率96.2%。但部署到STM32后发现:模型占用Flash 720KB(超出预算),推理延迟28ms(超出实时要求),且int8量化后准确率降至91.5%。
分析判断:振动信号的主要判别特征集中在100~500Hz频段,对应每个采样窗口(256点,128ms)内约12~64个完整振动周期。LSTM的长程依赖能力在此场景中属于“过度设计”——分类只需要最近2~3个振动周期的局部模式即可。
实际操作步骤:
- 将LSTM替换为1D-CNN:输入256点×1通道,使用3层卷积(kernel=7,5,3,stride=2),通道数32→64→128,最后接全局平均池化和全连接层。参数量降至42K。
- 训练后量化(PTQ):使用500条校准数据,将权重和激活量化为int8。准确率从96.0%降至94.8%(损失1.2%)。
- 结构化剪枝:按L1范数对第2层卷积核排序,剪除贡献最小的20%通道(64→51通道),微调5个epoch后准确率恢复至95.3%。
- 最终模型:Flash占用168KB(含量化表),RAM占用28KB,推理延迟4.2ms。
结果对比:
| 方案 | 参数量 | Flash占用 | RAM占用 | 延迟 | 准确率 |
|---|---|---|---|---|---|
| 原始LSTM | 180K | 720KB | 96KB | 28ms | 96.2% |
| CNN+PTQ | 42K | 168KB | 28KB | 4.2ms | 94.8% |
| CNN+剪枝+微调 | 34K | 136KB | 24KB | 3.8ms | 95.3% |
风险与代价:剪枝后模型对高频噪声(>800Hz)的鲁棒性略有下降,需在预处理中增加低通滤波。此外,PTQ的校准数据需覆盖不同负载工况,否则量化误差会放大。
复盘经验:传感器时序分类中,模型容量应与任务复杂度匹配。LSTM的“强大”在资源受限场景中反而是负担。CNN/TCN的卷积结构更利于硬件加速和量化压缩。建议在项目初期就建立“目标硬件→模型选型→压缩策略”的联合评估流程,避免后期返工。