做视觉检测的人常会碰上一类尴尬:某种缺陷一个月只出现一两次,样本攒不齐,模型的迭代窗口却已经过去了;真要人为造出这些缺陷,又得停线、返工。于是有人换了思路,让程序或生成模型先“造”出一批带标注的图像,把训练先撑起来。这类由算法生成、标注随之而来的样本,就是合成数据。
它不是新概念。仿真引擎跑出的渲染图、经过规则扰动的语音、生成模型画出的街景,都算在内。变化在于,过去它更像数据不够时的补丁,如今随着生成质量提升、人工标注成本上升,它开始被放进常规流程里讨论。
缺的往往不是数量,是那种“刚好没拍到”的样本
真实数据的问题很少是总量不足。摄像头一天能录下几个 T,可里面绝大多数是重复的常态画面。模型真正学不好的,是雨夜反光、被遮挡一半的零件、少见的拍摄角度——这些在分布里占比很小,却决定了它在边缘情况下会不会失灵。
它的价值主要落在这些地方:可以按需造出罕见组合,标注随生成过程一起产出,不必担心隐私和授权,也不用等上几个月。代价同样明显——它带着生成者的偏见,物理规律未必对得上,光照、材质、噪声的细节容易失真。
生成得出来,不等于用得上
常见的一个误区,是把“看着像”当成“可以用”。人眼分辨不出的差别,模型未必分辨不出;反过来,人眼觉得别扭的地方,模型也可能根本不在意。判断一批合成样本能不能进训练集,靠的通常不是肉眼审片,而是拿它单独训一版,再到真实数据的评测集上看行为有没有跑偏。
还有一个绕不开的循环:用模型生成的数据去训练模型,容易把上一代的偏差放大。生成器只会产出它“认为合理”的样本,那些它没学到的东西,不会因为多生成几万张就出现。业内把这种现象笼统称作模型自噬,讨论不少,结论也说不上统一,但至少在训练配比上,把合成数据与真实数据混着用,比单纯依赖前者稳妥。
评测集这一关,值得较真
有些团队在训练侧用得很放开,却很少动评测集,这大概是合适的做法。评测集衡量的是模型在真实世界里行不行,一旦掺进生成样本,指标就失去参照意义——分数可能变好看,也可能莫名变差,而你无从判断原因。把评测集守住,至少还留着一把尺子。
与之配套的是可追溯。每批合成数据从哪来、用什么参数生成、覆盖了哪些场景,最好留下记录。否则几个月后模型出问题,很难回查是配比变了,还是生成器换了版本。
它处理的是配比问题,不是替代问题
把合成数据说成真实数据的替代品,多半会失望。它擅长补齐长尾、做压力测试、在项目早期快速验证思路;不擅长替代真实世界的复杂性。一个务实的做法是先明确缺口在哪——是某类样本太少,还是标注不一致,还是根本不知道模型在哪些情况下会错——再决定要不要动手生成。
工具的门槛在降,判断的门槛没降。生成一批图可能只要几行代码,判断它该不该进训练集,仍需要有人盯着真实场景,问一句:这批数据补上的,是我们真正缺的那块吗?