3、数据采集基础:传感器类型、数据格式、采样频率、窗口大小、标签体系与数据平衡策略

在TinyML项目开发中,数据采集是决定模型性能上限的基石。Edge Impulse Studio作为端到端平台,其数据采集模块(Data Acquisition)不仅支持从手机、开发板、SD卡批量导入数据,还提供了完整的传感器配置、采样参数控制与标签管理能力。本章将系统讲解传感器类型与选型逻辑、数据格式规范、采样频率与窗口大小的工程权衡、标签体系设计方法以及数据平衡策略,帮助你在进入特征工程与模型训练之前,构建高质量、高可信度的数据集。

TinyML数据采集工程链路 传感器类型 IMU(加速度/陀螺仪) 麦克风(音频) 环境(温湿度/气压) 光学(PPG/环境光) 磁力计/接近/ToF 采样参数 采样频率 (Hz) 窗口大小 (ms) 窗口重叠/步长 轴数/通道数 样本时长/数量 数据格式 CSV / JSON / WAV int16 / float32 时间戳对齐 单位与量程 字节序/通道顺序 标签与平衡 类别定义 时间戳标注 数据增强 重采样/加权 类别均衡 Edge Impulse Studio 数据采集流程 设备连接 → 传感器配置 → 采样参数设置 → 实时采集/批量上传 → 标签标注 → 数据验证 → 数据集生成 关键决策点 ① 采样频率:遵循奈奎斯特采样定理,覆盖信号最高频率的2-5倍 ② 窗口大小:平衡时间分辨率与频率分辨率,考虑推理延迟与MCU内存 ③ 标签粒度:事件级标注 vs 时间片段标注,需与窗口对齐 数据平衡策略 → 类别均衡:每类样本量差异不超过20% | 时间均衡:覆盖不同时段/环境 | 场景均衡:包含不同用户/设备/位置

3.1 传感器类型与选型逻辑

核心原理:TinyML应用场景中,传感器是物理世界与数字模型的接口。不同传感器输出不同物理量,其信号特性(频率范围、动态范围、噪声特性)直接决定了后续采样参数与特征提取策略。Edge Impulse Studio支持从开发板(如Arduino Nano 33 BLE Sense、ESP32、STM32系列)直接采集传感器数据,也支持通过CSV或JSON格式上传离线数据。

传感器类型 典型物理量 输出格式 典型采样率 应用场景
加速度计(IMU) 加速度 (g) int16 / float32 50-200 Hz 运动识别、跌倒检测、姿态估计
陀螺仪(IMU) 角速度 (dps) int16 / float32 50-200 Hz 旋转检测、手势识别
麦克风 声压 (Pa) PCM / WAV 8-16 kHz 语音命令、声音事件检测
温湿度传感器 温度(°C)/湿度(%RH) int16 / float32 0.5-10 Hz 环境监测、设备状态预测
PPG(光学心率) 光吸收量 int16 25-100 Hz 心率监测、压力评估

选型判断方法:首先明确任务类型——是分类(如识别手势)、回归(如预测温度)还是异常检测(如设备故障)。其次评估信号带宽:人体运动信号通常集中在0.5-20 Hz,语音信号在100 Hz-4 kHz,机械振动可达数百Hz。最后考虑MCU资源:采样率越高、通道数越多,内存占用和功耗越大。Edge Impulse Studio中,每个样本的原始数据大小可通过公式估算:样本大小 = 采样率 × 窗口时长 × 通道数 × 字节数。

经验提示:对于IMU数据,建议优先使用加速度计+陀螺仪组合(6轴),而非单独使用加速度计。6轴数据能提供更丰富的运动特征,在Edge Impulse的频谱特征提取中,角速度的频域特征往往对旋转类动作有更好的区分度。

3.2 数据格式与采样参数设计

数据格式规范:Edge Impulse Studio支持三种主流数据导入方式:(1)实时采集——通过串口或BLE从开发板直接获取数据流,平台自动封装为JSON格式;(2)CSV批量上传——每行代表一个时间戳的采样点,列对应各通道数据,需包含时间戳列(可选)和标签列(可选);(3)WAV音频上传——适用于麦克风数据,平台自动解析采样率和位深。数据格式的核心要求是通道顺序一致和单位统一,否则会导致特征计算错误。

// CSV格式示例(IMU 6轴数据)
timestamp,acc_x,acc_y,acc_z,gyro_x,gyro_y,gyro_z,label
0,0.12,-0.98,0.05,2.3,-1.2,0.8,idle
10,0.15,-0.95,0.08,2.8,-1.5,1.1,idle
20,0.18,-0.92,0.12,3.2,-1.8,1.4,wave_up
...

采样频率选择:根据奈奎斯特采样定理,采样频率必须大于信号最高频率的2倍。但工程实践中,建议取3-5倍以保证特征提取的稳定性。例如,手势识别中加速度信号主要能量在0.5-10 Hz,采样率设为50 Hz即可;而语音关键词识别需要捕捉4 kHz以下的频率成分,采样率至少8 kHz,Edge Impulse推荐16 kHz以获得更好的频谱分辨率。

窗口大小与重叠:窗口大小决定了每个样本包含的时间长度,直接影响特征提取的统计意义和模型推理的实时性。窗口过短(如20 ms)会导致特征不稳定,窗口过长(如5 s)则增加推理延迟和内存占用。Edge Impulse中,窗口大小通常设置为1-2秒,并配合窗口步长(滑动间隔)实现连续推理。窗口重叠率一般设为50%-75%,以平滑预测结果。

参数计算示例:假设使用IMU 6轴数据,采样率100 Hz,窗口大小2秒,窗口步长0.5秒(重叠75%)。每个样本包含100×2=200个采样点,每个采样点6个通道,每个通道float32(4字节),则单个样本原始数据大小为200×6×4=4800字节≈4.7 KB。若MCU RAM为256 KB,可同时缓存约54个样本,满足实时推理需求。

3.3 标签体系设计与数据平衡策略

标签体系设计原则:标签是监督学习的核心,其质量直接决定模型上限。Edge Impulse Studio支持两种标注模式:(1)样本级标签——整个样本属于一个类别,适用于动作分类、声音事件检测;(2)时间片段标签——在连续数据流中标注特定时间段,适用于异常检测、活动识别。标签设计需遵循互斥性(一个样本只能属于一个类别)、完整性(覆盖所有可能状态)、一致性(不同标注者对同一现象标注相同)。

数据平衡策略:类别不平衡是TinyML数据集的常见问题。例如,设备正常运行时间占95%,故障仅占5%,若直接训练,模型会偏向多数类。Edge Impulse提供了数据增强(如添加噪声、时间偏移、缩放)和重采样功能来缓解不平衡。更有效的策略是在采集阶段就控制各类别样本量,使每类样本数差异不超过20%。

平衡策略 适用场景 实现方法 注意事项
过采样(复制少数类) 少数类样本量极少 在Edge Impulse中复制样本或使用数据增强 可能导致过拟合,需配合正则化
欠采样(删除多数类) 多数类样本量过大 随机删除部分多数类样本 可能丢失重要信息
数据增强 所有类别 添加高斯噪声、时间扭曲、通道缩放 增强需符合物理规律
类别加权 训练阶段 在模型训练参数中设置class_weight Edge Impulse中需自定义训练配置
风险提示:数据增强并非万能。对于IMU数据,过度的随机噪声添加会破坏信号的真实物理特征,导致模型在真实场景中失效。建议增强幅度控制在原始信号幅值的5%-10%以内,且增强后的样本需人工抽检确认合理性。

3.4 案例拆解:工业设备振动监测数据集构建

背景与约束:某工厂需要构建一个基于TinyML的电机异常检测系统,使用加速度计监测设备振动。约束条件:MCU为Cortex-M4(192 KB RAM),采样率上限200 Hz,推理延迟要求小于100 ms,需区分正常、轴承磨损、转子不平衡三类状态。

初始现象与目标:初始采集数据时,正常状态样本占80%,两种故障状态各占10%,且故障样本采集时间集中在白天,正常样本全天分布。目标:构建一个类别均衡、时间覆盖全面的数据集,使模型在真实场景中F1分数达到0.9以上。

关键参数与操作步骤:

  1. 传感器配置:使用ADXL345加速度计,量程±16g,输出数据率200 Hz,3轴数据。
  2. 采样参数:窗口大小1秒(200个采样点),窗口步长0.5秒(50%重叠),每类采集200个样本。
  3. 标签设计:三类标签:normal、bearing_wear、rotor_unbalance,每个样本对应一个标签。
  4. 数据采集:在电机不同负载(空载、50%负载、满载)和不同转速(1200/1800/2400 RPM)下采集,每类样本覆盖3种负载×3种转速×约22个样本。
  5. 数据平衡:初始采集后,正常类有240个样本,两类故障各60个。使用Edge Impulse的数据增强功能,对故障样本添加5%高斯噪声和±10%时间缩放,各扩充至200个样本。
  6. 数据验证:在Edge Impulse的"Data Explorer"中检查特征分布,确认三类样本在PCA投影下可区分。

结果对比与复盘:平衡后的数据集训练出的模型在测试集上F1分数为0.93,相比未平衡数据集的0.78提升了19%。关键经验:(1)故障样本的采集必须覆盖不同工况,否则模型无法泛化;(2)数据增强需结合物理知识——轴承磨损的振动特征集中在高频段,时间缩放增强应保持频率特征不变;(3)窗口重叠率从50%提升到75%后,预测稳定性显著改善,但推理计算量增加约50%,需在MCU上实测验证。

复盘总结:高质量数据集的核心不是样本数量大,而是覆盖度广(不同工况、不同时间、不同设备)和标签准确。建议在正式采集前先做小规模预采集(每类20-30个样本),在Edge Impulse中快速验证特征可分性,再决定是否扩大采集规模。这能避免采集大量无效数据后才发现标签定义不清晰或采样参数不合理的问题。