第一章:数据准备篇——数据采集的常见陷阱与质量把控
做端到端模型训练,我最怕听到一句话:「数据没问题,直接跑吧。」
说这话的人,要么是没踩过坑,要么是坑踩得还不够深。我入行那会儿,就吃过这个亏。一个视觉模型,训练集准确率97%,上线直接崩到60%。查了三天,发现是数据采集时摄像头角度没统一。嗯,从那以后,我再也不敢轻视数据采集这个环节了。
1.1 数据采集的三大常见陷阱
数据采集看着简单,其实门道很多。我总结下来,最容易翻车的有三个地方。
陷阱一:分布偏差
说白了,就是你的数据不能代表真实场景。
举个例子。你做一个自动驾驶的行人检测模型。采集数据时全在晴天白天拍。模型训练得漂漂亮亮。一遇到雨天、夜晚,直接罢工。为什么?因为训练集和真实场景的分布不一样。
核心要点:训练集的分布必须覆盖目标场景的多样性。光照、角度、背景、噪声水平,这些都要考虑进去。
我个人习惯,在采集前先列一个「场景覆盖清单」。把可能遇到的情况都写下来。比如:
- 光照条件:白天、黄昏、夜晚、逆光
- 天气情况:晴天、阴天、雨天、雪天
- 拍摄角度:正面、侧面、俯视、仰视
- 目标状态:静止、运动、遮挡、部分可见
陷阱二:标注不一致
这个坑,我踩过不止一次。
有一次做医疗影像项目,找了三个标注团队。结果同一个病灶,A团队标成「良性」,B团队标成「恶性」,C团队直接没标。模型训练出来,效果可想而知。
警告:标注不一致是模型性能的天敌。它会让模型学到错误的映射关系,而且很难通过后期调参弥补。
怎么解决?我建议做三件事:
- 制定详细的标注规范——把每个类别的定义、边界情况、争议处理方式写清楚
- 做标注一致性检验——随机抽取10%的数据,让两个标注员独立标注,计算Kappa系数
- 定期校准——每周开一次标注复盘会,把分歧案例拿出来讨论
陷阱三:数据泄露
这个比较隐蔽。你想想看,训练集和测试集里出现了同一个样本的不同版本,会怎样?
模型会「记住」这个样本,而不是「学会」规律。测试指标虚高,上线就露馅。
我记得有一次做视频分类。采集时把一段长视频切成了很多小片段。结果训练集和测试集里都包含了同一段视频的不同片段。模型准确率98%,实际上只有60%的水平。这就是典型的数据泄露。
小技巧:数据划分时,要以「原始数据源」为单位。比如视频按「视频ID」划分,图片按「拍摄批次」划分。千万别按「文件列表随机切」。
1.2 数据质量把控的四个维度
数据质量怎么衡量?我一般从四个维度来看。
| 维度 | 说明 | 常见问题 | 检查方法 |
|---|---|---|---|
| 完整性 | 数据是否齐全 | 缺失字段、空值、断帧 | 统计缺失率,做完整性校验 |
| 一致性 | 数据格式是否统一 | 标注格式混乱、图像尺寸不一 | 写自动化脚本做格式检查 |
| 准确性 | 标注是否正确 | 标签错误、边界框偏移 | 人工抽检 + 交叉验证 |
| 时效性 | 数据是否过时 | 旧设备采集、场景已变化 | 检查采集时间戳,对比当前场景 |
这四个维度,我建议每个项目都做一个「数据质量检查表」。跑模型之前,先过一遍表。能省下后面很多调试时间。
1.3 数据采集的实操建议
说了这么多理论,来点实际的。我这些年总结了几条经验。
第一条:先小批量试采,再大规模铺开。
别一上来就采10万张。先采500张,跑一遍完整的pipeline。看看标注规范有没有问题,模型能不能收敛。没问题了再扩大规模。这样做,能避免「采完了才发现方向错了」的悲剧。
第二条:保留原始数据,别做预处理。
我见过有人采集完数据,直接做了一堆数据增强、裁剪、归一化。结果原始数据丢了,后面想换预处理方式,还得重新采。你想想看,多折腾。
我的习惯是:原始数据单独存一份,只读不写。预处理脚本单独写,每次跑都从原始数据生成。
第三条:做好数据版本管理。
数据也是会迭代的。今天加了一批新数据,明天修正了一批标注。没有版本管理,你根本不知道模型是用哪版数据训练的。
推荐做法:用DVC(Data Version Control)或者简单的文件快照。每次数据变更,都打一个tag。模型训练时,记录下数据版本号。这样出了问题,能快速回溯。
1.4 知识体系总览
这一章的内容比较多,我画了一张图帮你理清思路。
这张图把本章的核心内容串起来了。左边是三大陷阱,中间是质量把控的四个维度,右边是实操建议。你训练模型前,可以拿这张图当checklist,逐项检查。
我的个人习惯:每次开始一个新项目,我都会把这张图打印出来贴在工位上。数据采集阶段,每天看一眼,提醒自己别踩坑。
数据准备这件事,说白了就是「磨刀不误砍柴工」。你在数据上花的时间,后面模型训练和调试阶段都会加倍还给你。别嫌麻烦,别图省事。数据质量上去了,模型效果自然就来了。
可可精品资料库