3、时间序列分类任务:分类目标、数据标注、评估指标(准确率、F1分数等)
在TinyML时序CNN模型的实际落地中,我们面对的核心问题并非“如何搭建一个神经网络”,而是“如何定义一个可被边缘设备解决的分类问题”。时间序列分类与图像分类有本质差异:图像是空间结构数据,而传感器时序数据是时间结构数据,其类别边界往往隐藏在波形形态、频率成分、事件顺序和持续时间之中。本章将聚焦于分类任务的三个基石——分类目标定义、数据标注规范、评估指标体系,帮助你在构建一维卷积模型之前,先建立一套可量化、可复现、可部署的任务框架。
3.1 分类目标定义:从物理现象到类别体系
时间序列分类的目标不是简单地“让模型输出一个标签”,而是需要明确回答三个问题:区分什么、在什么时间尺度上区分、区分结果如何被使用。以人体活动识别(HAR)为例,分类目标可以是“静止/走路/跑步/上楼/下楼”五类,也可以是“正常/异常”二分类。前者需要更细的时序特征,后者则更关注异常检测的召回率。在TinyML场景中,分类目标还受到硬件约束的强烈影响——类别数越多,模型参数量越大,RAM和Flash占用越高,推理延迟越长。
- 类别互斥性:每个时间窗口必须且只能属于一个类别。若存在“走路+挥手”的组合状态,需拆分为独立类别或采用多标签策略。
- 时间粒度:窗口长度决定了分类的“时间分辨率”。例如,工业设备故障检测中,50ms的窗口适合检测高频振动异常,而2s的窗口更适合识别温度漂移。
- 类别权重:若某些类别出现频率极低(如设备故障仅占0.1%),需在目标定义阶段就考虑代价敏感学习或异常检测框架。
- 部署约束:MCU上运行CNN时,类别数K直接决定全连接层参数量。例如,输入特征图大小为32×8,全连接层参数量约为32×8×K,K从5增至10时,参数量增加一倍。
在实际项目中,分类目标往往需要与业务方反复对齐。例如,在智能家居的跌倒检测场景中,业务方最初要求“跌倒/非跌倒”二分类,但进一步分析发现,“缓慢坐下”与“跌倒”在加速度波形上高度相似,导致误报率居高不下。最终将目标调整为“跌倒/坐下/躺下/其他”四分类,虽然增加了标注成本,但模型可解释性和系统可用性显著提升。
3.2 数据标注:时间序列特有的挑战与操作流程
数据标注是TinyML项目中最耗时、最容易引入偏差的环节。与图像标注不同,时间序列的标注需要同时关注时间边界和类别归属。一个典型的加速度计信号中,“走路”到“跑步”的过渡可能持续1-2秒,这段过渡数据应该标记为“走路”还是“跑步”?或者单独标记为“过渡”?这需要明确的标注规范。
| 标注方式 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 窗口级标注 | 固定长度滑动窗口(如2s) | 实现简单,与模型输入直接对应 | 窗口边界可能跨越类别切换 |
| 事件级标注 | 离散事件(如按键、跌倒) | 时间精度高,适合触发型应用 | 需要精确的起始/结束时间戳 |
| 点级标注 | 异常检测、峰值识别 | 最精细的标注粒度 | 标注成本极高,一致性难保证 |
标注操作流程建议:
- 预标注:使用简单的阈值规则或已有的非深度学习模型生成初步标签,人工仅修正错误部分,可减少60%以上的标注时间。
- 双人标注+仲裁:对于边界模糊的样本,至少两人独立标注,不一致处由专家仲裁。在振动信号分类中,不同标注者对“轻微磨损”和“正常”的边界判断差异可达30%。
- 时间一致性校验:检查同一段连续信号中,标签切换频率是否合理。若1秒内标签切换超过3次,通常说明标注存在噪声。
- 类别平衡处理:若某类别样本数过少,可采用过采样(复制加噪声)、窗口重叠采样或合成少数类样本(如SMOTE的时序变体)来平衡。
3.3 评估指标:准确率不是唯一标准
在TinyML时序分类中,准确率(Accuracy)往往具有欺骗性。假设设备故障检测任务中,正常样本占99%,故障样本占1%。一个“永远预测正常”的模型准确率高达99%,但完全无法检测故障。因此,必须结合精确率(Precision)、召回率(Recall)和F1分数综合评估。
核心指标定义:
- 准确率(Accuracy):正确预测样本数 / 总样本数。适用于类别分布均衡的场景。
- 精确率(Precision):预测为正类的样本中,真正为正类的比例。高精确率意味着“预测为故障的样本,大概率确实是故障”。
- 召回率(Recall):实际为正类的样本中,被正确预测的比例。高召回率意味着“所有故障样本都被尽可能找出来”。
- F1分数:精确率和召回率的调和平均数,F1 = 2 × (P × R) / (P + R)。在类别不平衡时,F1比准确率更能反映模型真实性能。
在TinyML场景中,评估指标还需要扩展到资源维度:模型大小(Flash占用)、运行时RAM、单次推理延迟、能耗(mAh/次推理)。一个在服务器上F1=0.95的模型,若量化后F1降至0.88,但RAM占用从200KB降至30KB,在MCU上仍然可能是更优选择。
3.4 案例拆解:工业电机振动分类的评估体系设计
背景与约束:某工厂需要对传送带电机进行预测性维护,使用加速度计采集振动信号,采样率2kHz。目标是在STM32L4系列MCU上部署CNN模型,RAM限制64KB,Flash限制256KB,推理延迟小于50ms。分类目标为:正常、轴承磨损、齿轮断裂、不对中,共4类。
初始现象与目标:初期模型在测试集上准确率达96%,但部署后误报频繁。分析发现,测试集来自同一台电机的连续运行数据,而实际部署时电机负载变化导致振动幅值偏移,模型泛化能力不足。
关键数据与指标:
初始模型(未优化):
- 准确率:96.2%
- 混淆矩阵显示:正常→轴承磨损误报率 8.3%
- 模型大小:180KB(FP32)
- 推理延迟:120ms(超限)
优化后模型(量化+结构调整):
- 准确率:93.5%
- F1分数:0.912(加权)
- 模型大小:42KB(INT8量化)
- 推理延迟:28ms
- RAM占用:31KB
分析判断过程:准确率下降2.7%,但F1分数从0.88提升至0.91,说明模型对少数类(齿轮断裂)的识别能力增强。进一步分析混淆矩阵发现,优化后“不对中”与“正常”的混淆率从5.1%降至2.3%,这是因为量化操作实际上起到了轻微的正则化作用,抑制了过拟合。
实际操作步骤:
- 重新划分数据集:按不同负载条件(空载、半载、满载)分别采集数据,确保每个负载状态都按7:3划分训练/验证。
- 引入时间序列增强:对训练窗口添加小幅随机缩放(0.95~1.05倍)和时序抖动(±2个采样点),模拟负载变化。
- 采用类别加权损失函数:将“齿轮断裂”类别的损失权重设为3.0,提升少数类召回率。
- 量化感知训练:在训练过程中模拟INT8量化误差,使模型对量化鲁棒。
结果对比与复盘:优化后模型在真实负载变化场景下的误报率从8.3%降至2.1%,F1分数提升至0.91。代价是训练时间增加40%,但推理阶段无额外开销。复盘经验:评估指标必须与部署场景匹配——实验室的随机划分准确率不能代表实际工况性能,应使用时间序列特有的“前向验证”方法,并始终关注F1分数而非单一准确率。
- 类别均衡(各占20%以上)→ 准确率 + 混淆矩阵
- 类别不平衡(少数类<5%)→ F1分数 + 召回率
- 误报代价高(如医疗报警)→ 高精确率优先
- 漏报代价高(如故障检测)→ 高召回率优先
- TinyML部署 → 必须同时报告模型大小、RAM、延迟
3.5 常见误区与总结复盘
误区一:盲目追求高准确率。在时间序列分类中,准确率容易被多数类主导。例如,在睡眠阶段分类中,如果“浅睡”占60%,“深睡”占20%,“REM”占20%,一个只预测“浅睡”的模型准确率60%,但毫无临床价值。正确做法是报告每个类别的精确率/召回率,并计算宏平均F1或加权F1。
误区二:忽略时间依赖关系。传感器数据在时间上高度相关,相邻窗口的标签往往相同。如果随机划分训练/验证集,模型会“记住”时间上下文而非学习波形特征。必须采用时间序列交叉验证(如Blocked K-Fold),确保验证集时间上完全在训练集之后。
误区三:标注边界处理不当。在活动切换的过渡段(如从走到跑),标签往往不明确。若强行赋予一个类别,会引入噪声。建议在标注时增加“过渡”类别,或在训练时丢弃过渡段样本。
误区四:评估指标与部署目标脱节。在MCU上部署时,模型大小和延迟是硬约束。一个F1=0.95但需要2MB Flash的模型无法部署,而F1=0.88但仅需40KB的模型才是可行方案。建议在项目初期就设定资源预算,并将资源指标纳入模型选型标准。
总结:时间序列分类任务的成功,60%取决于任务定义和数据处理,30%取决于特征工程和模型结构,仅10%取决于训练技巧。分类目标要明确互斥且可操作;数据标注要规范一致且防泄漏;评估指标要全面反映模型在真实场景下的性能,并兼顾资源约束。在TinyML场景中,建议始终以“F1分数 + 模型大小 + 推理延迟”作为核心评估三元组,准确率仅作为辅助参考。