4、数据采集方法:使用手机、摄像头或上传图片集,以及数据平衡的重要性

在Edge Impulse视觉分类模型训练中,数据采集是决定模型性能上限的基石。无论后续采用何种神经网络架构、何种数据增强策略,如果原始数据集在数量、质量、多样性或类别分布上存在缺陷,模型最终都难以获得理想的泛化能力。本章将系统讲解三种主流的数据采集途径——手机拍摄、摄像头实时采集与图片集上传,并深入剖析数据平衡这一常被忽视却至关重要的工程原则。我们将从操作流程、参数配置到实战案例,完整呈现一套可落地的数据采集方法论。

数据采集与平衡:从原始图像到高质量训练集 手机拍摄 · 便携灵活,场景覆盖广 · 需控制光照与角度 · 适合现场快速采集 摄像头采集 · 固定机位,批量获取 · 可编程控制拍摄参数 · 适合流水线/传送带 图片集上传 · 利用已有数据集/网络 · 需严格清洗与去重 · 适合补充稀缺类别 原始图像集(Raw Dataset) 目标:每类 200~1000+ 张,覆盖多场景 数据平衡检查(类别分布 / 场景分布 / 光照分布) 不平衡 → 过采样 / 欠采样 / 数据增强补偿 训练集 验证集 关键原则:数量充足 + 类别均衡 + 场景多样 + 标注准确 Edge Impulse 支持直接上传或通过 SDK/API 采集

4.1 三种采集途径的工程对比与适用场景

Edge Impulse 的数据采集界面提供了三种主要途径:手机(或平板)通过 Edge Impulse 移动端 App 采集、PC 连接 USB 摄像头或内置摄像头实时采集、以及直接上传本地图片集(支持 ZIP 或 CSV 清单)。三种方式并非简单的替代关系,而是针对不同项目阶段和物理环境各有优劣。

采集方式 硬件要求 典型场景 单张耗时 批量能力 标注便利性
手机拍摄 Android/iOS 手机 现场巡检、户外物体、多角度采集 3~5秒/张 低(需手动按快门) 高(拍摄时即可打标签)
摄像头采集 USB摄像头/树莓派Camera 传送带质检、固定工位、连续帧采集 0.1~1秒/帧 高(可自动连拍) 中(需后期批量标注)
图片集上传 任意(需整理文件) 已有历史数据、公开数据集、补充长尾类别 批量导入 极高(一次可传数千张) 低(需预先按文件夹分类)

在实际项目中,我们通常采用“混合采集”策略:先用手机快速获取核心类别的多样本,再用摄像头补充连续姿态或运动模糊样本,最后从历史资料或公开数据集中筛选稀缺类别。这种组合方式能最大化覆盖真实部署时的环境变量。

4.2 手机采集:操作流程与质量控制

Edge Impulse 的手机端 App(支持 iOS 和 Android)是现场采集最便捷的工具。其核心优势在于:拍摄时可直接指定标签(Label),且自动记录传感器元数据(如陀螺仪、加速度计),为后续分析提供额外维度。

标准操作流程:

  1. 创建数据集:在 Edge Impulse 项目中进入 Data acquisition 页面,选择 Mobile phone 标签页,用手机扫描二维码连接项目。
  2. 配置采集参数:设置采样频率(建议 30fps)、采集时长(单次 2~5 秒)、标签名称(如 "defective_screw")。
  3. 多角度拍摄:围绕目标物体旋转拍摄,覆盖 0°、45°、90° 等不同视角;同时改变距离(近景/远景)和光照条件(强光/阴影/室内灯光)。
  4. 实时预览与重拍:App 会显示当前帧的缩略图,若发现模糊、过曝或遮挡,立即删除重拍。
  5. 上传同步:拍摄完成后点击上传,数据自动进入 Edge Impulse 云端存储。
经验提醒:手机采集时务必关闭美颜、HDR 和滤镜功能,这些处理会改变图像的真实纹理分布,导致模型在部署到工业相机时性能骤降。同时,建议每拍摄 20~30 张后暂停,检查是否有重复帧或对焦失败的样本。

4.3 摄像头采集:连续帧与自动化策略

对于需要大量连续帧或固定视角的场景(如质检工位、分拣机器人),使用 PC 摄像头或树莓派 Camera 模块通过 Edge Impulse 的 WebUSB 或 Data forwarder 工具采集更为高效。摄像头采集的核心价值在于能捕捉物体运动过程中的形变、遮挡和光照渐变,这些动态特征对视觉模型的鲁棒性至关重要。

关键参数配置:

// Data forwarder 配置示例(config.json)
{
  "device": "/dev/video0",
  "width": 640,
  "height": 480,
  "fps": 15,
  "label": "good_part",
  "sample_duration_ms": 3000,
  "autosplit": true
}

使用 autosplit 功能可以自动将连续视频流切分为固定时长的样本片段,避免手动截取。对于传送带场景,建议将摄像头固定于侧上方 45° 位置,并确保背景为单一颜色(如深灰色),以减少背景干扰。

风险提示:摄像头采集时容易产生大量高度相似的连续帧。如果直接全部纳入训练集,会导致模型对“时间邻近帧”过拟合,而忽略真正的形态变化。建议每 5~10 帧保留 1 帧,或使用 Edge Impulse 的 Data augmentation 中的随机裁剪来增加多样性。

4.4 图片集上传:清洗、组织与批量导入

当已有现成的图片库(如工厂历史缺陷图库、公开数据集 ImageNet 子集)时,上传图片集是最快的方式。Edge Impulse 支持两种上传模式:ZIP 包上传(文件夹名即标签)和 CSV 清单上传(每行指定文件路径和标签)。

推荐的文件组织方式:

dataset/
├── train/
│   ├── good/
│   │   ├── good_001.jpg
│   │   ├── good_002.jpg
│   │   └── ...
│   ├── scratch/
│   │   ├── scratch_001.jpg
│   │   └── ...
│   └── dent/
│       ├── dent_001.jpg
│       └── ...
└── test/
    ├── good/
    └── ...

上传前必须执行三项清洗操作:去重(使用 MD5 哈希或感知哈希删除重复图片)、分辨率过滤(移除低于 320×320 的图片,避免上采样引入伪影)、标签校验(人工抽查每类至少 10% 的图片,确认标签与内容一致)。

4.5 数据平衡:类别分布与场景覆盖的双重维度

数据平衡是视觉分类任务中最容易被低估的环节。不平衡不仅指类别样本数量的差异,还包括场景分布不平衡——例如某类样本全部在室内灯光下拍摄,而部署环境是户外自然光,这同样会导致模型泛化失败。

平衡性检查的三个维度:

  • 类别数量平衡:各类别样本数差异不超过 2 倍为佳。若某类样本过少,模型会倾向于将未知样本预测为多数类。
  • 场景覆盖平衡:每个类别应包含至少 3 种不同光照条件、2 种不同背景、3 种不同拍摄距离。
  • 姿态/角度平衡:对于非对称物体(如螺丝、PCB板),需覆盖 0°~360° 的旋转角度,避免模型只识别特定朝向。

不平衡时的应对策略:

策略 操作方式 适用场景 注意事项
过采样(Oversampling) 对少数类样本进行复制或轻微变换 少数类样本 < 100 张 复制过多会导致过拟合,需配合数据增强
欠采样(Undersampling) 随机丢弃多数类部分样本 多数类样本 > 2000 张 可能丢失重要特征,需确保丢弃后仍覆盖所有场景
加权损失(Weighted Loss) 在训练配置中设置类别权重 类别差异大且无法补充数据 Edge Impulse 的 Transfer Learning 模块支持自定义权重
数据增强补偿 对少数类应用更强的增强策略 所有不平衡场景 增强需保持语义不变(如旋转不能改变“上/下”方向)

4.6 案例拆解:工业零件缺陷检测的数据采集实战

某汽车零部件工厂需要部署一套视觉分类系统,用于检测金属垫片表面的三类缺陷:划痕(scratch)、凹坑(dent)和毛刺(burr),以及正常品(good)。初始目标是达到 95% 以上的分类准确率,且误检率(将缺陷品判为正常品)低于 2%。

初始数据状况:

  • 工厂历史数据库中有 5000 张正常品图片、800 张划痕图片、350 张凹坑图片、120 张毛刺图片。
  • 所有历史图片均在同一台固定相机、固定光照下拍摄,背景为银色传送带。
  • 现场部署时,相机将安装于不同角度,且车间光照会随白天/夜晚变化。

问题诊断:类别严重不平衡(毛刺仅 120 张,正常品 5000 张),且场景覆盖单一(仅固定光照和背景)。若直接训练,模型对毛刺类的召回率预计低于 60%。

解决方案:

  1. 补充采集:使用手机在车间不同时段(上午、下午、傍晚)拍摄毛刺和凹坑样本,每类新增 200 张,覆盖不同角度和距离。
  2. 场景扩展:在摄像头采集时,人为改变传送带背景(放置黑色橡胶垫、白色纸板),并调整灯光亮度,使每类样本包含 3 种背景和 2 种光照强度。
  3. 数据清洗:删除历史数据中模糊、反光过强的图片,最终保留正常品 3000 张、划痕 700 张、凹坑 500 张、毛刺 320 张。
  4. 平衡处理:对毛刺类应用随机旋转(±30°)和亮度抖动增强,将其有效样本扩展至 600 张;对正常品进行欠采样至 2500 张。
  5. 验证集设计:从每类中随机抽取 20% 作为验证集,确保验证集也包含多种光照和背景。

结果对比:经过上述处理后,模型在验证集上的毛刺类召回率从 58% 提升至 91%,整体准确率达到 96.5%,误检率降至 1.8%。部署到现场后,由于训练集已覆盖光照变化,模型在夜间低照度下的性能衰减小于 3%。

复盘经验:数据采集不是一次性的工作,而是一个迭代过程。建议在首次训练后,将模型预测错误的样本(尤其是高置信度错误)反馈回数据集,进行“难例挖掘”补充采集。在本案例中,通过分析错误样本发现,毛刺在侧光照射下与划痕极易混淆,因此专门补充了侧光条件下的两类样本,进一步降低了混淆率。

4.7 常见误区与总结

在数据采集与平衡环节,初学者常犯以下错误:

  • 盲目追求数量而忽视多样性:1000 张同一场景的图片不如 300 张覆盖多场景的图片有效。
  • 忽略标注一致性:不同人员对“划痕”和“凹坑”的界定标准不一致,导致标签噪声。建议制定标注规范文档,并定期进行标注一致性抽检。
  • 上传前不检查分辨率:Edge Impulse 默认将图片缩放到 96×96 或 160×160,但过小的原始图片(如 100×100)在缩放后会丢失关键纹理。
  • 忘记设置验证集:Edge Impulse 默认按 80/20 划分训练/验证集,但若数据分布不随机(如所有毛刺图片都在最后上传),可能导致验证集失真。

总结而言,高质量的数据采集应遵循“数量充足、类别均衡、场景多样、标注准确”四大原则。在实际操作中,建议为每个类别至少准备 200 张原始图片,并通过混合采集方式覆盖至少 5 种环境变量。数据平衡不是简单的数学平均,而是要让模型在真实部署的每个维度上都有足够的“经验”。当数据采集与平衡工作做到位后,后续的模型训练和调优将事半功倍。