4、数据采集方法:使用手机、摄像头或上传图片集,以及数据平衡的重要性
在Edge Impulse视觉分类模型训练中,数据采集是决定模型性能上限的基石。无论后续采用何种神经网络架构、何种数据增强策略,如果原始数据集在数量、质量、多样性或类别分布上存在缺陷,模型最终都难以获得理想的泛化能力。本章将系统讲解三种主流的数据采集途径——手机拍摄、摄像头实时采集与图片集上传,并深入剖析数据平衡这一常被忽视却至关重要的工程原则。我们将从操作流程、参数配置到实战案例,完整呈现一套可落地的数据采集方法论。
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),且自动记录传感器元数据(如陀螺仪、加速度计),为后续分析提供额外维度。
标准操作流程:
- 创建数据集:在 Edge Impulse 项目中进入
Data acquisition页面,选择Mobile phone标签页,用手机扫描二维码连接项目。 - 配置采集参数:设置采样频率(建议 30fps)、采集时长(单次 2~5 秒)、标签名称(如 "defective_screw")。
- 多角度拍摄:围绕目标物体旋转拍摄,覆盖 0°、45°、90° 等不同视角;同时改变距离(近景/远景)和光照条件(强光/阴影/室内灯光)。
- 实时预览与重拍:App 会显示当前帧的缩略图,若发现模糊、过曝或遮挡,立即删除重拍。
- 上传同步:拍摄完成后点击上传,数据自动进入 Edge Impulse 云端存储。
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° 位置,并确保背景为单一颜色(如深灰色),以减少背景干扰。
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%。
解决方案:
- 补充采集:使用手机在车间不同时段(上午、下午、傍晚)拍摄毛刺和凹坑样本,每类新增 200 张,覆盖不同角度和距离。
- 场景扩展:在摄像头采集时,人为改变传送带背景(放置黑色橡胶垫、白色纸板),并调整灯光亮度,使每类样本包含 3 种背景和 2 种光照强度。
- 数据清洗:删除历史数据中模糊、反光过强的图片,最终保留正常品 3000 张、划痕 700 张、凹坑 500 张、毛刺 320 张。
- 平衡处理:对毛刺类应用随机旋转(±30°)和亮度抖动增强,将其有效样本扩展至 600 张;对正常品进行欠采样至 2500 张。
- 验证集设计:从每类中随机抽取 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 种环境变量。数据平衡不是简单的数学平均,而是要让模型在真实部署的每个维度上都有足够的“经验”。当数据采集与平衡工作做到位后,后续的模型训练和调优将事半功倍。