3、数据采集与上传:使用手机、开发板或CSV文件采集数据,上传至Edge Impulse项目,数据标签与数据集划分

在Edge Impulse的完整工作流中,数据采集与上传是决定模型性能上限的基石。无论后续的特征工程多么精巧、神经网络结构多么先进,如果输入的数据在数量、质量、标签准确性或分布代表性上存在缺陷,最终部署到边缘设备上的TFLite模型都难以达到预期的识别精度与鲁棒性。本章将系统讲解从物理世界到云端项目的三条数据通路——手机传感器采集、开发板(以STM32、ESP32、Arduino Nano 33 BLE Sense等典型硬件为例)采集以及CSV文件批量导入,并深入剖析数据标签规范与数据集划分策略,帮助您建立一套科学、可复现的数据工程方法论。

数据源采集 Edge Impulse 项目 数据准备与验证 📱 手机采集 加速度/陀螺仪/麦克风 Edge Impulse 手机App Wi-Fi 实时上传 🔧 开发板采集 STM32/ESP32/Arduino 串口/蓝牙传输 Edge Impulse SDK 📄 CSV 文件导入 历史数据/公开数据集 批量上传CSV 时间序列/图像元数据 数据标签管理 标签名称规范 标签类别平衡 时间序列窗口标注 异常样本标记 数据质量审核 数据集划分 训练集 (Train) 验证集 (Validation) 测试集 (Test) 按设备/时间段划分 避免数据泄漏 数据完整性检查 样本时长/频率一致性 缺失值/异常值检测 传感器范围校验 标签分布可视化 数据增强策略 导出与部署准备 生成TFLite模型 量化校准数据集 边缘设备测试 迭代优化 迭代反馈:数据质量评估 → 补充采集 → 重新训练 关键指标 样本量 ≥ 每类100+ 采样率 50Hz-1kHz 窗口长度 1-5秒 标签一致性 ≥ 95%

上图展示了从三种数据源到Edge Impulse项目,再到数据准备与验证的完整工程链路。可以看到,数据采集并非简单的“录一段信号传上去”,而是涉及设备选择、采样参数配置、传输协议、标签体系设计以及数据集划分策略的系统工程。下面我们将逐一展开每个环节的具体操作与决策要点。

3.1 数据采集的三种主流方式与适用场景

3.1.1 手机采集:快速原型验证的首选

Edge Impulse官方提供了iOS和Android手机应用,能够直接调用手机内置的加速度计、陀螺仪、磁力计以及麦克风。手机采集的最大优势在于零硬件成本和极低的入门门槛——您只需要一部智能手机,即可在几分钟内完成从采集到上传的全流程。手机采集特别适用于运动识别(如步态分析、手势识别)、声音事件检测(如咳嗽识别、环境声音分类)等场景的快速原型验证。

操作流程如下:

  1. 在手机应用商店搜索“Edge Impulse”并安装,使用Edge Impulse账号登录。
  2. 在应用中创建或选择已有的项目,进入“Data acquisition”页面。
  3. 选择传感器类型(加速度计、陀螺仪或麦克风),设置采样频率(建议50Hz-200Hz用于运动数据,16kHz用于音频)和样本时长(通常1-5秒)。
  4. 点击“Start sampling”按钮,按照屏幕提示执行动作(如摇晃手机、画特定手势、发出特定声音)。
  5. 采样完成后,为样本输入标签名称(如“idle”、“wave”、“clap”),点击“Upload”上传至项目。
经验提醒:手机采集时,尽量保持手机握持姿势一致,避免因握持方式不同引入额外噪声。对于运动类数据,建议在多个方向(上下、左右、前后)分别采集,以增强模型对方向变化的鲁棒性。每个类别至少采集100个样本,每个样本时长2-3秒,这样在后续训练时才能获得足够的统计稳定性。

3.1.2 开发板采集:面向真实部署场景的数据获取

当项目需要部署到嵌入式设备时,使用开发板采集数据是更贴近实际运行环境的选择。Edge Impulse支持多种主流开发板,包括STM32系列(如B-L475E-IOT01A)、ESP32系列、Arduino Nano 33 BLE Sense、Sony Spresense等。开发板采集的核心优势在于传感器型号与部署目标一致,采集到的数据分布与最终推理时的数据分布高度吻合,从而避免因传感器差异导致的域偏移(Domain Shift)问题。

开发板采集通常有两种模式:

  • 串口模式:开发板通过USB连接电脑,使用Edge Impulse CLI工具或串口助手将传感器数据实时传输到电脑,再由Edge Impulse桌面端或Web端上传。这种方式适合采样率较高(>1kHz)或需要实时监控数据质量的场景。
  • SD卡模式:开发板将采集的数据以CSV格式写入SD卡,之后统一导入电脑并上传。这种方式适合户外或无法连接电脑的场景,但无法实时查看数据质量。

以STM32 B-L475E-IOT01A为例,其板载的LSM6DSL惯性测量单元(IMU)支持加速度计和陀螺仪,采样率最高可达6.66kHz。在Edge Impulse中,您只需在开发板上烧录官方固件,然后通过USB串口连接,即可在Web界面中直接控制采样参数并实时上传数据。

风险提示:开发板采集时,务必注意传感器量程设置。例如,加速度计量程通常有±2g、±4g、±8g、±16g可选。如果量程设置过小,剧烈运动时数据会截断(clipping),导致信息丢失;如果量程设置过大,小幅度动作的量化噪声会增大。建议根据实际应用场景的运动剧烈程度选择合适的量程,并在采集前用示波器或串口打印验证数据范围。

3.1.3 CSV文件导入:利用历史数据与公开数据集

对于已有历史数据或需要使用公开数据集的场景,Edge Impulse支持通过CSV文件批量导入数据。CSV文件需要遵循特定的格式要求:每一行代表一个时间步的采样点,每一列代表一个传感器通道(如acc_x、acc_y、acc_z),文件头部可以包含列名。对于时间序列数据,Edge Impulse会自动按行顺序拼接成样本窗口。

CSV导入的典型应用场景包括:

  • 使用公开数据集(如UCI Human Activity Recognition数据集)进行算法验证。
  • 将实验室采集的高精度设备数据(如生物信号采集仪)导入Edge Impulse进行模型训练。
  • 将之前项目积累的历史数据迁移到新项目中,避免重复采集。

导入时需要注意:CSV文件中的时间戳列(如果存在)需要删除或转换为相对时间,因为Edge Impulse会自动按行顺序处理数据。同时,CSV文件大小建议控制在50MB以内,如果数据量较大,可以分多个文件上传。

采集方式 适用场景 优势 局限性 推荐采样率
手机采集 快速原型、运动/声音识别 零硬件成本、上手快 传感器型号不固定、部署时需重新采集 50-200Hz(运动),16kHz(音频)
开发板采集 嵌入式部署、传感器一致性要求高 传感器与部署目标一致、数据分布匹配 需要硬件准备、采集效率较低 100Hz-1kHz(IMU),16kHz(麦克风)
CSV导入 历史数据复用、公开数据集验证 批量导入、支持高精度设备数据 格式要求严格、无法实时监控 取决于原始数据采样率

3.2 数据标签规范与类别设计

数据标签是监督学习的“标准答案”,标签质量直接决定了模型能够学到的决策边界。在Edge Impulse中,标签设计需要遵循以下原则:

3.2.1 标签命名规范

标签名称应使用小写字母、数字和下划线的组合,避免使用空格、特殊字符或中文。例如,使用“idle”、“walking”、“running”而不是“Idle State”、“走路”。这是因为标签名称会直接嵌入到训练代码和TFLite模型的输出张量中,简洁的命名有助于后续的部署和调试。同时,标签名称应具有语义明确性,避免使用“class1”、“label2”这类无意义的命名。

3.2.2 类别平衡与样本量

类别不平衡是边缘AI项目中最常见的数据问题之一。如果某个类别的样本量远少于其他类别,模型会倾向于将输入预测为多数类,导致少数类的召回率极低。Edge Impulse提供了数据平衡的可视化工具,在“Data acquisition”页面可以直观地看到每个类别的样本数量分布。

对于大多数分类任务,建议每个类别至少采集100个样本,且各类别样本量差异不超过20%。如果某些类别天然难以采集(如异常事件),可以采用以下策略:

  • 数据增强:对已有样本添加噪声、时间偏移、幅度缩放等变换,生成更多变体。
  • 合成少数类样本:使用SMOTE等算法在特征空间生成合成样本(需在特征工程阶段处理)。
  • 调整损失函数:在训练阶段使用类别权重,提高少数类的惩罚系数。

3.2.3 时间序列数据的窗口标注

对于连续时间序列数据(如传感器流),Edge Impulse采用滑动窗口的方式将长序列切分为固定长度的样本。窗口长度(Window Size)和滑动步长(Window Stride)是两个关键参数。窗口长度决定了模型每次推理所观察的时间范围,通常设置为1-5秒;滑动步长决定了相邻窗口的重叠程度,通常设置为窗口长度的50%-75%以增加样本数量。

在标注连续数据时,需要特别注意边界样本的处理。例如,在标注“走路”和“跑步”的连续数据时,从走路切换到跑步的过渡段可能包含两种状态的混合特征。建议在过渡段前后各留出0.5秒的缓冲区域,不进行标注,或者将过渡段单独标注为“transition”类别,避免模型学习到模糊的边界特征。

案例拆解:假设我们要构建一个基于加速度计的人体活动识别模型,需要区分“静止”、“走路”、“跑步”三个类别。我们使用手机采集数据,采样频率设为100Hz,窗口长度设为2秒(即200个采样点),滑动步长设为1秒(即50%重叠)。每个类别采集150个样本,总计450个样本。在标注时,我们要求采集者在每个动作开始前保持静止1秒,动作结束后再静止1秒,这样在切分窗口时,每个窗口内的数据都相对纯净。最终,我们获得了450个训练样本,每个样本包含200行×3列(acc_x, acc_y, acc_z)的数据矩阵。这个数据集在Edge Impulse中可以直接用于训练一个2D卷积神经网络或LSTM模型。

3.3 数据集划分策略与验证集设计

Edge Impulse默认将上传的数据按比例划分为训练集(Train)、验证集(Validation)和测试集(Test)。默认比例为80%训练、10%验证、10%测试,但这一比例需要根据数据量和任务复杂度进行调整。

3.3.1 三种数据集的职责

  • 训练集:用于模型参数的学习,是模型“看到”并从中提取规律的数据。
  • 验证集:用于模型超参数的调优和早停(Early Stopping)判断,帮助选择最佳模型版本。验证集不参与参数学习,但参与模型选择。
  • 测试集:用于最终评估模型的泛化能力,模拟模型在未见数据上的表现。测试集在训练过程中完全不可见,仅在模型定型后使用一次。

3.3.2 按设备或时间段划分的重要性

在边缘AI项目中,一个常见的错误是随机划分数据集,导致同一设备或同一时间段的数据同时出现在训练集和测试集中。这会造成数据泄漏(Data Leakage),使得测试集评估结果过于乐观,而实际部署时性能大幅下降。正确的做法是按设备或时间段划分:

  • 按设备划分:如果有多个采集设备(如3部手机),将其中2部设备的数据用于训练,1部设备的数据用于测试。这样可以验证模型对不同传感器个体差异的鲁棒性。
  • 按时间段划分:如果数据是在不同日期采集的,将前几天的数据用于训练,最后一天的数据用于测试。这样可以验证模型对时间漂移的鲁棒性。

Edge Impulse在“Data acquisition”页面提供了“Split”选项,您可以选择“Balanced”模式(按类别比例随机划分)或“Per-device”模式(按设备划分)。对于大多数项目,建议至少使用“Per-device”模式进行一次验证,以评估模型的跨设备泛化能力。

3.3.3 数据划分的实操步骤

  1. 在Edge Impulse项目中选择“Data acquisition”页面,点击右上角的“Split”按钮。
  2. 选择划分策略:Balanced(默认)或 Per-device。
  3. 设置训练集、验证集、测试集的比例。对于小数据集(<500样本),建议使用70%训练、15%验证、15%测试;对于大数据集(>5000样本),可以使用90%训练、5%验证、5%测试。
  4. 点击“Save split”保存划分结果。Edge Impulse会为每个样本分配一个“Train/Validation/Test”标记,并在后续的特征工程和模型训练中自动使用这些标记。
风险说明:在调整数据集划分比例时,务必确保每个类别在训练集、验证集和测试集中都有足够的样本。如果某个类别在测试集中只有1-2个样本,评估结果将具有极大的随机性,无法反映模型的真实性能。建议每个类别在测试集中至少保留10个样本。

3.4 数据质量检查与常见误区

数据质量检查是数据上传后、模型训练前必须执行的关键步骤。Edge Impulse提供了“Data quality”页面,可以查看每个样本的波形图、频谱图以及统计特征(均值、方差、峰值等)。以下是常见的数据质量问题和对应的排查方法:

常见问题 现象 可能原因 排查方法
数据截断 波形出现平顶或削波 传感器量程设置过小 检查波形峰值是否接近量程上限,调整量程后重新采集
缺失值 波形中出现零值或跳变 传输丢包、传感器初始化失败 检查串口连接稳定性,增加重传机制
标签错误 同类样本波形差异极大 采集时动作执行不规范 重新采集或删除异常样本
采样率不一致 样本时长相同但采样点数不同 系统负载导致采样周期抖动 使用实时操作系统或增加缓冲区
环境噪声 波形叠加高频毛刺 电源干扰、电磁耦合 使用屏蔽线、增加滤波电路

在完成数据质量检查后,建议使用Edge Impulse的“Data explorer”功能进行数据可视化。该功能使用PCA或t-SNE算法将高维特征降维到2D平面,帮助您直观地观察不同类别样本的分布情况。如果发现某些类别的样本在特征空间中严重重叠,说明这些类别的区分度不足,需要重新设计采集方案或增加新的传感器通道。

总结复盘:数据采集与上传阶段的核心目标可以概括为“充足、均衡、一致、独立”四个关键词。充足指每个类别有足够的样本量;均衡指各类别样本数量差异不大;一致指采集条件(传感器设置、环境、动作执行方式)保持稳定;独立指训练集、验证集、测试集之间没有数据泄漏。在进入特征工程和模型训练之前,请务必花时间审视这四项指标,因为数据层面的问题越早发现,修复成本越低。一个经过精心设计的数据集,往往比复杂的模型结构更能带来性能提升。