← 返回博客

个人博客

合成数据:仿真如何自带"标准答案"

前情提要 上一回第 40 篇《人在回路:标注员与数据飞轮》讲到,模型靠人不断回采、标注才越练越强——可人工标注又贵又慢(第 34 篇就说过真实数据贵)。那有没有"不用标"的数据?有。仿真/合成数据是计算机生成的,答案天生就在里面。本篇讲这个取巧的办法。

仿真自带真值

先打个比方。假设你在电脑里造了一个虚拟厨房:有桌子、有杯子、还有一个机械臂,光照、材质、重力全都由程序设定好。你让虚拟机械臂伸手去抓杯子,它每动一下,程序都精确知道杯子此刻的 x、y、z 坐标,知道机械臂每个关节转了多少度——因为这些数字本来就是程序一帧一帧算出来的,不像真实世界得靠人拿尺子量、靠相机猜。

这就是合成数据最核心的秘密,一句话:仿真的答案,天生就在里面。

在第 13 篇《仿真器与数字孪生》里我们提过,仿真器其实是把现实世界"复制"进电脑,建了一个数字孪生体。既然整个虚拟世界都是代码搭起来的,那么里面每个物体的位置、姿态、相互遮挡关系,全是程序和物理引擎清清楚楚算着的,不存在"不知道"这回事。到了第 24 篇《仿真即训练场:合成数据怎么喂出机器人智能》,我们进一步看到,机器人可以在这种虚拟训练场里练上千万次,根本不用担心撞坏真东西、也不用花钱请人盯着。

这里要认识一个词:"真值"(ground truth),说白了就是"这件事的标准答案应该是什么"。在真实世界里,要得到真值得靠人去标;在仿真世界里,真值随你拿,零成本、不费劲。你造出画面的那一瞬间,答案就已经躺在内存里了。这就好比考试前老师把标准答案先印好,考生每做一题都能立刻对照——练习效率自然高得离谱。人标注一小时顶多几百张,仿真还顺手把答案给了,根本不存在"标不过来"这回事。

graph LR n1["仿真环境"] --> n2["已知真值"] --> n3["自动生成标注"] --> n4["合成数据集"] --> n5["Sim2Real迁移"]

上面这张图就是合成数据的最小闭环:仿真环境里一切已知,于是真值天然存在;再由程序把它一键变成各种标注,攒成数据集;最后迁移到现实世界去用。

自动生成各类标注

那这个"答案"到底能变成什么样?它能直接变成训练 AI 模型最需要的各类标注。

  • 检测框:杯子在画面哪个位置?程序直接给出边界框的四个坐标,框框秒出,不用人工描。
  • 位姿:杯子是歪着还是正着、朝哪边倒?六维位姿(三维位置加三维朝向)程序一清二楚。
  • 分割掩码:杯子占画面里哪几万个像素点?因为几何形状是已知的,逐像素标签一键生成。
  • 深度与关键点:每个像素离相机多远、杯柄的关节点在哪里,程序也能顺手一起给出。

对比一下人工标注就更清楚了:真人得盯着屏幕一个个框、一笔笔画,慢且贵。还记得第 34 篇《数据从哪来:人类示范与遥操作怎么喂机器人》里说的"真实数据贵"吧?而合成数据是"边生成画面、边顺手把答案写好了",图像和标注同时出炉,根本不用再回头找人标。等于工厂里一边造产品、一边把说明书也印好了,两张纸一起掉出来。一行代码下去,几十种标注格式同时导出,省掉了人工最头疼的"对齐"环节。换句话说,模型要什么格式,仿真就给什么格式,完全按需定制。

规模与多样性

合成数据更狠的一点是数量。真实数据采一条是一条,合成数据却能"随便造":

  • 想要一千万张杯子图?改改随机种子、换换花色材质,几分钟批量生成。
  • 想要各种光照、各种角度、各种乱七八糟的背景?调一调参数,应有尽有。
  • 想要罕见场景,比如杯子倒了、瓶子叠在一起、强光反光?现实里不好碰,仿真里随意编排。
  • 想要覆盖"长尾"情况,比如十种杯子同时翻倒?真实里难得一见,仿真里一键铺满。

这就是合成数据的底气:海量、多样、还零标注成本。 模型最怕"见世面太少",而合成数据正好能给它造一个无比丰富的"练习题库",把各种边角情况都练到。这种"想要多少有多少"的自由度,是真实采集花再多钱也买不来的。即便是真实数据里极稀少的"百万分之一"情形,仿真也能批量造出来反复练。

Sim2Real 鸿沟

但天下没有免费的午餐。仿真毕竟是"模拟"出来的现实,和真世界之间有一道缝,行话叫 Sim2Real 鸿沟(Simulation-to-Reality,从仿真到现实的鸿沟)。

第 30 篇《三道难关与未来:泛化、安全、成本》里讲到的"泛化"这道难关,正根源于此:在仿真里练得炉火纯青的模型,一进真实工厂可能就懵——因为真实世界里有反光、有灰尘、有传感器噪声、有各种各样仿真没完全学像的细节。机器人把仿真世界当得太"干净"了,遇到现实的"脏乱差"就泛化不过去。

为了补这道缝,工程师想了不少招,比如"域随机化":故意在仿真里把光照、材质、噪声随机打乱,逼模型别死记仿真里的细节,而去学真正管用的规律。但再怎么补,鸿沟也不可能完全消失。说白了,仿真像精修海报,现实像随手拍——两者长得像,细看终究有别。所以合成数据不能"单打独斗",光靠它练出来的模型,容易变成"考场高手、实战菜鸟"。

合成+真实混合才是王道

工程上最成熟的做法,是混合训练:用海量、便宜、自带答案的合成数据打底,先把模型的"底子"喂饱;再用少量珍贵、真实的标注数据做微调,把模型从"仿真味"慢慢拉回"现实味"。

这就把前面几篇都串起来了:真实数据贵(第 34 篇),人工标注又贵又慢、要靠人在回路里反复回采(第 40 篇),而合成数据正好补足了"量"和"答案"这两块短板。三者不是谁替代谁,而是最佳搭档——真实给"质感",合成给"数量",合在一起才喂得出靠谱的机器人智能。业界常把这套做法叫"课程学习":先用合成数据打基础,再用真实数据做毕业考,循序渐进最稳当。这就像学游泳:先在浅水区(合成)练熟动作,再去深水区(真实)实战检验。

小结

一句话收束:真实数据靠人标,又贵又慢;仿真数据由程序造,答案天生就在里面——自动出框、出位姿、出分割,随便生成千万条。但它和现实之间有 Sim2Real 鸿沟,直接拿来用会"泛化不过去",所以最好和真实数据混着用,各取所长:合成负责"练得多",真实负责"练得真"。

读后小测

「3 句话复述」 1. 合成数据由计算机仿真生成,物体位置、姿态、分割等真值天然已知,所以能自动产出海量带标注的数据,不用人工去标。 2. 但它和真实世界存在 Sim2Real 鸿沟,仿真里练得再好,直接拿到现实里用也会"泛化不过去"。 3. 所以最好把海量合成数据和少量真实标注混合训练,各取所长:合成负责"练得多",真实负责"练得真"。

「1 件动手小事」 打开一张你拍的照片,试着在纸上画出其中一个物体的检测框、标出"它大概朝哪个方向",再想想如果有一千张这样的照片要标得花多少时间——你就能更懂仿真"自带答案"到底有多省事。

下一回,第 42 篇《数据闭环飞轮:从失败回采到再训练》:把真实采集、人工标注、人在回路、合成数据串起来看,你会发现数据从来不是一次备齐的,而是像飞轮一样不断转动、越转越强的闭环——本篇正好收束这条从"数据从哪来"一路铺到"数据怎么转"的弧线。