3、数据采集与预处理:传感器数据采集、数据清洗、时间序列与图像数据的基本处理

在Edge Impulse平台上构建可靠的机器学习模型,数据采集与预处理是决定模型性能上限的关键环节。传感器数据往往带有噪声、缺失值、时间戳抖动或量纲差异,而图像数据则面临光照变化、尺寸不一致和标注噪声等问题。本章将系统讲解从物理传感器到可训练数据集的完整处理链路,涵盖数据采集策略、清洗方法、时间序列特征工程以及图像数据的基本增强与归一化技术,帮助你在进入模型训练之前,建立高质量的数据基础。

① 数据采集 传感器选型与采样率 多通道同步/时间戳 场景覆盖与标注 ② 数据清洗 缺失值/异常值处理 去噪与滤波 去重与时间对齐 ③ 数据变换 时间序列:窗口/FFT 图像:缩放/归一化 数据增强 Edge Impulse 训练数据集 DSV格式 / 图像文件夹 / 元数据JSON 关键检查点 采样率 ≥ 2×信号最高频率 | 每类样本 ≥ 50条 | 时间戳对齐误差 < 1ms 图像分辨率统一 | 标注一致性 ≥ 95% | 训练/验证集分布一致

3.1 传感器数据采集:从物理世界到数字信号

核心原理

传感器数据采集的本质是将物理量(加速度、温度、压力、光强等)转换为可计算的数字信号。这一过程涉及三个关键参数:采样率(每秒采集次数)、分辨率(ADC位数)和量程(可测量的物理范围)。根据奈奎斯特采样定理,采样率必须至少为信号最高频率成分的两倍,才能无失真地重建原始信号。例如,人体运动频率通常在0.5Hz~20Hz之间,IMU(惯性测量单元)采样率设置为50Hz~100Hz即可满足大多数活动识别需求;而音频信号频率可达20kHz,采样率则需达到44.1kHz以上。

在Edge Impulse工作流中,数据采集通常通过以下三种途径完成:Edge Impulse Studio内置采集器(通过USB或BLE连接开发板)、移动设备采集(利用手机内置传感器)、CSV文件上传(从已有数据集导入)。无论采用哪种方式,都需要确保数据带有准确的时间戳和类别标签。

操作流程

  1. 传感器选型与配置:根据任务类型选择传感器(加速度计、麦克风、摄像头等),设置合适的量程和采样率。例如,振动监测建议量程±16g,采样率1kHz;语音识别则需16kHz采样率。
  2. 多通道同步:当使用多个传感器时,需确保各通道时间戳对齐。Edge Impulse支持通过DSV(分隔符分隔值)格式导入多列数据,每列代表一个传感器通道。
  3. 场景覆盖:采集数据时需覆盖目标场景的全部变化范围。例如,训练跌倒检测模型时,应包含不同方向、不同速度、不同身体姿态的跌倒样本,同时也要采集日常活动(走路、坐下、弯腰)作为负样本。
  4. 标注策略:在Edge Impulse中,可以通过时间区间标注(labeling)为连续数据流打标签。建议每个类别至少采集50~100个样本片段,每个片段长度根据任务设定(通常为1~5秒)。
经验提醒:采集数据时,务必记录传感器的安装位置和方向。同一传感器在不同安装位置(如手腕vs.腰部)产生的数据分布差异巨大,这会导致模型在部署时性能下降。建议在数据采集阶段就固定安装位置,并在数据集的元数据中记录这些信息。

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

某工厂需要预测电机轴承故障,使用Edge Impulse训练分类模型。初始方案是使用单个加速度计,采样率2kHz,量程±16g。采集了正常状态和三种故障状态(内圈磨损、外圈磨损、滚动体损坏)各30分钟数据。但在初步训练后发现模型准确率仅72%。分析原因发现:采样率过高导致数据量过大(2kHz×60秒×4类=480,000个样本点),而Edge Impulse免费版有数据量限制;同时,故障特征主要集中在1kHz以下,过高的采样率引入了大量高频噪声。

优化方案:将采样率降至1kHz,量程调整为±8g(更匹配振动幅值),每类采集15分钟数据,并采用滑动窗口(窗口长度2秒,步长0.5秒)生成训练样本。调整后数据量减少75%,模型准确率提升至94%。此案例说明,采样率并非越高越好,应根据信号特征和任务需求合理选择。

3.2 数据清洗:去除噪声与异常

核心原理

传感器数据在采集过程中不可避免地会引入噪声和异常值。噪声来源包括:电磁干扰、机械振动、温度漂移、量化误差等。异常值则可能由传感器瞬时故障、通信丢包或人为误操作导致。数据清洗的目标是在不损失有效信息的前提下,尽可能去除噪声和异常,使数据分布更接近真实物理过程。

常见的数据清洗方法包括:缺失值处理(删除、插值、填充)、异常值检测(3σ原则、IQR法、基于模型的方法)、滤波去噪(移动平均、中值滤波、低通滤波)以及时间对齐(重采样、插值)。

判断方法与操作流程

问题类型检测方法处理策略适用场景
缺失值检查时间戳连续性、数据流空洞线性插值 / 前向填充 / 删除片段通信丢包、传感器瞬时断电
离群点3σ原则、箱线图(IQR)截断 / 替换为中位数 / 标记为异常类传感器尖峰、外部冲击
高频噪声频谱分析、功率谱密度低通滤波(Butterworth、FIR)电磁干扰、机械共振
基线漂移趋势项检测、多项式拟合高通滤波 / 去趋势温度变化、传感器老化
时间戳抖动相邻时间戳差值统计重采样到固定频率操作系统调度延迟

在Edge Impulse中,数据清洗通常在采集后、上传前完成。可以使用Python脚本(pandas、numpy)进行预处理,也可以利用Edge Impulse内置的Processing Block(如Spectral Analysis、Flatten)在训练流水线中实时处理。

风险提示:过度清洗可能导致信息丢失。例如,对振动信号使用过强的低通滤波(截止频率过低)会滤除故障特征频率,导致模型无法区分故障类型。建议在清洗前后对比数据分布和模型性能,确保清洗操作没有破坏关键特征。

实战场景:可穿戴设备心率数据清洗

某健康监测项目使用光电体积描记法(PPG)传感器采集心率数据,采样率25Hz。原始数据包含大量运动伪影(手臂摆动导致)和偶发信号丢失。清洗流程如下:

  1. 缺失值处理:检测到连续超过2秒无数据的时间段,标记为无效区间并删除;短于0.5秒的缺失使用线性插值填充。
  2. 运动伪影去除:使用带通滤波器(0.5Hz~4Hz)滤除低频运动干扰和高频噪声,保留心率频段。
  3. 异常值检测:计算每个滑动窗口(10秒)内的平均心率,若某点偏离均值超过3σ,则视为异常并替换为窗口内中位数。
  4. 时间对齐:将数据重采样到统一的25Hz网格,确保时间戳均匀分布。

清洗后,数据信噪比从8dB提升至15dB,模型在心率估计任务上的平均误差从12次/分钟降至4次/分钟。此案例表明,针对信号特点设计清洗流程比使用通用方法更有效。

3.3 时间序列数据的基本处理

核心原理

时间序列数据是传感器采集的主要形式,具有时间依赖性和多通道性两个核心特征。在Edge Impulse中,时间序列处理通常包括三个步骤:窗口化(将连续数据流切分为固定长度的样本)、特征提取(从每个窗口中计算统计特征或频域特征)以及数据增强(增加样本多样性)。

窗口长度的选择直接影响模型性能:窗口过短会丢失时间上下文信息,窗口过长则引入无关数据并增加计算量。对于活动识别任务,窗口长度通常为1~5秒;对于语音识别,窗口长度通常为20~50ms(帧)并配合重叠。

操作流程

  • 窗口化:使用滑动窗口将连续数据切分为样本。窗口长度W和步长S决定了样本数量和重叠率。重叠率=(W-S)/W,通常设置为50%~75%以增加样本数量。
  • 特征提取:Edge Impulse提供多种特征提取方法:
    • 时域特征:均值、方差、峰值、均方根(RMS)、过零率、波形因子等。
    • 频域特征:FFT频谱、功率谱密度、频谱质心、频带能量等。
    • 时频特征:短时傅里叶变换(STFT)、小波变换(适用于非平稳信号)。
  • 数据增强:对于时间序列,常用的增强方法包括:添加高斯噪声、时间缩放、时间平移、幅度缩放、通道交换(多通道时)等。增强可以提升模型的泛化能力,但需注意不要改变类别本质特征。
# 示例:使用Python进行时间序列窗口化与特征提取
import numpy as np
import pandas as pd

def sliding_window(data, window_size, step_size):
    """将一维时间序列切分为窗口样本"""
    samples = []
    for i in range(0, len(data) - window_size + 1, step_size):
        samples.append(data[i:i+window_size])
    return np.array(samples)

# 假设data为加速度计x轴数据,采样率50Hz,窗口2秒,步长0.5秒
data = pd.read_csv('accel_data.csv')['x'].values
window_size = 100  # 2秒 × 50Hz
step_size = 25     # 0.5秒 × 50Hz
windows = sliding_window(data, window_size, step_size)

# 计算每个窗口的时域特征
features = []
for w in windows:
    features.append([
        np.mean(w), np.std(w), np.max(w), np.min(w),
        np.sqrt(np.mean(w**2)),  # RMS
        np.sum(np.diff(np.sign(w)) != 0) / len(w)  # 过零率
    ])

案例拆解:人体活动识别(HAR)数据预处理

使用Edge Impulse训练一个区分走路、跑步、上楼梯、下楼梯的四分类模型。原始数据来自手机加速度计(三轴),采样率50Hz。预处理流程:

  1. 窗口化:窗口长度2秒(100个采样点),步长0.5秒(25个采样点),重叠率75%。每类采集10分钟数据,生成约960个样本。
  2. 特征提取:选择Edge Impulse的"Spectral Analysis"处理块,自动计算每个窗口的FFT频谱特征(频率范围0~25Hz,分辨率0.5Hz)。同时手动添加时域特征(均值、方差、RMS)。
  3. 数据增强:对跑步样本添加±5%的幅度缩放和±2%的时间缩放,模拟不同速度的跑步;对上下楼梯样本添加少量高斯噪声(σ=0.02g),模拟传感器安装松动。
  4. 数据分割:按80/20比例划分训练集和验证集,确保同一受试者的数据不会同时出现在两个集合中(避免数据泄漏)。

最终模型在验证集上准确率达到96.5%,相比未增强的基线(91.2%)提升了5.3个百分点。此案例展示了窗口化、特征提取和数据增强在时间序列任务中的综合应用。

3.4 图像数据的基本处理

核心原理

图像数据在Edge Impulse中主要用于视觉识别任务(物体检测、图像分类、缺陷检测)。与时间序列不同,图像数据具有空间结构和高维度特点。图像预处理的目标是:统一尺寸、增强对比度、减少光照影响、增加数据多样性。

Edge Impulse支持两种图像输入方式:静态图像上传(适用于分类任务)和视频流采集(适用于实时检测)。图像预处理通常在训练流水线的"Image"处理块中完成,包括缩放、裁剪、归一化和数据增强。

操作流程

处理步骤方法参数建议注意事项
尺寸统一双线性插值缩放 / 中心裁剪96×96或160×160像素保持宽高比,避免拉伸变形
归一化像素值除以255 / 标准化[0,1]或[-1,1]与预训练模型要求一致
颜色空间RGB / 灰度 / HSV根据任务选择灰度可减少计算量,但丢失颜色信息
数据增强随机旋转、翻转、亮度调整、裁剪旋转±15°,翻转概率0.5增强需保持类别语义不变
标注格式Bounding Box / 多边形分割目标检测用矩形框标注一致性需人工审核

实战场景:工业零件表面缺陷检测

某制造企业使用Edge Impulse训练模型检测金属零件表面的划痕、凹坑和锈蚀。原始图像由工业相机拍摄,分辨率1920×1080,包含大量背景干扰。预处理方案:

  1. 感兴趣区域(ROI)提取:通过边缘检测和形态学操作裁剪出零件区域,去除背景。
  2. 尺寸统一:将ROI缩放至128×128像素,保持宽高比,不足部分用黑色填充。
  3. 归一化:像素值除以255,映射到[0,1]区间。
  4. 数据增强:对每张原始图像生成4个增强版本:随机旋转±10°、水平翻转、亮度调整(±20%)、高斯模糊(σ=0.5)。增强后数据集从500张扩展到2500张。
  5. 类别平衡:由于正常样本远多于缺陷样本,对缺陷类别进行过采样(复制+增强),确保每类样本数量接近。

训练后的模型在测试集上达到98.2%的准确率,误检率(将正常零件判为缺陷)仅为1.5%。此案例说明,ROI提取和针对性的数据增强是工业视觉任务成功的关键。

总结复盘:数据采集与预处理是Edge Impulse模型训练中最耗时但回报最高的环节。核心要点包括:(1)采样率和量程需根据信号特征和任务需求合理设计,并非越高越好;(2)数据清洗应针对具体噪声来源设计流程,避免过度处理;(3)时间序列处理需重视窗口长度、重叠率和特征选择;(4)图像处理需统一尺寸、归一化并合理使用数据增强。建议在每次训练前,先对数据进行可视化检查(如绘制波形图、频谱图或图像缩略图),确认数据质量后再进入模型训练阶段。