深入浅出TinyML 11:标签应该如何定义和检查?

深入浅出TinyML 11:标签应该如何定义和检查? 标签把传感器数据连接到业务目标。标签名称相同并不保证标注者理解相同“异常晃动”如果没有幅值、持续时间或现场条件说明会在数据集中形成互相冲突的样本。标签规范应先于大规模采集完成。规范不仅列出类别名称还要定义开始与结束、过渡段处理、未知状态、证据来源和版本。标签质量的核心是可重复判断。两名标注者面对同一数据和证据应能够得到一致结论。完成本篇后你应该能够把业务状态写成含义明确、互斥或有优先级的标签规范。将事件区间映射到窗口并处理过渡、冲突、不确定和未知状态。运行标签生成器比较多数覆盖、中心点和任意出现三种规则。标签是模型要学习的答案。答案本身含糊时网络只能拟合标注矛盾增加层数不会解决定义问题。一、先把核心关系连起来标签要对应可观察的业务状态每个类别应包含定义、纳入条件、排除条件和典型反例。标签粒度要与传感器能力匹配数据中无法区分的两个业务状态不应仅凭主观愿望拆成两类。分类任务需要明确单标签还是多标签。回归任务则要说明目标值来源、单位、测量误差和时间对齐方式。图1稳定态、过渡态、不确定与未知输入需要不同处理事件边界决定窗口标签连续事件通常包含开始、稳定和结束阶段。窗口跨越两个状态时可以使用占比规则、中心点规则或过渡标签但选择后必须对全数据一致执行。标签时间戳还要考虑传感器、视频和人工记录之间的时钟偏差。固定偏差可以校正随机偏差需要进入标签不确定性。二、未知与不确定不能被强制归类数据不属于任何已知类别时应标为UNKNOWN或进入待复核队列。强行放入最接近的类别会污染边界让模型在现场对新模式给出过高置信度。证据不足与真正未知要分开。不确定标签反映标注过程缺乏依据未知标签反映业务类别集合没有覆盖该输入。表1标签定义文档的必要字段字段应写内容避免的问题类别定义物理含义、纳入和排除条件同名不同义时间边界开始、结束与过渡规则窗口标签漂移证据工况记录、视频或控制信号仅凭波形猜测未知策略UNKNOWN与UNCERTAIN处理强制错误归类版本修改原因与生效范围模型和标签失配三、一致性检查与版本管理可以抽取一批样本由两名标注者独立标注再统计一致率和分歧类别。分歧应回到规范修订而非简单由多数票掩盖。标签定义变化后必须提升版本并记录哪些样本需要重标。模型报告要绑定标签版本否则不同模型指标无法公平比较。JSON一条可追溯标签记录{sample_id: device03_session17_0042,label: PERIODIC_VIBRATION,label_version: 2.1,start_us: 18420000,end_us: 19420000,evidence: motor_controller_stateRUN,reviewer: reviewer_b,quality: confirmed}标签规范要写到两个标注者能独立得到相同结果每个类别至少要有定义、包含条件、排除条件和边界例子。例如“稳定运行”可定义为设备达到额定转速后持续2秒排除启动、停机、传感器饱和和维护操作。只给一个类别名称标注者会按自己的经验解释。状态可以重叠时必须定义优先级。设备既有松动又处于启动阶段标签是双标签、主故障优先、启动优先还是UNKNOWN单标签分类器每个窗口只能给一个目标数据规范必须先解决冲突。过渡状态常包含多个类别的混合特征。把过渡窗口强制分给前一状态或后一状态会扩大类内差异。可以单独标为TRANSITION、从训练中排除但保留测试或根据业务接受边界制定一致规则。一份可执行标签说明的字段字段示例作用定义额定转速稳定2秒后限定状态含义排除启动、停机、饱和窗口减少类内矛盾优先级安全故障高于普通状态解决重叠证据工控状态、人工记录、时间戳支持追溯窗口标签规则会改变模型问题本身中心点规则用窗口中心时刻的状态作为标签适合持续状态并使时间对齐简单多数覆盖规则选择占比最大的状态能够容忍边界任意出现规则只要窗口内出现事件就标正类适合高召回告警但会让含很短事件的窗口与完整事件共享标签。需要设置最小纯度。多数类别只占55%时窗口仍包含大量其他状态。可以要求主类别覆盖至少80%否则标为TRANSITION或UNCERTAIN。阈值要写入数据版本并在训练与评价报告中记录。标注质量应通过抽样复核和一致性统计监控。对同一批片段让两名标注者独立判断统计一致率和具体分歧类型。只看总体一致率会掩盖少数关键类别应按类别列出分歧。窗口纯度 主标签覆盖时长 / 窗口时长若纯度 0.8则示例策略返回TRANSITION而非强制归入主类。四、落地检查每个类别写明物理定义、纳入条件和排除条件。统一事件开始、结束和跨边界窗口的标注规则。区分UNKNOWN、UNCERTAIN和正常过渡状态。抽取样本做双人独立标注并处理分歧。模型、样本和评价报告都绑定标签规范版本。动手把事件时间轴转换成窗口标签脚本定义06秒的状态时间轴并生成2秒窗口、1秒步长。每个窗口计算各状态覆盖时长主状态覆盖不足80%时返回TRANSITION。这样可以直接审计每个标签从何而来。实验环境与输入Python 3标准库。保存为 label_windows.py 并运行。时间区间采用左闭右开 [start, end)避免边界重复计算。按顺序完成实验运行脚本查看每个窗口的覆盖比例和最终标签。确认跨越normal与fault边界的窗口被标为TRANSITION。把纯度阈值从0.8改成0.5观察强制标签数量增加。实现中心点规则并与覆盖规则逐窗比较记录不同标签的位置。可直接运行基于时间覆盖和纯度的窗口标注from collections import defaultdictTIMELINE [(0.0, 2.4, normal),(2.4, 3.0, transition),(3.0, 5.2, fault),(5.2, 6.0, unknown),]WINDOW 2.0STEP 1.0MIN_PURITY 0.80def overlap(a0, a1, b0, b1):return max(0.0, min(a1, b1) - max(a0, b0))def label_window(start, end):coverage defaultdict(float)for left, right, label in TIMELINE:coverage[label] overlap(start, end, left, right)winner max(coverage, keycoverage.get)purity coverage[winner] / (end - start)final winner if purity MIN_PURITY else TRANSITIONreturn final, purity, dict(coverage)start 0.0while start WINDOW 6.0:end start WINDOWlabel, purity, coverage label_window(start, end)print(f[{start:.1f}, {end:.1f}) - {label:10s} fpurity{purity:.0%} coverage{coverage})start STEP先读懂代码中的关键路径overlap统一使用左闭右开区间避免相邻事件在同一边界重复贡献时长。coverage保留每类覆盖秒数最终标签之外仍有可审计证据。纯度阈值不足时返回TRANSITION防止55%对45%的混合窗口被强制当作稳定类。窗口生成和标签映射使用同一时间基准真实项目还要校准业务日志与传感器时钟。你应该观察到什么完全落在稳定区间的窗口获得normal或fault纯度为100%。跨边界窗口的主类别不足80%时输出TRANSITION。降低纯度阈值后普通类别增多但类内混合也更严重。成功标准标签规范明确时间区间的开闭规则、纯度阈值和冲突优先级。每个窗口能输出覆盖证据而非只保存最终字符串。UNKNOWN、UNCERTAIN和TRANSITION在业务含义上被区分。失败时从哪里查起标签生成问题排查现象原因检查边界点重复标记相邻区间都包含终点统一使用左闭右开区间过渡样本过多窗口太长或边界太密联合检查窗口与事件定义标注者分歧集中类别排除条件不足补充反例和优先级完成自动映射后仍要抽样查看原始波形与业务日志验证时间同步和规则是否符合真实事件。把实验迁移到真实MCU项目标签通常离线产生但固件状态日志决定标注质量。设备应输出状态变化的单调时间戳、原因码和版本避免人工凭视频大致对齐。UNKNOWN用于未覆盖输入TRANSITION用于已知状态边界UNCERTAIN用于证据不足。三者可以在训练中采用不同处理不能合并成一个含义模糊的其他类。标签版本变更后要重建样本索引。直接在旧窗口文件上覆盖标签会失去历史可复现性保留原时间轴、规则版本和生成脚本才能比较两版标签对模型的影响。把结果再向前推进一步为你的每个类别补写一个包含例和两个排除例。比较中心点、多数覆盖和任意出现规则对误报与漏报的影响。设计两名标注者的复核表按类别统计分歧而非只给总一致率。收束标签规范需要同时定义类别、时间边界、未知状态、证据和版本。清晰标签能够减少数据冲突也为现场拒识和后续维护留下入口。参考资料TensorFlow Lite Micro 官方代码仓库更新时间2026 年 8 月 5 日