论文解读与源码复现|VidBot: Learning Generalizable 3D Actions from In-the-Wild 2D Human Videos for Zero-Shot Robotic Manipulation:从野生人类视频学习可泛化 3D 机器人操作(CVPR 2025)

论文首页题目与摘要截图

图源:论文首页截图(CVPR 2025 Open Access 版本)

前言

让机器人学会"开柜门、拉抽屉、拿水壶"这类日常操作,主流做法是模仿学习(Imitation Learning,IL,即从专家示教中学习策略):研究者通过遥操作(teleoperation,人类远程操控机器人)采集示教数据,再训练策略网络。然而 Open X-Embodiment、DROID 这类大规模机器人数据集虽然体量惊人,依然无法回避"具身(embodiment)× 任务 × 环境"组合爆炸的问题——每换一款机器人、每换一个环境,就要重新采数据。

另一方面,互联网上早已存在海量的人类操作视频。问题在于:这些视频绝大多数是单目 RGB、相机运动、无深度传感器、无动作捕捉标记的"野生(in-the-wild)"素材,如何从中提取出机器人可用的 3D 操作知识?此前最接近的工作 VRB(CVPR 2023)虽然能从人类视频中提取与具身无关(embodiment-agnostic,即不依赖特定机器人形态)的动作线索,但其输出是像素平面上的 2D 运动向量,缺乏空间感知能力,难以直接部署。

CVPR 2025 上,来自慕尼黑工业大学(TUM)与苏黎世联邦理工学院(ETH Zürich)的团队提出的 VidBot 给出了系统性答案:用"深度基础模型 + 运动恢复结构(Structure-from-Motion,SfM)"从野生单目视频中重建出时间一致、米制尺度的 3D 手部轨迹,作为接触点与交互轨迹形式的 3D 亲和(affordance,指物体/场景向智能体提供的"可交互之处")表示;再通过"粗到细"(coarse-to-fine)的亲和模型,在测试时借助可微代价函数(cost guidance)引导扩散模型生成轨迹。最终模型在 13 个操作任务上零样本(zero-shot,训练时未见过目标任务/环境)达到 88.2% 成功率,并成功零样本部署到两种真实机器人平台上。

方法解析

图1:VidBot 总体框架展示

图源:论文 Figure 1。VidBot 从野生 RGB 人类视频中提取 3D 亲和,可零样本部署到不同机器人完成"开柜子""放杯子""抽纸"等日常任务。

问题定义

VidBot 要学习的因子化亲和模型为 a = π({Ĩ, D̃}, l),其中 {Ĩ, D̃} 是 RGB-D 观测(深度 D̃ 可来自深度传感器,也可来自米制深度基础模型),l 是语言指令。最终输出的亲和表示 a = {c, τ}:接触点 c ∈ R^(Nc×3)(机器人应当触碰物体哪里)与交互轨迹 τ ∈ R^(H×3)(H 为轨迹时域长度,描述如何触碰)。这一表示在观测相机坐标系下给出,天然与机器人本体解耦。

第一步:从单目视频提取 3D 亲和数据

图2:从原始人类视频提取的示例轨迹

图源:论文 Figure 2。"打开橱柜""擦台面"等原始视频中提取出的 3D 手部轨迹。

整个流水线要解决的核心矛盾是:SfM 只能恢复未标定尺度的相机位姿与稀疏点云,而深度基础模型预测的深度虽有米制尺度却存在跨帧不一致。VidBot 的做法是把两者"对齐 + 联合优化":

  1. 数据准备。先用 SfM 系统(COLMAP,论文引文 [71])估计相机内参 K、各帧带尺度歧义的位姿 {T_WC_i} 与世界系稀疏路标点;再用米制深度基础模型(ZoeDepth / Depth Anything / Metric3D v2,论文引文 [8, 33, 90])预测每帧稠密深度;用手部检测模型(100DOH,引文 [72])与分割模型(SAM、EfficientSAM,引文 [41, 94])得到手部与被操作物体的掩码;最后用视频修复模型(E2FGVI,引文 [44])把首帧中的手"擦除",得到无手帧(干净的场景背景图)。

  2. 全局尺度校正。把稀疏路标点投影回各图像平面,在"静态区域"(即排除手与物体的区域 M̃_i)上,以深度预测值为约束,优化一个全局尺度因子 s_g(式 1)。这一步只使用静态区域,避免动态物体污染尺度估计。

  3. 逐帧位姿与尺度精化。SfM 的重建误差会被动态的手-物体运动放大。VidBot 选择共视性(co-visibility)最高的参考帧 k,对每帧的位姿 T_WC_i 与尺度 s_i 做基于重投影一致性的梯度优化(式 2):把各帧反投影的 3D 点变换到参考帧坐标系下,最小化对应像素点之间的欧氏距离,参考帧的尺度固定为 s_g。这相当于用深度先验为 SfM 结果"再校准",得到时间一致、米制尺度的重建。

  4. 亲和提取。把每帧的手部中心点用精化后的位姿/尺度变换到首帧坐标系,得到交互轨迹 τ̂;首帧中手部点下采样得到接触点 ĉ,末帧手部点下采样得到目标点 ĝ(goal points,交互结束时期望到达的位置)。语言描述 l、修复后的首帧颜色图 Ĩ_0 与其深度 D̃_0、用物体掩码裁剪出的修复物体图,一起构成训练输入。

论文使用 EpicKitchens-100 视频数据集(引文 [18])及其由 EpicFields(引文 [76])提供的 SfM 结果来展示该流水线的有效性。

第二步:粗到细的亲和学习模型

图3:VidBot 亲和学习模型总览

图源:论文 Figure 3。模型分解为粗阶段(接触点/目标点预测)与细阶段(扩散轨迹生成 + 测试时代价引导)。

粗亲和预测(Coarse Stage)

粗阶段从高维像素空间解析"宏观可操作信息"。给定 RGB-D 观测与指令,先用开源集检测器(Grounding DINO / EfficientSAM,引文 [49, 87])裁出感兴趣物体的 RGB-D 图像。模型由两个同构的"沙漏型"网络组成:

  • 目标点预测器 π_c^goal:输入上下文颜色图与用物体中位深度填充的深度图(因为交互轨迹的终点往往分布在自由空间,物体表面的真实深度不可靠)。全局上下文特征 z_goal 经视觉编码器提取后,通过 RoI Pooling 得到物体中心嵌入 z_o^goal,由 MLP 得到包围框位置特征 z_b^goal,用冻结的 CLIP(引文 [66])编码语言特征 z_l。三者在 Perceiver(引文 [34])模块中通过自注意力/交叉注意力融合后,一路送入 Transformer 编码器 + MLP 回归目标点深度,一路送入视觉解码器输出逐像素目标点概率热图。
  • 接触点预测器 π_c^cont:结构与前者类似,但不预测深度——接触点位于物体表面,深度图本身有效;且只融合语言特征。

最后用相机内参把从热图采样的像素坐标配合查询到的深度反投影到 3D,得到粗亲和输出 {g, c}。

细亲和预测(Fine Stage)

细阶段建模为条件扩散去噪过程(DDPM 框架,引文 [31, 36])。扩散状态 τ 即交互轨迹,去噪网络 π_f 采用 1D U-Net:

  • 从预测热图中取概率最高的目标点 ḡ 与接触点 c̄;
  • 用 ViT(引文 [9])提取物体特征嵌入 z_o^fine,与语言嵌入 z_l 一起构成条件嵌入 o = {PE(g), PE(c), Proj(z_l), z_o^fine}(PE 为位置编码,Proj 为 Transformer 编码器 + MLP);
  • 为注入空间感知,用 3D U-Net 从 RGB-D 体素化的 TSDF(Truncated Signed Distance Function,截断符号距离场)地图 U 编码 C_m 维隐特征,对去噪轨迹 τ^k 的每个路点做三线性插值得到空间特征 f^k,与 τ^k 拼接为去噪输入 x^k = {τ^k, f^k};
  • 与常见的噪声预测不同,π_f 直接预测去噪后的轨迹 τ̄^0 = π_f(x^k, PE(k), o),并据此计算均值 μ^k。
代价引导的轨迹生成(Cost-Guided Trajectory Generation)

这是 VidBot 最具工程巧思的部分。粗阶段选出的单点 ḡ 可能有偏差,而多次采样不同目标配置反复查询模型计算低效。作者把"多目标条件化"转化为测试时可微代价函数,在去噪过程中以梯度扰动输出(重构引导,引文 [32, 69]):

  • 多目标引导 J_goal = min_{g_n∈g} ‖g_n − τ̄_H^0‖²(式 5):轨迹端点到目标点集合的最小距离;
  • 避碰引导 J_collide(式 6):从夹爪模型与可搬运物体表面采样 N_p 个点 p_i,从预计算的 TSDF 地图 U 中可微查询数值;
  • 接触法向引导 J_normal(式 6):约束轨迹方向向量与接触点法向 n 的对齐关系;
  • 总代价 J = λ_g·J_goal + λ_c·J_collide + λ_n·J_normal(式 7),每个去噪步按下式修正预测:τ^0 = τ̄^0 − Σ_k∇_{τ^k}J(式 8)。

代价引导带来三重好处:不必多次前向即可覆盖目标分布;能顾及新具身的形态与未见物体的几何,产出无碰撞、可直接接入下游全身规划的轨迹;最终代价 J 还能作为智能体挑选最优交互方案的启发式准则。

训练目标

粗模型:把提取的 ĝ、ĉ 投影到图像平面,拟合高斯混合模型得到真值热图 Ĥ_g、Ĥ_c,用 BCE 损失监督热图,目标预测器额外回归目标点中位深度,并带辅助向量场回归损失 L_v(式 9、10)。细模型:以提取轨迹 τ̂ 为监督,最小化 ‖τ̂ − τ̄^0‖²(式 11),其中 k 服从均匀分布的扩散步采样。

数据集与实验设置

  • 仿真平台:IsaacGym(引文 [53]),环境基于 AG2Manip(引文 [43])搭建。
  • 任务集:来自 FrankaKitchen、PartManip、ManiSkill 三个基准的 13 个日常家庭任务(T01–T13),涵盖开、关、推、滑等动作原语,对象包括柜门、抽屉、水壶等。
  • 评测协议:每个任务从 3 个视角评测,每个视角每模型生成 5 条轨迹,即每任务每模型 15 次试验;成功率定义为"使任务物体的自由度(DoF)超过预设阈值且不与场景中其他物体碰撞"。
  • 基线:GAPartNet 与 Where2Act(仿真资产交互训练);Octo(大规模遥操作数据预训练 + 用本文提取数据微调);VRB 与 GFlow(人类视频训练,其中 GFlow 可访问 HOI4D 的真值深度、相机参数与物体位姿,条件更宽松)。公平起见,对无法准确推断接触区域的 VRB/GFlow,作者改用本文模型统一推断并标准化接触配置,使评测聚焦于更难的轨迹预测。VRB 的像素级轨迹用 RAM(引文 [42])策略提升到 3D。
  • 真实机器人:Hello Robot Stretch 3 与 Boston Dynamics Spot 两台移动机器人,均配备机载 RGB-D 相机,在 3 个适合人类活动的环境中测试推抽屉、开柜子、抽纸等任务。

关键实验结果

1. 仿真主结果:13 任务平均成功率 88.2%,领先第二名近 20 个百分点

表1:13个仿真任务的成功率对比

图源:论文 Table 1 截图。数值已与原文逐项核对后重新录入下表。

方法T01 关铰链柜T02 关滑轨柜T03 关微波炉T04 开铰链柜T05 开微波炉T06 拉抽屉T07 推抽屉T08 关洗碗机T09 开洗碗机T10 拿水壶T11 从杂物拿罐T12 从杂物拿盒T13 揭盖平均
GAPartNet73.313.366.733.353.353.340.066.760.0----51.1
Where2Act86.753.360.00.046.766.760.0100.053.3----58.5
Octo*93.333.393.366.760.046.780.080.053.3100.066.753.373.369.2
VRB†100.020.0100.046.766.753.340.026.746.7100.060.046.760.059.0
GFlow100.033.3100.06.760.053.36.726.773.393.3100.060.080.061.0
Ours100.093.3100.066.780.086.7100.066.786.7100.0100.066.7100.088.2

注:* 表示 Octo 在本文提取的亲和数据上微调;† 表示 VRB 采用文献 [42] 策略将亲和提升至 3D。

几个值得注意的现象:

  • GAPartNet / Where2Act / VRB 把交互策略抽象为方向向量,对拉/推抽屉这类直线运动尚可,但对开铰链柜门这类需要弧线交互的任务(T04:GAPartNet 33.3%、Where2Act 0.0%、VRB 46.7%),过度简化的运动导致夹爪打滑而失败。
  • Octo 微调后达到 69.2%(第二名),说明本文提取的数据本身质量足够高,能"喂饱"通用策略;但它从场景上下文直接推断复杂动作的能力仍弱于 VidBot。
  • GFlow 平均 61.0%,主要受轨迹尺度预测错误拖累。
  • 与 VRB 使用完全相同的视频数据源(EpicKitchens,引文 [17])做监督,VidBot 靠 3D 先验与新学习策略把成功率提升约 30%。

2. 消融实验:每个组件都不可或缺

表2:6个任务上的消融结果

图源:论文 Table 2 截图。数值已与原文逐项核对后重新录入下表。

变体AT01 关滑轨柜AT02 开铰链柜AT03 开微波炉AT04 拉抽屉AT05 开洗碗机AT06 拿罐平均
完整模型93.366.780.086.786.7100.085.6
去掉粗阶段目标预测 [V1]66.733.373.353.360.060.057.8
去掉多目标引导 [V2]80.040.060.093.366.7100.073.3
去掉接触法向引导 [V3]86.733.380.0100.060.0100.076.7
去掉避碰引导 [V4]93.360.080.080.080.073.377.8
去掉代价启发式选择 [V5]80.046.766.780.073.3100.074.5

关键读数:

  • 粗阶段贡献最大:V1 从 85.6% 跌至 57.8%(−27.8 个百分点),证明直接从信息密集的观测生成细粒度轨迹非常困难,先推断粗粒度目标配置作为"affordance 线索"能大幅简化轨迹生成。
  • 多目标引导(V2)平均提升 12.3 个百分点:单目标条件会误导生成过程,多目标引导能纠正粗阶段累积的误差。
  • 避碰引导对可搬运物体至关重要(V4):拿罐任务(AT06)成功率因去掉避碰引导下降 26.7 个百分点(100.0% → 73.3%)。
  • 代价启发式选择(V5)平均贡献 11.1 个百分点:最终代价 J 作为挑选最优方案的依据非常有价值。

3. 真实机器人零样本部署:55 次试验 80.0% 成功率

VidBot 在 Hello Robot Stretch 3 与 Boston Dynamics Spot 两台本体差异极大的移动机器人上,于 3 个真实环境中测试推抽屉、开柜子、抽纸等任务,共 55 次试验取得 80.0% 总成功率——训练数据全部来自人类视频,从未在真机上采集过任何演示,验证了框架的具身无关性与零样本可迁移性。

4. 下游机器人学习应用:更快收敛、更高上限

以亲和模型作为强先验,在 AT01–AT06 上进行视觉目标达成(visual goal-reaching,智能体额外获得目标构型的图像)与探索(exploration,以"偶然成功"coincidental success 为指标,即不访问期望构型却将其实现)两类下游任务实验。论文 Figure 4 显示,VidBot 显著快于其他基于人类视频训练的基线收敛,且整体性能更优——得益于测试时可用成功轨迹缓冲区替换 J_goal 中的目标点采样,把先验与在线经验动态结合。

机制解释与讨论

为什么"2D 视频监督 → 3D 机器人执行"是可行的? 核心在于中间表示的选择。VidBot 没有停留在像素级亲和热图(缺乏深度信息),也没有要求真实深度传感器采集(成本高、场景受限),而是借助"深度基础模型 + SfM"这一对互补先验,从 RGB 单目数据中恢复出米制尺度的 3D 监督信号。深度模型提供每帧稠密的米制深度,SfM 提供跨帧的几何一致性约束,联合优化后两者互相弥补:前者跨帧抖动被位姿精化吸收,后者的尺度歧义被深度先验锚定。

为什么粗到细分解有效? 从信息论角度看,粗阶段把高维观测压缩为低维"语义动作摘要"(在哪里接触、到哪里结束),细阶段的扩散模型只需在给定端点约束下补全轨迹形态——本质上是一个"间隙填充器(gap filler)"。论文明确指出 π_f 的角色就是填补接触点 c̄ 与目标点 ḡ 之间的空隙,因此当目标点有偏差时轨迹必然出错;而多目标代价引导恰好利用了扩散模型的迭代去噪结构,在每一步都能"拉回"端点误差,相当于把离散的多假设检验转化成了连续的梯度场优化。

测试时代价引导与 Diffusion Policy 类方法的本质区别:Diffusion Policy、Diffuser 等在分布内(in-domain)遥操作数据上学习,测试时没有模态或具身差异;VidBot 面对的是训练(人类视频)与测试(机器人观测)之间的双重鸿沟。因此它不把全部希望寄托在学到的动作先验上,而是保留一组解析的、可组合的物理约束(多目标、避碰、法向),在推理时注入场景几何(TSDF)与本体形态(夹爪采样点)信息。这是一种"学习先验 + 解析约束"的混合范式,比纯学习范式对分布偏移更鲁棒。

公平性处理的细节:由于 VRB/GFlow 无法准确推断接触区域,作者用 VidBot 模型统一推断并标准化两者的接触配置,评测重点聚焦在轨迹预测上。这个设计说明主表结果是在"更难的任务、对基线更有利"的条件下取得的,反而强化了结论可信度。

局限与工程启示

论文自述的局限:数据质量受深度基础模型与 SfM 流水线精度制约,尽管最终优化损失可以过滤低质量标签;作者建议未来接入 MASt3R-SfM、DUSt3R、MonST3R(引文 [21, 80, 93])等学习型 SfM 框架提升标签质量;另外像拧瓶盖这类需要精细多模态接触的任务仍在框架能力之外,计划用可穿戴设备提取多模态亲和数据。

工程启示:

  1. "基础模型 + 经典几何"仍是低成本 3D 数据生产的最优解之一。深度基础模型单帧准但不一致,SfM 一致但无尺度,二者代价联合优化是对抗各自弱点的通用模板,可迁移到任何"从单目视频恢复米制 3D"的场景。
  2. 把测试时的自由度编码为可微代价,而不是训练更多模型分支。多目标、避碰、法向三种代价全部解析可微,零训练成本就能适配新机器人形态(换夹爪只改采样点云)与新场景(换 TSDF 地图),这是典型的"训练一次、测试自适应"。
  3. 代价不只是约束,还是选择依据。最终代价 J 同时用于梯度修正与方案排序(可视化中颜色越深代价越低、优先执行),一份计算两处收益。
  4. 数据流水线与模型解耦。提取流水线与方法无关(method-agnostic),意味着上游 SfM/深度模型的任何进步都可以直接转化为标签质量红利。
  5. 复现工程注意:官方代码依赖锁定得非常严格(PyTorch 1.13.1 + pytorch-lightning 1.8.6 + transformers 4.26.1),GroundingDINO 安装可能悄悄改动 transformers 版本,GraspNet 依赖的 MinkowskiEngine 编译门槛高——但框架允许不装 GraspNet,退化用启发式方法获取抓取位姿。

源码复现

⚠️ 复现路径/未运行:以下为源码结构与预期运行路径分析,非实际运行结果

官方仓库目录结构(真实列出)

复现代码/936-VidBot/
├── algos/                  # 核心算法引擎
│   ├── afford_algos.py     # AffordanceInferenceEngine 总引擎
│   ├── contact_algos.py    # 接触点算法
│   ├── goal_algos.py       # 目标点算法
│   ├── traj_algos.py       # 轨迹扩散算法
│   └── traj_optimizer.py   # 轨迹优化器
├── assets/                 # 夹爪网格等资源(panda_hand_mesh.obj)
├── config/
│   └── test_config.yaml    # 推理总配置(数据集目录/权重路径/第三方模块路径)
├── demos/
│   ├── infer_affordance.py # 亲和推理入口脚本
│   └── optimize_affordance.py
├── diffuser_utils/
│   ├── guidance_loss.py    # 测试时代价引导(多目标/避碰/法向等)
│   ├── guidance_params.py  # 按动作类型的引导权重字典
│   ├── dataset_utils.py    # RGB-D 数据加载、TSDF、CLIP 编码等工具
│   └── tensor_utils.py
├── models/                 # 网络定义(16 个 py 文件)
│   ├── clip/               # 内置 CLIP(ViT-B/16)
│   ├── attention.py / perceiver.py
│   ├── goal.py / contact.py
│   ├── diffuser.py / temporal.py
│   ├── feature_extractors.py
│   └── layers_2d.py / layers_3d.py / helpers.py
├── scripts/
│   ├── download_ckpt_testdata.sh   # 下载预训练权重与演示数据
│   ├── prepare_third_party_modules.sh
│   └── test_demo.sh                # 演示批量推理脚本
├── LICENSE                 # MIT
├── README.md
└── requirements.txt

环境安装(摘自官方 README)

git clone https://github.com/HanzhiC/vidbot.git
cd vidbot

# 环境
conda create -n vidbot python=3.10.9
conda activate vidbot

# 锁定关键版本
pip install pytorch-lightning==1.8.6
pip install -r requirements.txt   # 含 torch==1.13.1+cu117, transformers==4.26.1

# PyTorch Scatter
wget https://data.pyg.org/whl/torch-1.13.0%2Bcu117/torch_scatter-2.1.1%2Bpt113cu117-cp310-cp310-linux_x86_64.whl
pip install torch_scatter-2.1.1+pt113cu117-cp310-cp310-linux_x86_64.whl

# 预训练权重与演示数据
sh scripts/download_ckpt_testdata.sh

# 可选:第三方模块(GroundingDINO / EfficientSAM / GraspNet)
sh scripts/prepare_third_party_modules.sh

预期运行路径

快速体验(无需安装任何第三方检测模块,使用预存包围框):

bash scripts/test_demo.sh

test_demo.sh 内部按乱序执行 12 条推理命令,覆盖"pickup sponge / take mug / open cabinet / push door"等指令,每条形如:

python demos/infer_affordance.py -v -f 0 -i 'pickup sponge' --load_results --no_save

用自己的数据推理:按 README 要求组织数据(推荐 1280×720 分辨率,RGB/depth 图像序列 + camera_intrinsic.json 内参文件),然后:

python demos/infer_affordance.py \
    --config ./config/test_config.yaml \
    --dataset YOUR_DATASET_NAME \
    --frame FRAME_ID \
    --instruction YOUR_INSTRUCTION \
    --object OBJECT_CLASS \
    --visualize

若已成功安装 GraspNet,追加 --use_graspnet 以估计夹爪位姿。

关键代码片段解读

入口与 CLIP 文本编码(demos/infer_affordance.py):脚本加载内置 CLIP ViT-B/16 作为指令编码器,从指令首词解析动作类型,用于查表选择引导权重:

from diffuser_utils.guidance_loss import DiffuserGuidance
from diffuser_utils.guidance_params import GUIDANCE_PARAMS_DICT

# CLIP-based action text encoder
VLM, VLM_TRANSFORM = clip.load("ViT-B/16", jit=False)
...
action = args.instruction.split(" ")[0]
if action not in GUIDANCE_PARAMS_DICT:
    print("WARNING: Action [{}] not found in guidance params, quality not guaranteed".format(action))
    guidance_params = GUIDANCE_PARAMS_DICT["other"]
else:
    guidance_params = GUIDANCE_PARAMS_DICT[action]

可见 guidance_params.py 中的 GUIDANCE_PARAMS_DICT 正是论文式 (7) 中权重 (λ_g, λ_c, λ_n) 的工程化落地:不同动词(pickup/open/push…)对应不同的引导强度与体素分辨率。

代价引导引擎装配(demos/infer_affordance.py):

diffuser_guidance = DiffuserGuidance(
    goal_weight=goal_weight,        # 多目标引导权重
    noncollide_weight=noncollide_weight,
    contact_weight=contact_weight,
    normal_weight=normal_weight,    # 法向引导权重
    scale=calib_scale,
    exclude_object_points=exclude_object_points,
    valid_horizon=-1,
)
inference_engine = AffordanceInferenceEngine(
    traj_config=cfg_traj, goal_config=cfg_goal, contact_config=cfg_contact,
    traj_guidance=diffuser_guidance, ...)

对应 diffuser_utils/guidance_loss.py 中 DiffuserGuidance 聚合了 GoalConditionedGuidance(多目标)、MapNonCollisionGuidance(TSDF 避碰)、NormalVectorGuidance(接触法向)、MapContactGuidance 与 TrajectorySmoothnessGuidance 五个引导器,每个去噪步调用 compute_guidance_loss(x, t, data_batch) 返回总损失与分项损失,供梯度修正与轨迹排序复用。

三阶段推理流程(demos/infer_affordance.py 主循环):检测(forward_detect,GroundingDINO 开放词汇检测并导出中间结果)→ 粗阶段(forward_contact / forward_goal,各采样 100 个候选点)→ 细阶段(forward_traj,开启 use_guidance=True,默认生成 40 条轨迹样本,裁剪至前 60 个路点后平滑)。可视化部分用 Open3D 渲染轨迹,按总代价上 turbo 色图着色并 argmin 选出最优轨迹——与论文 Figure 5/6 中"颜色越深代价越低"的说法完全一致。

权重与配置组织(config/test_config.yaml):三个子模型(traj/goal/contact)各自的 config 与 final.ckpt 存放于 ./pretrained/,第三方模块(GroundingDINO SwinT、EfficientSAM vitt、GraspNet minkuresunet_kinect)路径独立可配,印证了"第三方模块可选、框架可降级运行"的设计。

复现提示

  • 版本锁死是本仓库的第一坑:安装 GroundingDINO 可能升级 transformers,务必回装 4.26.1(README 明确提示)。
  • 不装 GraspNet 也能跑通全流程,只是抓取位姿退化为启发式估计;MinkowskiEngine 编译在 Windows 上尤其困难,建议在 Linux 环境复现。
  • test_demo.sh 的 --load_results 模式直接加载预存的检测/粗阶段结果(scene_meta/ 与 prediction/ 目录下的 npz),绕过了检测器依赖,是快速验证权重的推荐路径。

总结

VidBot 用一条清晰的"数据流水线 + 因子化模型 + 测试时自适应"路线,回答了"机器人能否只靠看人类视频学会操作"这一问题:深度基础模型与 SfM 的联合优化把野生单目 RGB 视频变成米制、时间一致的 3D 手部轨迹监督;粗到细的亲和模型先从像素解析"接触哪里、去往哪里",再用扩散模型在多目标/避碰/法向三种可微代价引导下补全轨迹。结果上,13 个仿真任务零样本 88.2% 成功率(超第二名约 20 个百分点)、消融验证各组件贡献(粗阶段 +27.8、多目标引导 +12.3、避碰引导在拿取任务上 +26.7、代价启发式 +11.1 个百分点)、真机双平台 55 次试验 80.0% 成功率,共同支撑了"人类视频是可扩展的机器人学习数据源"这一论断。对机器人学习社区而言,其"解析代价引导扩散"的设计与"数据流水线与模型解耦"的工程思想,即便不直接复用整篇工作,也具有很高的借鉴价值。

引用信息

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐