3、数据采集基础:传感器类型、数据格式、采样频率、窗口大小、标签体系与数据平衡策略
在TinyML项目开发中,数据采集是决定模型性能上限的基石。Edge Impulse Studio作为端到端平台,其数据采集模块(Data Acquisition)不仅支持从手机、开发板、SD卡批量导入数据,还提供了完整的传感器配置、采样参数控制与标签管理能力。本章将系统讲解传感器类型与选型逻辑、数据格式规范、采样频率与窗口大小的工程权衡、标签体系设计方法以及数据平衡策略,帮助你在进入特征工程与模型训练之前,构建高质量、高可信度的数据集。
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中,每个样本的原始数据大小可通过公式估算:样本大小 = 采样率 × 窗口时长 × 通道数 × 字节数。
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%,以平滑预测结果。
3.3 标签体系设计与数据平衡策略
标签体系设计原则:标签是监督学习的核心,其质量直接决定模型上限。Edge Impulse Studio支持两种标注模式:(1)样本级标签——整个样本属于一个类别,适用于动作分类、声音事件检测;(2)时间片段标签——在连续数据流中标注特定时间段,适用于异常检测、活动识别。标签设计需遵循互斥性(一个样本只能属于一个类别)、完整性(覆盖所有可能状态)、一致性(不同标注者对同一现象标注相同)。
数据平衡策略:类别不平衡是TinyML数据集的常见问题。例如,设备正常运行时间占95%,故障仅占5%,若直接训练,模型会偏向多数类。Edge Impulse提供了数据增强(如添加噪声、时间偏移、缩放)和重采样功能来缓解不平衡。更有效的策略是在采集阶段就控制各类别样本量,使每类样本数差异不超过20%。
| 平衡策略 | 适用场景 | 实现方法 | 注意事项 |
|---|---|---|---|
| 过采样(复制少数类) | 少数类样本量极少 | 在Edge Impulse中复制样本或使用数据增强 | 可能导致过拟合,需配合正则化 |
| 欠采样(删除多数类) | 多数类样本量过大 | 随机删除部分多数类样本 | 可能丢失重要信息 |
| 数据增强 | 所有类别 | 添加高斯噪声、时间扭曲、通道缩放 | 增强需符合物理规律 |
| 类别加权 | 训练阶段 | 在模型训练参数中设置class_weight | Edge Impulse中需自定义训练配置 |
3.4 案例拆解:工业设备振动监测数据集构建
背景与约束:某工厂需要构建一个基于TinyML的电机异常检测系统,使用加速度计监测设备振动。约束条件:MCU为Cortex-M4(192 KB RAM),采样率上限200 Hz,推理延迟要求小于100 ms,需区分正常、轴承磨损、转子不平衡三类状态。
初始现象与目标:初始采集数据时,正常状态样本占80%,两种故障状态各占10%,且故障样本采集时间集中在白天,正常样本全天分布。目标:构建一个类别均衡、时间覆盖全面的数据集,使模型在真实场景中F1分数达到0.9以上。
关键参数与操作步骤:
- 传感器配置:使用ADXL345加速度计,量程±16g,输出数据率200 Hz,3轴数据。
- 采样参数:窗口大小1秒(200个采样点),窗口步长0.5秒(50%重叠),每类采集200个样本。
- 标签设计:三类标签:
normal、bearing_wear、rotor_unbalance,每个样本对应一个标签。 - 数据采集:在电机不同负载(空载、50%负载、满载)和不同转速(1200/1800/2400 RPM)下采集,每类样本覆盖3种负载×3种转速×约22个样本。
- 数据平衡:初始采集后,正常类有240个样本,两类故障各60个。使用Edge Impulse的数据增强功能,对故障样本添加5%高斯噪声和±10%时间缩放,各扩充至200个样本。
- 数据验证:在Edge Impulse的"Data Explorer"中检查特征分布,确认三类样本在PCA投影下可区分。
结果对比与复盘:平衡后的数据集训练出的模型在测试集上F1分数为0.93,相比未平衡数据集的0.78提升了19%。关键经验:(1)故障样本的采集必须覆盖不同工况,否则模型无法泛化;(2)数据增强需结合物理知识——轴承磨损的振动特征集中在高频段,时间缩放增强应保持频率特征不变;(3)窗口重叠率从50%提升到75%后,预测稳定性显著改善,但推理计算量增加约50%,需在MCU上实测验证。