3. 数据采集与上传
在Edge Impulse的完整工作流中,数据采集与上传是决定模型性能上限的基石。无论后续的特征工程多么精巧、神经网络结构多么先进,如果输入的数据在数量、质量、标签准确性或分布代表性上存在缺陷,最终部署到边缘设备上的TFLite模型都难以达到预期的识别精度与鲁棒性。本章将系统讲解从物理世界到云端项目的三条数据通路——手机传感器采集、开发板(以STM32、ESP32、Arduino Nano 33 BLE Sense等典型硬件为例)采集以及CSV文件批量导入,并深入剖析数据标签规范与数据集划分策略,帮助您建立一套科学、可复现的数据工程方法论。
上图展示了从三种数据源到Edge Impulse项目,再到数据准备与验证的完整工程链路。可以看到,数据采集并非简单的“录一段信号传上去”,而是涉及设备选择、采样参数配置、传输协议、标签体系设计以及数据集划分策略的系统工程。下面我们将逐一展开每个环节的具体操作与决策要点。
3.1 数据采集的三种主流方式与适用场景
3.1.1 手机采集:快速原型验证的首选
Edge Impulse官方提供了iOS和Android手机应用,能够直接调用手机内置的加速度计、陀螺仪、磁力计以及麦克风。手机采集的最大优势在于零硬件成本和极低的入门门槛——您只需要一部智能手机,即可在几分钟内完成从采集到上传的全流程。手机采集特别适用于运动识别(如步态分析、手势识别)、声音事件检测(如咳嗽识别、环境声音分类)等场景的快速原型验证。
操作流程如下:
- 在手机应用商店搜索“Edge Impulse”并安装,使用Edge Impulse账号登录。
- 在应用中创建或选择已有的项目,进入“Data acquisition”页面。
- 选择传感器类型(加速度计、陀螺仪或麦克风),设置采样频率(建议50Hz-200Hz用于运动数据,16kHz用于音频)和样本时长(通常1-5秒)。
- 点击“Start sampling”按钮,按照屏幕提示执行动作(如摇晃手机、画特定手势、发出特定声音)。
- 采样完成后,为样本输入标签名称(如“idle”、“wave”、“clap”),点击“Upload”上传至项目。
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界面中直接控制采样参数并实时上传数据。
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”类别,避免模型学习到模糊的边界特征。
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 数据划分的实操步骤
- 在Edge Impulse项目中选择“Data acquisition”页面,点击右上角的“Split”按钮。
- 选择划分策略:Balanced(默认)或 Per-device。
- 设置训练集、验证集、测试集的比例。对于小数据集(<500样本),建议使用70%训练、15%验证、15%测试;对于大数据集(>5000样本),可以使用90%训练、5%验证、5%测试。
- 点击“Save split”保存划分结果。Edge Impulse会为每个样本分配一个“Train/Validation/Test”标记,并在后续的特征工程和模型训练中自动使用这些标记。
3.4 数据质量检查与常见误区
数据质量检查是数据上传后、模型训练前必须执行的关键步骤。Edge Impulse提供了“Data quality”页面,可以查看每个样本的波形图、频谱图以及统计特征(均值、方差、峰值等)。以下是常见的数据质量问题和对应的排查方法:
| 常见问题 | 现象 | 可能原因 | 排查方法 |
|---|---|---|---|
| 数据截断 | 波形出现平顶或削波 | 传感器量程设置过小 | 检查波形峰值是否接近量程上限,调整量程后重新采集 |
| 缺失值 | 波形中出现零值或跳变 | 传输丢包、传感器初始化失败 | 检查串口连接稳定性,增加重传机制 |
| 标签错误 | 同类样本波形差异极大 | 采集时动作执行不规范 | 重新采集或删除异常样本 |
| 采样率不一致 | 样本时长相同但采样点数不同 | 系统负载导致采样周期抖动 | 使用实时操作系统或增加缓冲区 |
| 环境噪声 | 波形叠加高频毛刺 | 电源干扰、电磁耦合 | 使用屏蔽线、增加滤波电路 |
在完成数据质量检查后,建议使用Edge Impulse的“Data explorer”功能进行数据可视化。该功能使用PCA或t-SNE算法将高维特征降维到2D平面,帮助您直观地观察不同类别样本的分布情况。如果发现某些类别的样本在特征空间中严重重叠,说明这些类别的区分度不足,需要重新设计采集方案或增加新的传感器通道。