v2_humanoid_navigation_tutorial

第 18 章 — 合成数据:仿真/生成式与域桥接

章节目标:本章将深入探讨如何利用合成数据(Synthetic Data)来补足真实世界数据的短板,特别是长尾、危险与难以标注的场景。我们将讨论仿真环境的设计原则、程序化任务生成的方法、利用生成式 AI 创造多样性,并着重解决合成数据最核心的挑战——“现实-仿真域鸿沟”(Sim2Real Domain Gap)。学完本章,读者应能设计一套完整的、可扩展的、能够有效弥合域鸿沟的合成数据生成与域适应的算法方案。


18.1 仿真场景库设计:从分布到实例

合成数据的价值根植于其场景的多样性覆盖度。一个精心设计的场景库应是对目标部署环境(如家庭、办公室)在几何、材质与光照分布上的忠实采样,而非追求单一场景的极致照片级真实感。我们的目标是创建一个“元分布”(meta-distribution),使得真实世界成为这个分布的一个普通样本。

核心设计原则

  1. 户型分布(Layout Distribution)
    • 来源与分析:首先,需要从公开数据集(如 Matterport3D, Gibson, HM3D, ScanNet)或商业建筑图纸数据库中,提取关键的统计先验。这包括但不限于:
      • 房间面积与长宽比的直方图。
      • 走廊宽度与天花板高度的分布。
      • 门窗尺寸与位置的概率模型。
      • 房间邻接图的拓扑结构(例如,卧室通常与走廊相连,而非直接与厨房相连)。
    • 程序化内容生成(Procedural Content Generation, PCG):基于上述统计分布,使用PCG算法自动创建大量布局。
      • 基于图的方法:先生成一个代表房间连接关系的拓扑图,再根据面积和形状约束具象化为几何布局。
      • 波函数坍缩(Wave Function Collapse, WFC):使用一组预定义的房间/走廊模块(tiles)及其邻接规则,高效生成复杂且局部一致的布局。
      • Rule-of-thumb:优先保证可通过性(passability)和功能性(functionality)的真实性。例如,确保生成的路径宽度大于人形机器人的包围盒,避免生成无法进入的房间。
  2. 材质与物理属性(Material & Physics)
    • PBR 材质库:构建一个庞大多样的物理基渲染(PBR)材质库。每个材质应包含 Albedo, Roughness, Metallic, Normal, Ambient Occlusion 等贴图。
      • 重点关注:必须包含大量对视觉算法有挑战性的材质,如镜面、玻璃、高反光金属、透明塑料、深色吸光表面(如黑地毯)。这些是传统和学习型视觉 SLAM 的常见失效点。
    • 物理参数化:为场景中的物体(尤其是可交互物体)赋予真实的物理属性,包括质量、质心、摩擦系数(静摩擦/动摩擦)、恢复系数(bounciness)和可动关节的约束。这对于训练需要与环境交互的 VLA 模型至关重要。
  3. 多光照条件(Lighting Conditions)
    • 全局光照:使用高动态范围成像(HDRI)贴图作为天空盒,模拟真实世界的环境光和间接光照。应有一个包含不同天气(晴天/阴天/黄昏)和地点(城市/乡村)的 HDRI 库。
    • 局部光源:程序化地在场景中放置符合语义的局部光源(点光源、聚光灯、面光源),并随机化其强度、色温和开关状态。
    • 动态光照:模拟复杂的动态光照效果,如电视屏幕闪烁、窗外车辆驶过造成的光影变化、日光随时间推移造成的阴影移动。这对模型的鲁棒性是极大的考验。
  4. 杂物与动态元素(Clutter & Dynamic Elements)
    • 语义驱动的杂物放置:根据房间类型(厨房、卧室)和预设的“凌乱度”参数,在语义上合理的位置(如 on(table), inside(drawer)) 放置杂物。这可以防止模型学到“桌子上永远是干净的”这种错误的先验。
    • 程序化智能体:在场景中引入遵循预设行为逻辑(如社交力模型、预定脚本)的仿真行人、宠物或其他机器人。这为训练动态避障、社交礼让和人群交互提供了关键数据。

18.2 语义/语言任务的程序化合成

对于 VLA 等需要指令跟随的模型,仅有视觉场景是不够的。我们需要大规模、多样化、且与场景紧密耦合的任务指令及其对应的专家轨迹

生成流程:

  1. 结构化场景表示(Scene Graph)
    • 这是任务合成的基石。仿真环境必须能导出一个详细的场景图 G = (V, E),其中节点 v ∈ V 代表物体、房间或区域,并带有属性(如类别、颜色、状态{open, closed});边 e ∈ E 代表它们之间的关系(如空间关系 on(cup, table)、部件关系 has(table, leg)、语义关系 used_for(chair, sitting))。
  2. 分层任务生成
    • 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." (需要模型理解“整洁”的语义,并规划出一系列子任务)
  3. 指令生成技术
    • 模板与填充[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."
  4. 专家轨迹与对话生成
    • 专家轨迹:使用传统的规划器(如 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。必须进行跨模态一致性校验。

18.4 生成式增强:超越传统仿真

生成式 AI(Generative AI)为合成数据注入了新的活力,能够以极低的成本创造前所未有的多样性。

  1. 文本/图像转三维场景 (Text/Image-to-3D Scene)
    • 利用如 LERF, Neuralangelo, 3D Gaussian Splatting 等前沿技术,可以从本描述(“一个带木地板和落地窗的现代简约客厅”)或几张真实图片,快速生成一个可渲染、可导航的 3D 场景。这使得场景库的扩充速度从“周”级别提升到“分钟”级别。
  2. 真实数据的伪标注 (Pseudo-Labeling on Real Data)
    • 这是一个强大的 Sim2Real 技术。对真实世界的图像,使用最先进的预训练模型(如用 SAM/SEEM 进行开放词汇分割,用 MiDaS/ZoeDepth 进行单目深度估计)生成“伪真值”。虽然这些标签带有噪声,但它们拥有真实的视觉域。将这些(真实图像,伪标签)对与(仿真图像,完美标签)对混合训练,可以显著提升模型的真实世界性能。
  3. 生成式材质与风格 (Generative Materials & Styles)
    • 使用文本到图像的扩散模型(如 Stable Diffusion)配合 ControlNet 或专门的 PBR 生成流程,可以根据文本提示(如“一张有划痕的旧木地板贴图”)生成无的、高质量的 PBR 材质。这彻底解决了传统材质库有限的问题。
  4. 生成式行为与轨迹 (Generative Behaviors & Trajectories)
    • 使用扩散模型或 VAE 等生成模型,学习真实世界行人轨迹数据集(如 aETH, UCY)的分布,然后在仿真环境中生成更多样、更自然的行人移动路径,而不仅仅是简单的直线或脚本路径。

18.5 现实-仿真域桥接 (Sim2Real Domain Bridging)

这是合成数据能否成功的关键。模型在仿真中表现再好,如果不能泛化到真实世界,一切都是徒劳。域桥接的目标是最小化 \mathcal{D}_{sim}\mathcal{D}_{real} 之间的分布差异。

核心算法策略

  1. 域随机化 (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 是最有效、最鲁棒的基线方法。它迫使模型学习对底层几何和物理结构的不变性,而不是过拟合到特定的视觉纹理。
  2. 系统辨识与真实噪声注入 (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 算法成功的关键。
  3. 几何优先原则 (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)        |         |                          |
    +---------------------------+         +--------------------------+
    
  4. 学习型域适应 (Learning-based Domain Adaptation)
    • 当 DR 不足时,可以采用更复杂的学习方法。例如,使用对抗性训练,让一个判别器(Discriminator)无法区分特征提取器(Encoder)输出的特征是来自仿真域还是真实域。这迫使编码器学习一种域不变的(domain-invariant)特征表示。

本章小结

常见陷阱与错误 (Gotchas)

  1. 过度追求照片级真实感 (Photorealism Trap):团队将大量工程时间与计算资源投入到渲染极致逼真的图像上,却忽略了场景多样性、几何复杂度和物理真实性。最终模型在几个“漂亮”的仿真场景里表现完美,但在结构稍有不同的真实环境中就完全失效。
  2. 使用“无菌”仿真数据 (Sterile Data Fallacy):直接使用仿真器输出的完美、无噪声的数据进行训练,是 Sim2Real 失败最常见的原因。这会导致模型对真实世界的传感器噪声、执行器延迟和校准误差极其敏感。
  3. 仿真分布与现实脱节 (Distribution Mismatch):生成的仿真场景(如全是开阔的大平层)与实际部署环境(如拥挤的单身公寓、杂乱的仓库)的统计分布不匹配,导致模型学到了错误的几何或语义先验。
  4. 忽略“动力学鸿沟”(Dynamics Gap):只关注视觉域的鸿沟,而忽略了物理和动力学。仿真器中的物理引擎参数(如摩擦力、碰撞响应、电机响应曲线)与真实机器人不匹配,会导致在仿真中训练出的控制策略在真实世界中不稳定甚至危险。
  5. 资产版权污染 (Asset Copyright Contamination):在构建场景库时,使用了从网络上随意下载、版权不明的 3D 模型或 PBR 材质。这会给整个数据集带来严重的法律风险,对于商业项目是致命的。必须建立严格的资产源审核与合规流程。
  6. 计算成本失控 (Computational Cost Spiral):高保真度的仿真,尤其是包含复杂物理和光线追踪的仿真,计算成本极高。必须在数据质量和生成效率之间做出明智的权衡,并设计可扩展的数据生成流水线。