4. 数据采集与标注:训练数据采集规范、数据标注工具使用、数据增强策略、数据集管理

数据,说白了就是AI ISP的“燃料”。模型再牛,没有高质量的数据喂进去,出来的效果也是一塌糊涂。我在这个领域摸爬滚打这些年,见过太多项目因为数据问题翻车——要么采集不规范导致模型泛化差,要么标注质量差让训练白费功夫。这一章,咱们就把数据采集到管理的全流程捋清楚。

4.1 训练数据采集规范

数据采集不是拿着相机随便拍就完事了。我刚开始做ISP调试时,就犯过这个错——在实验室里拍了上千张完美光照的图片,结果模型一上真实场景直接崩了。为什么?因为真实世界的噪声、动态范围、色温变化,实验室根本模拟不全。

这里我总结了一套采集规范,供你参考:

维度 要求 说明
光照条件 覆盖全光照范围 从0.1 lux到100000 lux,包含室内、室外、黄昏、夜晚
色温覆盖 2000K - 10000K 白炽灯、荧光灯、日光、阴天、混合光源都要有
场景多样性 至少20类场景 人像、风景、文字、夜景、逆光、运动等
传感器组合 3-5种主流sensor 不同像素尺寸、不同动态范围的sensor都要覆盖
分辨率 从VGA到4K 确保模型能适应不同分辨率输入
⚠️ 我曾经踩过的坑: 采集时只用了同一款手机的后置摄像头,结果模型在另一款设备的前置摄像头上效果极差。后来我才意识到,不同sensor的噪声特性、色彩响应曲线差异巨大。所以,采集时一定要覆盖目标部署设备的所有sensor型号。

另外,采集时还要注意元数据的记录。我习惯用JSON格式记录每张图片的拍摄参数:

{
    "image_id": "IMG_20240315_143200",
    "sensor": "IMX766",
    "iso": 400,
    "exposure_time": 1/30,
    "aperture": 1.8,
    "color_temperature": 5200,
    "scene_type": "indoor_portrait",
    "light_source": "fluorescent",
    "lux_value": 320
}

这些元数据在后续的数据分析和模型调优中非常有用。比如,你可以快速筛选出低光照场景的数据,看看模型在暗光下的表现。

4.2 数据标注工具使用

标注是数据准备中最耗时、最枯燥的环节。但没办法,没有标注就没有监督学习。我这些年用过不少标注工具,这里推荐几个实用的:

  • LabelImg:轻量级,适合快速标注目标检测框。Python写的,跨平台,上手快。
  • CVAT:功能全面,支持视频标注、关键点标注、语义分割。适合团队协作。
  • Supervisely:企业级平台,内置AI辅助标注,能大幅提升效率。
  • Label Studio:开源灵活,支持自定义标注模板,适合特殊需求。

对于AI ISP来说,标注的内容和普通视觉任务不太一样。除了常规的物体检测框,我们还需要标注:

  1. 噪声区域:标注图像中噪声明显的区域,用于训练降噪模型。
  2. 过曝/欠曝区域:标注动态范围问题的区域,用于训练HDR重建。
  3. 色偏区域:标注白平衡不准确的区域,用于训练AWB校正。
  4. 模糊区域:标注运动模糊或失焦区域,用于训练去模糊。
💡 我的个人习惯: 标注时不要只标“好”的数据。我会有意保留一些“坏”的数据——比如严重过曝的、噪声爆表的、色偏离谱的。这些极端样本对模型的鲁棒性提升帮助巨大。你想想看,模型连最差的情况都见过了,正常场景自然不在话下。

4.3 数据增强策略

数据增强,说白了就是“无中生有”。但这里的“无中生有”不是瞎编,而是基于物理规律的合理变换。我见过有人把图像旋转90度后拿去训练去噪模型,结果模型把水平纹理当成了噪声——这就是不懂物理规律乱增强的后果。

对于AI ISP,我推荐以下增强策略:

增强类型 具体操作 适用场景
光度增强 亮度调整、对比度调整、伽马校正 模拟不同曝光条件
色彩增强 色温偏移、饱和度调整、色调旋转 模拟不同光源环境
噪声增强 添加高斯噪声、泊松噪声、散粒噪声 模拟不同ISO下的噪声
几何增强 随机裁剪、水平翻转、小角度旋转 提升空间不变性
模糊增强 高斯模糊、运动模糊、失焦模糊 模拟对焦不准或运动

这里有个关键点:增强的参数范围要合理。比如亮度调整,我一般控制在原始亮度的±30%以内。调太多,图像就失真了,模型学到的反而是伪影。

🔑 核心原则: 数据增强要模拟真实物理世界的变化,而不是随意变换。每次增强后,问问自己:这张图在真实拍摄中可能出现吗?如果答案是否定的,那就别用。

4.4 数据集管理

数据集管理,听起来简单,做起来全是坑。我见过一个团队,数据散落在每个人的电脑里,文件名乱七八糟,版本混乱,最后训练时发现数据对不上——那叫一个崩溃。

我建议用以下方式管理数据集:

  1. 统一目录结构:按场景、光照、传感器等维度分层组织。
  2. 版本控制:用DVC或Git LFS管理数据集版本,每次更新都要记录变更日志。
  3. 数据清单:维护一个CSV文件,记录每张图片的路径、标注文件路径、元数据。
  4. 质量检查:定期抽样检查标注质量,确保标注一致性。

下面是一个我常用的目录结构示例:

dataset/
├── raw/                    # 原始采集数据
│   ├── indoor/
│   ├── outdoor/
│   └── night/
├── annotated/              # 标注后的数据
│   ├── train/
│   ├── val/
│   └── test/
├── augmented/              # 增强后的数据
│   ├── brightness/
│   ├── noise/
│   └── blur/
├── metadata.csv            # 数据清单
└── changelog.md            # 变更日志
⚠️ 注意: 标注文件一定要和图像文件分开存储。我见过有人把标注信息直接写在文件名里,结果后期想改标注格式,所有文件名都得改——那工作量,想想都头疼。标注文件用JSON或XML格式独立存储,方便后续处理。

最后,我想强调一点:数据管理不是一次性工作,而是持续的过程。每次模型训练后,都要分析哪些场景效果不好,然后针对性地补充数据。这样,你的数据集会越来越完善,模型效果也会越来越好。

数据采集与标注全流程 数据采集 光照/场景/sensor 数据标注 工具/格式/质检 数据增强 光度/色彩/噪声 数据集管理 版本/目录/清单 模型训练 训练/验证/测试 效果分析 & 数据补充 💡 关键点: 数据采集要覆盖真实场景多样性 → 标注要关注ISP特有任务(噪声/过曝/色偏)→ 增强要模拟物理规律 → 管理要版本化可追溯