第 18 章 — 合成数据:仿真/生成式与域桥接
章节目标:本章将深入探讨如何利用合成数据(Synthetic Data)来补足真实世界数据的短板,特别是长尾、危险与难以标注的场景。我们将讨论仿真环境的设计原则、程序化任务生成的方法、利用生成式 AI 创造多样性,并着重解决合成数据最核心的挑战——“现实-仿真域鸿沟”(Sim2Real Domain Gap)。学完本章,读者应能设计一套完整的、可扩展的、能够有效弥合域鸿沟的合成数据生成与域适应的算法方案。
18.1 仿真场景库设计:从分布到实例
合成数据的价值根植于其场景的多样性与覆盖度。一个精心设计的场景库应是对目标部署环境(如家庭、办公室)在几何、材质与光照分布上的忠实采样,而非追求单一场景的极致照片级真实感。我们的目标是创建一个“元分布”(meta-distribution),使得真实世界成为这个分布的一个普通样本。
核心设计原则:
- 户型分布(Layout Distribution):
- 来源与分析:首先,需要从公开数据集(如 Matterport3D, Gibson, HM3D, ScanNet)或商业建筑图纸数据库中,提取关键的统计先验。这包括但不限于:
- 房间面积与长宽比的直方图。
- 走廊宽度与天花板高度的分布。
- 门窗尺寸与位置的概率模型。
- 房间邻接图的拓扑结构(例如,卧室通常与走廊相连,而非直接与厨房相连)。
- 程序化内容生成(Procedural Content Generation, PCG):基于上述统计分布,使用PCG算法自动创建大量布局。
- 基于图的方法:先生成一个代表房间连接关系的拓扑图,再根据面积和形状约束具象化为几何布局。
- 波函数坍缩(Wave Function Collapse, WFC):使用一组预定义的房间/走廊模块(tiles)及其邻接规则,高效生成复杂且局部一致的布局。
- Rule-of-thumb:优先保证可通过性(passability)和功能性(functionality)的真实性。例如,确保生成的路径宽度大于人形机器人的包围盒,避免生成无法进入的房间。
- 材质与物理属性(Material & Physics):
- PBR 材质库:构建一个庞大多样的物理基渲染(PBR)材质库。每个材质应包含 Albedo, Roughness, Metallic, Normal, Ambient Occlusion 等贴图。
- 重点关注:必须包含大量对视觉算法有挑战性的材质,如镜面、玻璃、高反光金属、透明塑料、深色吸光表面(如黑地毯)。这些是传统和学习型视觉 SLAM 的常见失效点。
- 物理参数化:为场景中的物体(尤其是可交互物体)赋予真实的物理属性,包括质量、质心、摩擦系数(静摩擦/动摩擦)、恢复系数(bounciness)和可动关节的约束。这对于训练需要与环境交互的 VLA 模型至关重要。
- 多光照条件(Lighting Conditions):
- 全局光照:使用高动态范围成像(HDRI)贴图作为天空盒,模拟真实世界的环境光和间接光照。应有一个包含不同天气(晴天/阴天/黄昏)和地点(城市/乡村)的 HDRI 库。
- 局部光源:程序化地在场景中放置符合语义的局部光源(点光源、聚光灯、面光源),并随机化其强度、色温和开关状态。
- 动态光照:模拟复杂的动态光照效果,如电视屏幕闪烁、窗外车辆驶过造成的光影变化、日光随时间推移造成的阴影移动。这对模型的鲁棒性是极大的考验。
- 杂物与动态元素(Clutter & Dynamic Elements):
- 语义驱动的杂物放置:根据房间类型(厨房、卧室)和预设的“凌乱度”参数,在语义上合理的位置(如
on(table), inside(drawer)) 放置杂物。这可以防止模型学到“桌子上永远是干净的”这种错误的先验。
- 程序化智能体:在场景中引入遵循预设行为逻辑(如社交力模型、预定脚本)的仿真行人、宠物或其他机器人。这为训练动态避障、社交礼让和人群交互提供了关键数据。
18.2 语义/语言任务的程序化合成
对于 VLA 等需要指令跟随的模型,仅有视觉场景是不够的。我们需要大规模、多样化、且与场景紧密耦合的任务指令及其对应的专家轨迹。
生成流程:
- 结构化场景表示(Scene Graph):
- 这是任务合成的基石。仿真环境必须能导出一个详细的场景图
G = (V, E),其中节点 v ∈ V 代表物体、房间或区域,并带有属性(如类别、颜色、状态{open, closed});边 e ∈ E 代表它们之间的关系(如空间关系 on(cup, table)、部件关系 has(table, leg)、语义关系 used_for(chair, sitting))。
- 分层任务生成:
- L1: 简单导航:
"Go to the kitchen." (目标是区域)
- L2: 目标驱动导航:
"Find the red mug." (目标是特定物体)
- L3: 属性/关系约束导航:
"Go to the chair that is next to the window." (涉及空间关系)
- L4: 多步/长时序任务:
"First, pick up the book from the living room sofa, then take it to the study." (涉及状态变化和长程依赖)
- L5: 条件/隐式任务:
"Tidy up the desk." (需要模型理解“整洁”的语义,并规划出一系列子任务)
- 指令生成技术:
- 模板与填充:
[Action] the [Attribute] [Object] [Relation] the [Landmark]。从场景图采样实体来填充模板。虽然简单,但容易产生模式化的、不自然的语言。
- LLM 驱动生成:将场景图的文本描述作为上下文
(context) 输入给大型语言模型(如 GPT-4),并给出少量示例(few-shot prompt),让其生成更多样、更自然的指令。
- Prompt 示例:
"Context: a kitchen contains a table. On the table is a green apple. Task: 'bring me the fruit from the kitchen table'. Now, generate a similar task for a red mug on the counter."
- 专家轨迹与对话生成:
- 专家轨迹:使用传统的规划器(如 A*)在仿真环境中为每个生成的指令计算出最优轨迹作为监督信号。
- 对话与澄清:程序化地生成歧义指令(如场景中有两个红杯子时,指令为
"get the red cup"),并合成对应的澄清对话 (Robot: "Which one? The one on the table or the one in the sink?") 和后续的解决路径。这用于训练模型的交互式任务解决能力。
18.3 轨迹与占据的自动标注与一致性校验
合成数据的核心优势在于能够零成本地获得像素级完美的、多模态的真值(Ground Truth)。
关键真值流及其用途:
| 真值类型 |
数学表示/格式 |
在导航中的核心用途 |
| 相机位姿 |
T_wc ∈ SE(3) |
VIO/SLAM 轨迹真值,用于计算 ATE/RPE |
| 深度图 |
D(u, v) ∈ R^+ |
稠密重建、Occupancy 建模、障碍物检测 |
| 语义分割 |
S(u, v) ∈ {1, ..., C} |
语义地图构建、目标驱动导航 |
| 实例分割 |
I(u, v) ∈ N |
物体级跟踪、Re-ID、场景图构建 |
| 表面法线 |
N(u, v) ∈ R^3, ||N||=1 |
几何细节理解、平面检测 |
| 光流 |
F(u, v) ∈ R^2 |
动态物体检测、运动估计 |
| 3D 占据 |
Occ(x, y, z) ∈ {0, 1} |
全局/局部规划、可通行性分析的真值 |
一致性校验(Sanity Checks):
虽然是自动标注,但渲染引擎或导出脚本可能存在 bug。必须进行跨模态一致性校验。
- 几何一致性:将 3D 模型的顶点
P_3d 通过真值位姿 T_wc 和相机内参 K 投影回 2D 图像,其投影点 p_2d 必须落在该物体的分割掩码内。
$p_{2d} = K \cdot \pi(T_{cw} \cdot P_{3d})$
其中 π 是投影函数 (X, Y, Z) -> (X/Z, Y/Z)。
- 光度一致性:对于静态场景,相邻帧的像素点
p1,通过深度、位姿和光流 F 变换后,其在第二帧的对应点 p2 的亮度应基本不变(亮度恒常假设)。
- 物理一致性:仿真物理引擎报告的物体接触点,应该在深度图上表现为距离接近或为零。
18.4 生成式增强:超越传统仿真
生成式 AI(Generative AI)为合成数据注入了新的活力,能够以极低的成本创造前所未有的多样性。
- 文本/图像转三维场景 (Text/Image-to-3D Scene):
- 利用如 LERF, Neuralangelo, 3D Gaussian Splatting 等前沿技术,可以从本描述(“一个带木地板和落地窗的现代简约客厅”)或几张真实图片,快速生成一个可渲染、可导航的 3D 场景。这使得场景库的扩充速度从“周”级别提升到“分钟”级别。
- 真实数据的伪标注 (Pseudo-Labeling on Real Data):
- 这是一个强大的 Sim2Real 技术。对真实世界的图像,使用最先进的预训练模型(如用 SAM/SEEM 进行开放词汇分割,用 MiDaS/ZoeDepth 进行单目深度估计)生成“伪真值”。虽然这些标签带有噪声,但它们拥有真实的视觉域。将这些(真实图像,伪标签)对与(仿真图像,完美标签)对混合训练,可以显著提升模型的真实世界性能。
- 生成式材质与风格 (Generative Materials & Styles):
- 使用文本到图像的扩散模型(如 Stable Diffusion)配合 ControlNet 或专门的 PBR 生成流程,可以根据文本提示(如“一张有划痕的旧木地板贴图”)生成无的、高质量的 PBR 材质。这彻底解决了传统材质库有限的问题。
- 生成式行为与轨迹 (Generative Behaviors & Trajectories):
- 使用扩散模型或 VAE 等生成模型,学习真实世界行人轨迹数据集(如 aETH, UCY)的分布,然后在仿真环境中生成更多样、更自然的行人移动路径,而不仅仅是简单的直线或脚本路径。
18.5 现实-仿真域桥接 (Sim2Real Domain Bridging)
这是合成数据能否成功的关键。模型在仿真中表现再好,如果不能泛化到真实世界,一切都是徒劳。域桥接的目标是最小化 \mathcal{D}_{sim} 和 \mathcal{D}_{real} 之间的分布差异。
核心算法策略:
- 域随机化 (Domain Randomization, DR):
- 理念:“If the variation in the simulator is wide enough, the real world may appear to the model as just another variation.”
- 操作:对仿真环境中的非关键参数进行大规模、均匀或按分布的随机化。
- 视觉:光照位置/强度/颜色、纹理、相机内参(焦距、主点、畸变)、后处理效果(曝光、对比度、色调)。
- 物理/动力学:物体质量、摩擦力、机器人电机的响应延迟、IMU 的偏置和噪声水平。
- Rule-of-thumb:对于 1B 级别的模型,DR 是最有效、最鲁棒的基线方法。它迫使模型学习对底层几何和物理结构的不变性,而不是过拟合到特定的视觉纹理。
- 系统辨识与真实噪声注入 (System Identification & Realistic Noise Injection):
- 系统辨识:首先,在真实机器人上进行一系列标定实验,测量其传感器的真实噪声特性和执行器的动力学响应。
- 噪声建模:然后,将这些测得的噪声模型注入到完美的仿真数据流中。
- 相机噪声:
I_noisy = f_postprocess(I_clean) + N_gaussian_poisson。需要模拟 ISP(图像信号处理器)的完整流,包括 Bayer 模式、去马赛克、白平衡、伽马校正,并在每个环节注入相应噪声。
- IMU 噪声:
ω_meas = ω_true + b(t) + n_w,其中偏置 b(t) 建模为一个维纳过程(随机游走),n_w 为高斯白噪声。这是 VIO 算法成功的关键。
- 几何优先原则 (Geometry-First Principle):
- 理念:对于导航任务,场景的几何结构(墙壁、地面、障碍物轮廓)比逼真的纹理颜色更重要。视觉上的“域鸿沟”往往比几何上的“域鸿沟”更容易通过数据增强来弥合。
- 策略:与其花费 90% 的算力渲染照片级图像,不如将算力用于生成 10 倍数量的、几何结构多样但视觉上相对简单的场景。
[ High Value for Navigation ] [ Low Value for Navigation ]
+---------------------------+ +--------------------------+
| Simple texture | | Photorealistic texture |
| Complex geometry | | Simple geometry |
| (e.g., cluttered room, | | (e.g., empty cube room) |
| narrow corridor) | | |
+---------------------------+ +--------------------------+
- 学习型域适应 (Learning-based Domain Adaptation):
- 当 DR 不足时,可以采用更复杂的学习方法。例如,使用对抗性训练,让一个判别器(Discriminator)无法区分特征提取器(Encoder)输出的特征是来自仿真域还是真实域。这迫使编码器学习一种域不变的(domain-invariant)特征表示。
本章小结
- 仿真核心:成功的合成数据策略,核心在于模拟真实世界的分布,而非追求单一实例的完美。覆盖度远比逼真度重要。
- 任务合成:基于结构化的场景图和程序化生成,可以低成本地创造出海量的、多层次的、与场景紧密耦合的导航与交互任务。
- 真值价值:仿真提供了多模态的完美真值,是其核心优势。但必须通过跨模态一致性校验来保证数据质量。
- 生成式AI赋能:生成式 AI 正在从根本上改变合成数据的生产方式,使得场景、材质和行为的多样性呈指数级增长。
- Sim2Real是决胜点:弥合域鸿沟是决定性的一步。域随机化是最鲁棒的起点,必须结合基于系统辨识的真实噪声注入。始终坚持几何优先的原则。
常见陷阱与错误 (Gotchas)
- 过度追求照片级真实感 (Photorealism Trap):团队将大量工程时间与计算资源投入到渲染极致逼真的图像上,却忽略了场景多样性、几何复杂度和物理真实性。最终模型在几个“漂亮”的仿真场景里表现完美,但在结构稍有不同的真实环境中就完全失效。
- 使用“无菌”仿真数据 (Sterile Data Fallacy):直接使用仿真器输出的完美、无噪声的数据进行训练,是 Sim2Real 失败最常见的原因。这会导致模型对真实世界的传感器噪声、执行器延迟和校准误差极其敏感。
- 仿真分布与现实脱节 (Distribution Mismatch):生成的仿真场景(如全是开阔的大平层)与实际部署环境(如拥挤的单身公寓、杂乱的仓库)的统计分布不匹配,导致模型学到了错误的几何或语义先验。
- 忽略“动力学鸿沟”(Dynamics Gap):只关注视觉域的鸿沟,而忽略了物理和动力学。仿真器中的物理引擎参数(如摩擦力、碰撞响应、电机响应曲线)与真实机器人不匹配,会导致在仿真中训练出的控制策略在真实世界中不稳定甚至危险。
- 资产版权污染 (Asset Copyright Contamination):在构建场景库时,使用了从网络上随意下载、版权不明的 3D 模型或 PBR 材质。这会给整个数据集带来严重的法律风险,对于商业项目是致命的。必须建立严格的资产源审核与合规流程。
- 计算成本失控 (Computational Cost Spiral):高保真度的仿真,尤其是包含复杂物理和光线追踪的仿真,计算成本极高。必须在数据质量和生成效率之间做出明智的权衡,并设计可扩展的数据生成流水线。