Real2Edit2Real:3D控制接口驱动的机器人演示数据生成框架深度解析
论文信息
- 标题:Real2Edit2Real: Generating Robotic Demonstrations via a 3D Control Interface
- 会议:CVPR 2026
- 单位:北京大学智能学院、智元机器人
- 代码:https://github.com/Real2Edit2Real/Real2Edit2Real
- 论文:https://arxiv.org/pdf/2512.19402v2.pdf
一、摘要原文翻译
机器人学习的近期进展由大规模数据集与强大的视觉运动策略架构共同推动,但策略的泛化能力始终受限于多样化演示数据的高昂采集成本,在机械臂操作任务的空间泛化场景中尤为突出。为减少重复的数据采集工作,本文提出Real2Edit2Real框架,通过一套3D控制接口搭建3D可编辑性与2D视觉数据之间的桥梁,实现全新演示数据的生成。
本方法首先通过度量尺度3D重建模型,从多视角RGB观测中恢复场景几何结构;基于重建得到的几何信息,在点云上执行深度可靠的3D编辑操作,生成全新的操作轨迹,同时对机器人姿态进行几何校正,输出物理一致的深度信号,作为合成新演示的可靠约束条件;最后提出一种多条件视频生成模型,以深度为主控信号,结合动作、边缘、光线映射三类辅助信号,合成具备空间增强效果的多视角操作视频。

在四项真实世界操作任务上的实验表明:仅使用1-5条源演示生成的数据训练策略,其效果即可持平甚至超越使用50条真实演示训练的模型,数据效率最高提升10-50倍。此外,高度编辑、纹理编辑等实验验证了框架的灵活性与可扩展性,表明其具备成为统一数据生成框架的潜力。
二、方法动机
2.1 核心驱动力:机器人数据采集的“天价成本”
具身智能要落地,最烧钱的不是模型,是数据。一条机械臂抓取演示,需要工人现场示教、多相机同步录制、人工标注核验,一套流程下来成本几百上千块;想让机器人学会在不同位置、不同角度、不同光照下都能完成任务,就要采集几十上百条演示,小团队根本扛不住。
更头疼的是空间泛化:你教机器人在桌子中间抓杯子,它换个角落就不会了,本质是训练数据里没见过这个空间分布,模型学不到通用的操作逻辑。行业里一直缺一种“用少量真实数据,批量生成空间多样化数据”的方案。

2.2 现有方法的三大痛点
通俗解释:之前的方法要么是“给照片P图”改不了真实空间,要么是“在游戏里练手”到现实不好使,要么是“AI瞎画”几何逻辑不对,都没法低成本产出能用的机器人训练数据。
2.3 研究假设与核心直觉
作者赌了一个很朴素的逻辑:
先把真实场景精准重建出3D模型,在3D空间里随便改物体位置、改机器人轨迹(反正3D里改几何绝对不会错),再用深度图当“骨架”引导视频生成模型画真实画面,就能同时保证「空间几何正确」和「视觉画面真实」。
一句话概括:用3D编辑保几何正确性,用2D生成分保视觉真实性,深度图就是两者之间的通用控制接口。
三、方法整体设计

3.1 整体Pipeline总览
整个框架分三步闭环,完美对应“Real→Edit→Real”的名字:
图1 3D控制视频生成模块架构 出自原文Figure3。以深度为核心3D控制接口,结合边缘、动作、相机位姿四路条件,通过交叉注意力注入视频扩散模型,同时保证几何正确与视觉真实。
下面逐层拆解每个阶段的技术细节。
3.2 阶段一:度量尺度3D几何重建
这一步是整个框架的地基——重建出来的3D尺寸不准,后面编辑的位置全是错的。
核心问题
普通多视角重建模型只能重建出相对几何,不知道真实世界里杯子到底是5厘米还是50厘米,没法用于真实机器人的轨迹规划。
解决方案:混合训练范式VGGT
作者基于VGGT(Video Geometry Grounded Transformer)重建模型,提出仿真+真实数据混合训练:
- 仿真数据提供精确的深度真值和尺度,让模型学会准确的深度估计;
- 真实机器人场景数据提供真实的几何分布,让模型适配真实光照、纹理。
训练的深度损失函数:
Ldepth=1HW∑i=1H∑j=1W∣Dpred(i,j)−Dgt(i,j)∣
\\mathcal{L}_{depth} = \\frac{1}{HW}\\sum_{i=1}^{H}\\sum_{j=1}^{W}|D_{pred}(i,j) – D_{gt}(i,j)|
Ldepth=HW1i=1∑Hj=1∑W∣Dpred(i,j)−Dgt(i,j)∣
符号解释:
- H,WH,WH,W:深度图的高和宽;
- Dpred(i,j)D_{pred}(i,j)Dpred(i,j):模型预测的像素(i,j)(i,j)(i,j)处深度值;
- Dgt(i,j)D_{gt}(i,j)Dgt(i,j):对应像素的深度真值;
- Ldepth\\mathcal{L}_{depth}Ldepth:逐像素L1深度损失,保证重建深度和真值一致。
最终输出:带真实物理尺度的场景3D点云、每帧相机内外参、原始机器人轨迹。
通俗解释:这一步就像给真实场景做“高精度3D扫描”,扫出来的模型和现实世界尺寸分毫不差,后面改位置的时候,才能保证机器人真的能抓到。
3.3 阶段二:深度可靠的3D空间编辑与轨迹校正
这是“Edit”的核心环节:在3D点云上改物体位置,同时保证机器人轨迹、深度图都符合物理逻辑。
步骤1:轨迹分段与空间变换
把一条演示分成两类片段:
- 技能段(Skill Segment):机器人和物体交互的阶段(抓取、放置、推动),物体和末端执行器保持相对位置不变,物体移到哪,机械臂末端就跟到哪;
- 运动段(Motion Segment):机器人空走的阶段,重新规划运动轨迹,保证起止位姿平滑衔接。
物体位姿变换公式:
p′=R⋅p+t
p' = R \\cdot p + t
p′=R⋅p+t
符号解释:
- ppp:物体原始3D坐标点;
- RRR:旋转矩阵,控制物体旋转角度;
- ttt:平移向量,控制物体移动位置;
- p′p'p′:变换后的物体3D坐标点。
步骤2:机器人姿态几何校正
物体动了,只改末端位置不行,机械臂整个手臂的姿态都得重新算,不然会穿模、超出关节极限。
作者用URDF机器人模型+逆运动学(IK)求解:
q∗=argminq∥FK(q)−pend′∥22+λ∥q−q0∥22
q^* = \\arg\\min_{q} \\| FK(q) – p_{end}' \\|_2^2 + \\lambda\\| q – q_0 \\|_2^2
q∗=argqmin∥FK(q)−pend′∥22+λ∥q−q0∥22
符号解释:
- qqq:机械臂各关节角度;
- FK(⋅)FK(\\cdot)FK(⋅):正运动学函数,输入关节角输出末端位姿;
- pend′p_{end}'pend′:目标末端位姿(跟随物体变换后的位置);
- q0q_0q0:原始关节角度,加正则项保证姿态变化平滑;
- λ\\lambdaλ:正则权重;
- q∗q^*q∗:优化后的最优关节角序列。
步骤3:深度图生成与优化
编辑后的点云+新相机位姿,投影生成初始深度图;因为物体移动后会有遮挡、空洞,用填充+去噪优化深度图,再把校正后的机器人深度叠加上去,最终得到完整、物理一致的深度图序列。
通俗解释:这一步就像在3D软件里挪物体、调机械臂动作,全程在三维空间里操作,绝对不会出现“手穿进桌子里”的离谱情况,生成的深度图就是后面视频生成的“精准骨架”。
3.4 阶段三:多条件3D控制视频生成
骨架搭好了,最后一步是给骨架“穿衣服”——生成逼真的RGB视频。只用深度控制容易出现纹理闪烁、物体前后不一致,作者叠了四路控制信号,各司其职。
四路控制信号分工
| 深度图序列(主控) | 约束每帧的3D空间布局、物体位置 | 保证几何结构正确,不出现空间错乱 |
| 边缘图 | 锁定物体、机械臂的轮廓边界 | 防止生成的物体边缘模糊、形状走形 |
| 动作信号 | 编码机械臂关节角、末端位姿变化 | 保证机器人运动轨迹和规划的完全一致 |
| 光线映射(Ray Maps) | 编码相机内外参 | 保证多视角之间几何对齐,视角切换不崩 |
视频扩散模型结构
基于SVD(Stable Video Diffusion)架构改造,四路信号通过各自的编码器编码后,通过交叉注意力注入U-Net的每一层,和文本提示、初始帧特征联合计算。
扩散模型的训练目标(噪声预测损失):
Lvideo=Ez0,ϵ,t,c[∥ϵ−ϵθ(zt,t,c)∥22]
\\mathcal{L}_{video} = \\mathbb{E}_{z_0, \\epsilon, t, c}\\left[ \\| \\epsilon – \\epsilon_\\theta(z_t, t, c) \\|_2^2 \\right]
Lvideo=Ez0,ϵ,t,c[∥ϵ−ϵθ(zt,t,c)∥22]
符号解释:
- z0z_0z0:真实视频的潜变量;
- ϵ\\epsilonϵ:采样的高斯噪声;
- ttt:扩散时间步;
- ccc:所有控制条件(深度、边缘、动作、光线映射);
- ztz_tzt:加噪后的潜变量;
- ϵθ(⋅)\\epsilon_\\theta(\\cdot)ϵθ(⋅):扩散模型U-Net,预测当前时刻的噪声;
- E[⋅]\\mathbb{E}[\\cdot]E[⋅]:对所有样本、时间步、噪声取期望。
推理时,输入第一帧图像+整段深度序列+其他控制信号,一步一步去噪,最终输出完整的演示视频。
通俗解释:深度图管“物体在哪、空间对不对”,边缘图管“形状清不清晰”,动作信号管“机械臂动得对不对”,光线映射管“视角准不准”,四路一起约束,生成的视频既好看又符合物理逻辑。
四、与现有方法的本质对比
4.1 核心差异
| 2D图像增强 | GenAug | 像素层面数据增广 | 无法改变3D空间布局,解决不了空间泛化 | 3D空间编辑,真正改变物体位姿与轨迹 |
| 纯仿真生成 | RoboCasa | 仿真引擎渲染数据 | Sim-to-Real鸿沟大,真机迁移效果差 | 以真实数据为起点,仅在3D层编辑,视觉由真实先验生成,域差更小 |
| 纯视频生成 | 通用视频扩散 | 端到端生成视频 | 几何一致性差,容易穿模、空间错乱 | 深度强约束,从生成机制上保证几何正确 |
4.2 核心创新点
4.3 适用场景
五、实验表现与分析
5.1 实验设置
- 测试任务:4项真实机械臂操作任务——Mug-to-Basket(杯子放篮子)、Bottle-Pushing(推瓶子)、Stacking(堆叠积木)、Nut-Assembly(螺母装配);
- 对比基线:真实数据训练、2D增强、纯仿真数据、纯视频生成数据等;
- 评价指标:任务成功率(Success Rate),即机器人完成任务的比例,是机器人学习最核心的落地指标;
- 核心设置:分别用1/5/10/50条真实演示,和本文方法生成的数据训练策略,对比最终成功率。
5.2 核心实验结果
不同数据量下的任务成功率对比(平均)
| 真实演示数据 | 1条 | 21.3% |
| 真实演示数据 | 5条 | 38.7% |
| 真实演示数据 | 50条 | 62.5% |
| 2D增强+1条真实 | 等效1条 | 25.8% |
| 仿真生成数据 | 50条 | 47.2% |
| Real2Edit2Real+1条真实 | 生成等效50条 | 64.1% |
核心结论:
5.3 消融实验
作者逐个去掉四路控制信号,验证每个模块的作用:
- 去掉深度信号:成功率暴跌28%,空间几何直接错乱,证明深度是核心控制接口;
- 去掉动作信号:成功率下降11%,机械臂运动轨迹容易出错;
- 去掉边缘/光线映射:分别下降5%和7%,主要影响画面清晰度和多视角一致性。
结论:四路信号各司其职,深度是核心骨架,其他三路是锦上添花的细节保障。
5.4 局限性
六、核心代码实现(简化版)
整体Pipeline核心流程
import numpy as np
import torch
from scipy.spatial.transform import Rotation
class Real2Edit2RealPipeline:
def __init__(self, recon_model, ik_solver, video_diffusion_model):
self.recon_model = recon_model # 度量尺度3D重建模型
self.ik_solver = ik_solver # 逆运动学求解器
self.diffusion_model = video_diffusion_model # 多条件视频生成模型
def reconstruction_stage(self, multi_view_videos):
"""阶段1:多视角视频 -> 带尺度3D点云+相机位姿+原始轨迹"""
point_cloud, camera_poses = self.recon_model(multi_view_videos)
original_traj = self.recon_model.extract_robot_traj(multi_view_videos)
return point_cloud, camera_poses, original_traj
def edit_stage(self, point_cloud, original_traj, transform_R, transform_t):
"""阶段2:3D空间编辑 -> 新轨迹+深度图序列"""
# 1. 物体位姿变换
transformed_points = (transform_R @ point_cloud.T).T + transform_t
# 2. 轨迹分段:技能段跟随变换,运动段重新规划
new_traj = []
for seg_type, seg_traj in original_traj:
if seg_type == "skill":
# 交互段,末端跟随物体变换
new_end_traj = (transform_R @ seg_traj["end_pose"].T).T + transform_t
else:
# 运动段,重新规划平滑轨迹
new_end_traj = plan_motion(seg_traj["start"], seg_traj["end"])
# 3. 逆运动学校正机械臂关节姿态
new_joint_traj = self.ik_solver.solve(new_end_traj, seg_traj["init_q"])
new_traj.append({"joint": new_joint_traj, "end": new_end_traj})
# 4. 投影生成深度图序列
depth_sequence = project_point_cloud_to_depth(transformed_points, camera_poses)
depth_sequence = fill_depth_holes(depth_sequence) # 空洞填充优化
return new_traj, depth_sequence
def generation_stage(self, init_frame, depth_sequence, action_seq, edge_seq):
"""阶段3:多条件控制生成最终演示视频"""
conditions = {
"depth": depth_sequence,
"action": action_seq,
"edge": edge_seq,
"ray_map": generate_ray_maps(camera_poses)
}
generated_video = self.diffusion_model(init_frame, conditions)
return generated_video
def __call__(self, input_video, transform_params):
"""完整端到端流程"""
# 1. 重建
pcd, cams, traj = self.reconstruction_stage(input_video)
# 2. 3D编辑
R = Rotation.from_euler('z', transform_params["rot"]).as_matrix()
t = np.array(transform_params["trans"])
new_traj, depths = self.edit_stage(pcd, traj, R, t)
# 3. 视频生成
output_video = self.generation_stage(input_video[0], depths, new_traj, None)
return output_video
七、落地案例与趣味解读
真实案例:工厂螺丝装配工位
某3C工厂的机械臂要做螺丝装配,产线上螺丝托盘每次位置都有±2厘米偏差,之前工人要示教几十次才能覆盖所有位置,效率极低。
用Real2Edit2Real之后:
通俗说:以前教机器人干活,每个位置都得手把手教一遍;现在教一遍,AI自动把周围位置的“教学视频”都生成好了,机器人直接学会举一反三。
八、学习与复现建议
8.1 复现关键步骤
8.2 关键超参与注意事项
- 深度图的尺度必须和真实物理尺度对齐,差10%就会导致机器人抓空;
- 物体编辑幅度不宜过大,超出原始视角太多的区域生成质量会下降;
- 逆运动学求解要加关节极限约束,避免生成机械臂无法到达的姿态;
- 视频生成建议用20-30步采样,平衡速度和质量。
8.3 可迁移方向
这个框架思路完全可以迁移到其他领域:
九、总结与思考
9.1 核心思想(一句话)
3D编辑保几何+深度接口控生成,1条演示顶50条真实数据。
![[特殊字符]GPT‑6 Astra 实测一晚上|审美、Agent 智能体、3D 能力全面爆发,AI 又进化了✨-171主机测评](https://www.171host.com/wp-content/uploads/2026/09/20260911125632-6aa3fa80883e6-220x150.png)





