4. 数据采集规范
TinyML时序项目的成败,往往在数据采集阶段就已注定。模型在板端推理时的鲁棒性、精度上限、功耗表现,甚至部署后的维护成本,都直接受制于采集数据的质量与规范性。本章聚焦数据采集的四个核心维度——传感器选型、采样频率设定、数据格式统一、原始数据记录要求,建立一套可执行、可审计、可复现的采集规范。这套规范不仅服务于模型训练,更直接关系到后续板端验证时“模型在实验室表现良好、上板后却失效”这一典型问题的规避。
4.1 传感器选型:从物理量到数字量的工程权衡
传感器选型不是“选一个能测到数据的器件”那么简单。在TinyML场景中,传感器直接决定了信号质量的上限,而信号质量又决定了模型能否学到有效特征。选型需要从物理量特性、接口适配、功耗预算、成本约束四个维度综合评估。
核心原理:传感器将物理量(加速度、温度、压力、电流等)转换为电信号,再经ADC量化为数字值。选型的关键指标包括:量程(满量程范围)、灵敏度(单位物理量对应的输出变化)、噪声密度(本底噪声水平)、带宽(可响应的最高频率)、线性度(输出与输入的比例关系偏差)、温漂(温度变化引起的零点/增益漂移)。对于TinyML时序项目,还需要额外关注:采样保持电路质量、数字接口时序稳定性、功耗模式切换延迟。
判断方法:选型流程建议按以下步骤执行:
- 明确物理量范围:根据应用场景确定被测物理量的最小/最大/典型值。例如工业电机振动监测,加速度量程应覆盖±16g(考虑冲击),而楼宇结构健康监测可能只需±2g。
- 分析信号带宽:通过查阅相关标准或实测频谱,确定信号的有效带宽。例如人体活动识别中,日常动作的主要能量集中在0.5Hz~10Hz,但步态冲击可能包含20Hz以上的分量。
- 评估噪声预算:计算传感器本底噪声经ADC量化后是否满足模型特征提取的需求。若噪声过大,即使模型结构再复杂,也难以从数据中提取有效特征。
- 接口与功耗匹配:确认传感器数字接口(I2C/SPI/模拟输出)与MCU外设兼容,并评估不同采样率下的功耗。对于电池供电设备,需计算传感器+MCU+无线传输的总功耗预算。
| 选型维度 | 关键参数 | 典型问题 | TinyML场景建议 |
|---|---|---|---|
| 量程 | 满量程范围 | 量程过小导致饱和削波 | 预留1.5~2倍余量 |
| 灵敏度 | LSB/g 或 LSB/°C | 灵敏度过低导致分辨率不足 | 结合ADC位数计算最小可分辨物理量 |
| 噪声 | 噪声密度 (µg/√Hz) | 噪声淹没微弱特征 | 噪声应低于信号最小幅度的1/10 |
| 带宽 | -3dB截止频率 | 带宽不足导致信号失真 | 带宽应≥采样频率的0.5倍 |
| 功耗 | 工作电流/待机电流 | 高采样率下功耗超预算 | 评估低功耗模式切换延迟 |
4.2 采样频率设定:Nyquist定理与工程折中
采样频率是TinyML时序项目中最容易被误设的参数。采样率过低会导致信号混叠,高频成分折叠到低频区域,产生虚假的“伪特征”;采样率过高则带来存储、功耗和计算负担,且对模型精度提升有限。
核心原理:根据Nyquist-Shannon采样定理,采样频率必须大于信号最高频率分量的2倍,才能无失真地重建信号。但实际工程中,由于信号并非严格带限,且存在噪声和谐波,通常建议采样频率为信号最高有效频率的5~10倍。例如,若关注的动作特征最高频率为20Hz,则采样率至少100Hz,推荐200Hz。
操作流程:设定采样频率的推荐步骤:
- 频谱预分析:使用高采样率(如1kHz)采集一段代表性数据,进行FFT分析,确定信号能量的主要分布范围。
- 确定有效带宽:找到包含90%以上信号能量的频率上限,记为f_max。
- 设定采样率:初始设定为f_s = 5 × f_max,然后逐步降低采样率,观察模型精度变化。
- 验证混叠:在降低采样率后,对比原始高采样率数据的频谱,确认没有出现明显的混叠伪峰。
- 考虑硬件限制:检查MCU的ADC采样率上限、传感器最大输出数据率、DMA传输带宽。
4.3 数据格式统一:Schema设计与数值约定
数据格式统一是数据采集规范中最“枯燥”却最关键的环节。格式不统一会导致训练代码反复修改、数据加载出错、模型评估结果不可复现。在TinyML项目中,由于数据量相对较小,格式问题往往在训练阶段被掩盖,直到板端部署时才集中爆发。
核心原理:数据格式统一包含三个层面:存储格式(文件类型、编码方式)、数值约定(单位、刻度、量化方式)、元数据规范(时间戳、传感器ID、采集条件)。存储格式决定数据如何被读取;数值约定决定数据如何被解释;元数据规范决定数据如何被追溯。
推荐的数据格式规范:
- 文件格式:推荐使用CSV或Parquet。CSV简单直观,适合小数据量;Parquet列式存储,适合较大数据集。避免使用二进制私有格式,除非有明确的性能需求。
- 数值类型:统一使用float32存储原始ADC值或物理量值。若使用int16存储,必须明确缩放因子(scale_factor)和零点偏移(offset)。
- 单位约定:所有数据统一转换为国际单位制(SI)。加速度使用m/s²,温度使用°C,压力使用Pa。避免混用g和m/s²、°C和°F。
- 时间戳:统一使用Unix时间戳(毫秒级),并记录时区。若使用相对时间,必须明确起始参考点。
- 通道顺序:多轴传感器(如3轴加速度计)固定通道顺序为X、Y、Z,并在元数据中明确标注。
# 推荐的数据文件头示例(CSV)
# sensor_id: IMU_01
# sensor_type: BMI270
# sampling_rate_hz: 200
# unit: m/s2
# scale_factor: 0.001
# offset: 0.0
# timestamp_start: 1710000000000
# timezone: UTC+8
timestamp_ms, acc_x, acc_y, acc_z, gyro_x, gyro_y, gyro_z
1710000000000, 0.012, -0.034, 9.812, 0.001, -0.002, 0.000
1710000000005, 0.015, -0.031, 9.815, 0.002, -0.001, 0.001
4.4 原始数据记录要求:可追溯性与审计
原始数据记录要求解决的是“数据从哪来、经过什么处理、是否可信”的问题。在TinyML项目中,原始数据是模型训练和验证的唯一依据,一旦记录不完整,后续任何分析都无法弥补。
核心原理:原始数据记录应满足可追溯性(从模型指标追溯到具体数据文件)、可复现性(他人按照记录能重新采集相同条件的数据)、完整性(不遗漏任何影响数据解释的信息)。
强制记录清单:
| 记录项 | 说明 | 示例 |
|---|---|---|
| 设备标识 | 传感器/开发板唯一ID | IMU_01, Board_A3 |
| 固件版本 | 采集程序版本号 | v1.2.0 |
| 环境条件 | 温度、湿度、光照等 | 25°C, RH 60% |
| 采集参数 | 采样率、量程、滤波设置 | 200Hz, ±16g, LPF 100Hz |
| 校准信息 | 最近校准日期、校准值 | 2024-03-01, offset=0.02 |
| 数据文件哈希 | SHA256校验值 | a3f2b8c9... |
操作流程:建议在采集程序中自动生成一个metadata.json文件,与原始数据文件存放在同一目录。采集完成后,程序自动计算数据文件的SHA256哈希值并写入metadata。任何数据预处理操作(滤波、重采样、去噪)都应生成新的数据文件,并保留原始文件不变。
raw_imu_01.csv → filtered_imu_01_v2.csv)。否则,一旦预处理逻辑有误,原始数据已不可恢复,整个数据集作废。
4.5 案例拆解:从采集规范到板端验证的完整闭环
以下案例展示数据采集规范如何直接影响TinyML项目的板端验证结果。
项目背景:某团队开发一个基于加速度计的跌倒检测系统,目标设备为Cortex-M4内核MCU,主频80MHz,内存64KB。团队在两周内完成了数据采集和模型训练,训练精度96%,但部署到板端后,误报率高达30%。
初始现象与排查过程:
- 第一步:检查数据格式。发现训练数据中加速度单位为g,而板端传感器配置为m/s²,数值相差9.8倍。模型在训练时学到的阈值完全失效。
- 第二步:检查采样率。训练数据采样率为100Hz,但板端实际配置为50Hz(为节省功耗)。跌倒冲击的主要频率成分在15~25Hz,50Hz采样率下部分高频特征被混叠。
- 第三步:检查原始记录。发现训练数据缺少传感器ID记录,无法确认是否使用了不同批次的传感器,存在灵敏度差异。
关键数据与参数:
- 训练数据:100Hz采样,单位g,3轴加速度,共12000条样本
- 板端配置:50Hz采样,单位m/s²,3轴加速度
- 模型输入:3秒窗口(训练时300个点,板端实际150个点)
实际操作步骤:
- 统一单位为m/s²,重新生成训练数据。
- 将采样率统一为100Hz,板端关闭低功耗模式或优化DMA传输以支持100Hz采样。
- 在数据记录中增加传感器ID字段,并重新采集部分数据以覆盖不同批次传感器。
- 重新训练模型,板端验证误报率降至4%。
结果对比与复盘:修复后板端精度从70%提升至96%,误报率从30%降至4%。复盘发现,问题根源在于数据采集阶段未建立统一的格式规范和采样率设定流程。若在项目启动时即执行本章所述规范,可节省约一周的调试时间。