Edge Impulse数据采集与预处理:上传数据集、数据切片、频谱特征提取、标签管理,以及数据增强策略
在Edge Impulse平台上完成一个可用的Keras模型导入与再训练,前提是拥有高质量、结构化的数据集。本章聚焦于数据进入模型之前的完整工程链路:从原始传感器数据上传,到时间序列切片、频谱特征提取、标签体系设计,再到数据增强策略。这一环节直接决定了后续Keras模型微调的上限——如果数据分布偏差过大或特征表达不足,再优秀的网络结构也无法收敛到理想精度。我们将以时间序列数据(加速度计、麦克风、电流信号等)为主线,系统拆解Edge Impulse的数据处理流水线。
4.1 数据上传:格式规范与元数据管理
核心原理:Edge Impulse的数据上传接口支持多种格式,但底层统一转换为内部时间序列格式。对于Keras模型导入场景,上传数据的采样率、通道数、时间戳必须严格一致,否则后续切片和特征提取会产生错位。平台要求每个数据样本关联一个“标签”(即类别),并允许附加元数据(如设备ID、采集环境、操作员)。元数据不直接参与训练,但可用于数据筛选和异常排查。
操作流程:
- 数据整理:将原始传感器数据导出为CSV(每列一个通道,第一列为时间戳或采样序号)或WAV(音频)。确保所有文件采样率一致,例如统一为16kHz或50Hz。
- 创建数据集:在Edge Impulse项目中选择“Data acquisition”标签页,点击“Upload data”,选择文件或拖拽上传。
- 标签分配:上传时可批量指定标签,也可上传后通过“Labeling”界面逐条修改。标签名称建议使用英文短词(如“idle”、“cutting”、“drilling”),避免特殊字符。
- 元数据补充:在CSV文件名中嵌入设备ID和场景信息(如“deviceA_bench1.csv”),或使用平台的“Metadata”功能添加键值对。
4.2 数据切片:窗口长度与滑动步长的权衡
核心原理:时间序列数据必须被切割成固定长度的窗口,才能输入神经网络。窗口长度决定了模型感知的时间范围,步长决定了相邻窗口的重叠程度。窗口过短会丢失低频模式,过长则引入过多噪声且增加计算量;步长过小导致数据冗余,过大则可能漏掉关键事件边界。
判断方法:
- 事件持续时间:如果目标动作持续0.5~1秒,窗口长度设为1~2秒较为合适;若为连续状态监测(如电机振动),窗口可设为2~5秒。
- 采样率与频率分辨率:FFT的频率分辨率 = 采样率 / 窗口样本数。例如采样率100Hz,窗口2秒(200个样本),频率分辨率为0.5Hz,足以区分常见的旋转机械故障频率。
- 重叠率:推荐50%~75%重叠。重叠率越高,训练样本越多,但需注意防止过拟合。
操作流程:在Edge Impulse的“Processing”页面选择“Time series data”模块,设置窗口长度(ms)和步长(ms)。平台会实时显示切片后的样本总数和类别分布。
4.3 频谱特征提取:从时域到频域的转换
核心原理:Edge Impulse内置了多种特征提取算法,最常用的是FFT(快速傅里叶变换)和Mel频谱。FFT将时域信号分解为频率分量,适合振动、电流等周期性信号;Mel频谱模拟人耳对频率的非线性感知,更适合音频和语音。特征提取的目的是将原始波形压缩为低维向量,同时保留对分类任务最有效的信息。
对比表:
| 特征类型 | 适用场景 | 输出维度 | 计算开销 | Edge Impulse配置 |
|---|---|---|---|---|
| 原始波形(无特征) | 端到端深度学习 | 窗口长度×通道数 | 低 | 不推荐,需自行展平 |
| FFT频谱 | 振动、电流、声学 | 窗口长度/2 | 中 | 选择“FFT”模块,可配置窗函数 |
| Mel频谱 | 语音、环境声音 | Mel频带数(如40) | 中高 | 选择“Mel”模块,设置频带数和频率范围 |
| 统计特征 | 简单分类、基线检测 | 均值、方差、峰值等 | 低 | 选择“Statistical”模块 |
操作流程:在“Processing”页面添加特征提取块,选择算法并调整参数。建议先使用默认参数生成特征,在“Feature explorer”中可视化特征分布,观察类别是否可分。若重叠严重,可尝试增加FFT点数、使用对数缩放或组合多种特征。
4.4 标签管理:类别定义与数据平衡
核心原理:标签是监督学习的“答案”。Edge Impulse支持两种标注模式:时间点标注(每个切片一个标签)和边界标注(在连续数据流中标记事件起止)。对于Keras模型导入,通常使用时间点标注,即每个切片独立分类。标签管理的核心是确保类别互斥、覆盖所有可能状态,并保持类别间样本量均衡。
判断方法:
- 类别互斥:例如“正常运行”和“故障运行”必须明确区分,不能存在模糊状态。
- 覆盖完整性:考虑所有可能出现的工况,包括待机、启动、停机等过渡状态,否则模型会将未知状态强行归为已知类别。
- 平衡性检查:在“Data explorer”中查看每个类别的样本数。若某类样本少于其他类的20%,需补充采集或使用数据增强。
操作流程:在“Labeling”界面,选择数据文件,使用时间轴工具框选事件区域并分配标签。对于长录音,可先自动分割再手动修正边界。Edge Impulse支持标签的批量重命名和合并,便于调整类别体系。
4.5 数据增强策略:提升泛化能力的关键
核心原理:数据增强通过对原始样本施加不影响语义的变换,生成新的训练样本,从而扩大数据分布覆盖范围,抑制过拟合。Edge Impulse支持在特征提取前(原始波形)或特征提取后(频谱)进行增强。时域增强更自然,但计算开销大;频域增强(如SpecAugment)效率高,适合音频和振动信号。
常用策略清单:
| 增强方法 | 操作描述 | 适用信号 | 注意事项 |
|---|---|---|---|
| 高斯加噪 | 添加随机噪声,信噪比10~30dB | 所有传感器 | 噪声幅度不宜过大,否则改变信号本质 |
| 时间缩放 | 拉伸或压缩时间轴(0.8~1.2倍) | 振动、电流 | 需同步调整标签边界 |
| 时间扭曲 | 局部时间轴非线性变形 | 语音、生物信号 | 实现复杂,Edge Impulse需自定义代码 |
| 通道扰动 | 随机交换或缩放多轴通道 | 加速度计、陀螺仪 | 保持通道间物理关系,避免破坏空间特征 |
| SpecAugment | 在频谱图上随机掩蔽频率带或时间带 | 音频、频谱特征 | 掩蔽宽度不宜超过总带宽的20% |
操作流程:在Edge Impulse的“Processing”页面,启用“Data augmentation”选项,选择增强类型并设置参数。平台会在每次训练迭代时动态生成增强样本,不增加存储开销。对于Keras自定义模型,也可在模型代码中通过TensorFlow的tf.data API实现更灵活的增强。
# 在Edge Impulse的Keras回调中自定义增强示例
import tensorflow as tf
def augment(x, y):
# 以50%概率添加高斯噪声
if tf.random.uniform(()) > 0.5:
noise = tf.random.normal(shape=tf.shape(x), stddev=0.05)
x = x + noise
# 时间缩放(通过resize实现)
if tf.random.uniform(()) > 0.5:
new_len = tf.cast(tf.shape(x)[0] * tf.random.uniform((), 0.8, 1.2), tf.int32)
x = tf.image.resize(tf.expand_dims(x, -1), [new_len, tf.shape(x)[1]])
x = tf.image.resize(x, [tf.shape(x)[0], tf.shape(x)[1]])
x = tf.squeeze(x, -1)
return x, y
# 在模型训练时使用增强
train_ds = train_ds.map(augment, num_parallel_calls=tf.data.AUTOTUNE)
4.6 总结复盘:数据预处理的工程要点
核心原理:数据预处理不是一次性任务,而是需要与模型训练结果反复迭代的闭环。每次调整切片参数、特征类型或增强策略后,都应重新训练并对比验证集指标。Edge Impulse的“Model testing”功能可快速评估不同预处理配置的效果。
关键检查清单:
- 采样率是否一致?是否存在缺失值或异常尖峰?
- 窗口长度是否覆盖目标事件的最短持续时间?
- 特征提取后,类别在特征空间中是否线性可分?
- 标签是否完整覆盖所有工况?类别样本量是否均衡?
- 增强策略是否在验证集上带来稳定的准确率提升?
总结:数据采集与预处理是Edge Impulse Keras模型导入的基石。上传阶段要严格规范格式和元数据;切片阶段要权衡窗口长度与步长;特征提取要匹配信号类型和任务需求;标签管理要保证类别完备与平衡;数据增强要适度且验证有效。建议每次修改预处理配置后,记录对应的验证集指标,形成实验日志,便于追溯最优配置。下一阶段,我们将基于处理好的数据集,进行Keras模型的导入与结构适配。