一个做外观质检的团队,去年花了三个月收集缺陷样本。产线跑了几万件产品,真正带瑕疵的不到两百张图,其中还有一半拍糊了。模型训出来,遇到反光和轻微划痕就发懵。这种时候,讨论往往会滑向同一个方向:能不能自己造点图出来。
图是怎么“造”出来的
做法大致有三类,代价各不相同:
- 用三维渲染生成:把产品模型、材质、光源参数搭起来,换角度、换背景批量出图。
- 用生成模型出图:以少量真实样本为参考,扩散类模型扩展出更多变体。
- 用规则扰动改写:对已有图片做裁剪、加噪、色偏、遮挡,模拟现场那些不理想的条件。
合成数据听起来像是绕开了采集,其实是把成本挪到了别处:参数调校、场景建模、质量筛选,一样要人盯着。省下的往往是外拍和标注的工时,花掉的是工程和审图的时间。
省下来的钱,可能花在别处
第一层麻烦是分布差。渲染图干净、边缘锐利,真实相机有噪声、有运动模糊、有说不清的反光。模型学到的可能是渲染器的习惯,而不是产线的现实。光照参数调得越漂亮,这个落差有时越隐蔽。
第二层麻烦是筛选标准。用什么指标判断一张生成的图“有用”?如果拿模型来打分,很容易变成用合成数据训练、再用同类合成数据验证,闭环里自洽得很,一出厂就露馅。
还有一种担心:训练集里合成比例过高,模型可能把生成器的偏差当成世界的规律。这一点在图像和语言模型上都被反复提起,具体影响多大,取决于任务性质和数据构成,很难一概而论。
把它放在合适的位置
比较务实的做法是按用途分层。预训练阶段用大量合成图打底,让模型先见过足够多的形状、材质和光照组合;微调与验收阶段,仍然要靠真实样本把关,尤其是那些决定业务成败的边角情况。
也可以反过来用:把合成数据当成测试集的一部分。真实数据里稀缺的极端场景,可以在渲染环境里成批构造,用来做回归测试,看模型在没见过的条件下会不会崩。这时候它不参与训练,只负责找茬。
配比是经验活。真实样本占多少、生成质量门槛设在哪、领域随机化铺多宽,很难有一套通用参数。有的团队会单独留一小批从未参与训练的真实数据,只用于最终判断,这条底线值得守住。
别指望它替你决定
合成数据解决的是供给问题,不是判断问题。它能让长尾场景变得可训练、可复现、可批量测试,却不能告诉你业务上什么算缺陷、什么算可接受。这些仍然要人来定义,而且往往要在数据开工之前就定义清楚。
回到开头那个质检团队。后来他们的做法是:渲染环境里造出上千张不同光照下的可疑样本,先训一版粗模型,再用真实的两百张图做微调和验收。产能上来了,但没人敢说以后可以不再拍照。
大概这就是它眼下所处的位置:一种把稀缺变成可控的手段,而不是稀缺的终结者。