3D-VLA 方法原理详解

3D-VLA 图解:从三维感知、目标想象到机器人动作

阅读路线

  • 5 分钟:第 0、1、14 节
  • 方法全貌:第 2~10 节
  • 复现前必读:第 13 节

0. 一张图抓住 3D-VLA

flowchart LR A["当前 RGB-D / 多视角图像"] --> B["带坐标的 3D 场景特征"] U["语言指令"] --> C["3D-VLA 语言主干"] B --> C C --> D["物体 + 3D 位置 + 目标模态"] D --> E{"目标生成器"} A --> E E --> F["目标 RGB-D"] E --> G["目标点云"] B --> H["动作规划"] F --> H G --> H U --> H H --> I["离散 7-DoF 动作 token"] I --> J["机器人执行"]

核心:先看懂现在,再想象目标,最后规划动作。


1. 它解决什么问题

1.1 直接 VLA 与 3D-VLA

flowchart TB subgraph Direct["传统直接 VLA"] A1["2D 当前图像"] --> A2["策略模型"] A3["指令"] --> A2 A2 --> A4["动作"] A4 --> A5["问题:缺少显式 3D 几何与未来目标"] end subgraph ThreeDVLA["3D-VLA"] B1["当前 3D 状态"] --> B2["3D 理解与定位"] B3["指令"] --> B2 B2 --> B4["想象目标状态"] B1 --> B5["比较当前与目标"] B4 --> B5 B5 --> B6["动作序列"] end

1.2 三个学习问题

flowchart LR S0["当前状态 s0"] --> Z["中间语义 z"] L["指令 l"] --> Z Z --> SG["目标状态 sg"] S0 --> SG S0 --> ACT["动作 a1:K"] SG --> ACT L --> ACT

\[p(z\mid s_0,l),\qquad p(s_g\mid s_0,z),\qquad p(a_{1:K}\mid s_0,s_g,l) \]

这里的 world model 主要预测任务完成时的目标状态,不是逐帧物理模拟器。


2. 整体模型结构

2.1 四个核心组件

flowchart TB subgraph P["1. 三维感知"] P1["多视角视觉特征"] P2["点云坐标"] P1 --> P3["Q-Former"] P2 --> P3 P3 --> P4["每个场景 32 个 token"] end subgraph R["2. 语言化推理"] R1["Flan-T5 XL"] R2["场景 / 物体 / 位置 / 动作 token"] R2 --> R1 end subgraph W["3. 目标想象"] W1["Transformer Projector"] W2["RGB / RGB-D 扩散"] W3["点云扩散"] W1 --> W2 W1 --> W3 end subgraph C["4. 控制"] C1["当前 + 目标 + 指令"] --> C2["7-DoF 动作 token"] end P4 --> R1 R1 --> W1 W2 --> C1 W3 --> C1

2.2 信息怎样跑一圈

sequenceDiagram participant Obs as 当前观测 participant Q as Q-Former participant LLM as Flan-T5 participant Proj as Projector participant DM as 扩散模型 participant Ctrl as 动作生成 Obs->>Q: 点特征 + 3D 坐标 Q->>LLM: 32 个场景 token LLM->>LLM: 理解指令并定位对象 LLM->>Proj: 目标生成区间的隐藏状态 Proj->>DM: 对齐后的条件特征 Obs->>DM: 当前 RGB-D 或点云 DM->>Ctrl: 目标状态 Obs->>Ctrl: 当前状态 Ctrl-->>Ctrl: 自回归生成动作 token

3. 数据如何构造

3.1 来源与规模

flowchart LR subgraph Robot["机器人数据"] R1["Open-X 多数据集"] R2["Dobb-E / RH20T"] R3["RLBench / CALVIN"] end subgraph HOI["人类-物体交互"] H1["Epic-Kitchens"] H2["HOI4D"] end R1 --> E["约 316K episodes"] R2 --> E R3 --> E H1 --> E H2 --> E E --> D["约 2M 条 3D-language-action 样本"]

一个 episode 可派生多种任务,因此样本数远大于 episode 数。

3.2 从视频到 3D 指令样本

flowchart TD A["视频 + 指令 + 可选动作"] --> B{"是否有深度"} B -->|有| D["统一深度表示"] B -->|无| C["ZoeDepth 逐帧估深"] C --> C2["RAFT 找静止背景"] C2 --> C3["校准跨帧深度尺度"] C3 --> D D --> E["RGB-D 反投影为点云"] A --> F["spaCy 抽取名词短语"] F --> G["Grounded-SAM 得到 2D mask"] G --> H["mask 提升到 3D"] H --> I["3D AABB"] A --> J["未来 / 末帧"] J --> K["目标 RGB / 深度 / 点云"] A --> L["原数据 7-DoF 动作"] E --> M["模板 + GPT-3.5 改写"] I --> M K --> M L --> M M --> N["多任务指令数据"]

3.3 RGB-D 如何变成点云

flowchart LR A["像素 u, v"] --> D["深度 d"] K["相机内参 fx, fy, cx, cy"] --> P["相机坐标 X, Y, Z"] D --> P A --> P P --> T["相机外参变换"] T --> W["世界坐标点云"] RGB["像素颜色 / 视觉特征"] --> W

\[X=\frac{(u-c_x)d}{f_x},\qquad Y=\frac{(v-c_y)d}{f_y},\qquad Z=d \]

3.4 3D 物体框如何生成

flowchart LR I["指令:关闭底层抽屉"] --> N["名词短语:底层抽屉"] N --> M["2D 物体 mask"] M --> P["mask 内像素 + 深度"] P --> PC["局部 3D 点云"] PC --> BOX["AABB 六元组"] BOX --> Q["6 个位置 token"]

\[b=(x_{min},y_{min},z_{min},x_{max},y_{max},z_{max}) \]

同名候选较多时,论文结合显著光流区域与 grounding 置信度选择被操作对象。

3.5 一份数据衍生多种任务

flowchart TB E["一个 3D 机器人 episode"] --> Q1["Embodied QA"] E --> Q2["What-if QA"] E --> Q3["任务描述"] E --> Q4["完成验证"] E --> Q5["3D 定位"] E --> Q6["框内描述"] E --> Q7["目标 RGB-D 生成"] E --> Q8["目标点云生成"] E --> Q9["动作预测"]

3.6 公开代码读取的三类样本

flowchart LR subgraph LLM["3D 语言样本"] L1["pc_feat: T x N x 1408"] L2["pc: T x N x 3"] L3["question / answers"] L4["T <= 2, N = 6400"] end subgraph IMG["图像扩散样本"] I1["base_image_path"] I2["final_image_path"] I3["instruction"] I4["可选 depth 文件"] end subgraph PCD["点云扩散样本"] P1["episode 第一帧"] P2["episode 最后一帧"] P3["xyzrgb 六维点"] P4["训练采样 2048 点"] end

图像数据集 \(d\) 的采样权重为:

\[w_d=\sqrt{|D_d|} \]

这样可避免大数据集完全淹没小数据集。


4. 特殊 token:统一语言、空间与动作

4.1 token 词表

flowchart TB V["3D-VLA 扩展词表"] --> S["场景:scene 起止 token"] V --> O["物体:obj 起止 token"] V --> L["位置:loc0 到 loc255"] V --> I["图像:image 起止 token"] V --> P["点云:pcd 起止 token"] V --> A1["位置动作:aloc0 到 aloc255"] V --> A2["旋转动作:arot0 到 arot255"] V --> G["夹爪:gripper0 / gripper1"] V --> SEP["动作分隔:ACT_SEP"]

4.2 一个答案怎样同时表达意图、对象与空间

<pcd>
close the <obj> bottom drawer </obj>
<loc42><loc81><loc20><loc96><loc137><loc74>
</pcd>
flowchart LR M["pcd 起止 token"] --> M1["选择点云生成器"] O["obj 起止 token"] --> O1["明确操作对象"] L["6 个 loc token"] --> L1["明确对象 3D AABB"] T["自然语言"] --> T1["明确状态变化"]

4.3 AABB 量化

flowchart LR B["连续 AABB 六元组"] --> N["按每维有效范围归一化"] N --> Q["映射到 0 到 255"] Q --> T["6 个 loc token"] T --> D["T5 可自回归预测"]

\[q(v)=\operatorname{clip}\left( \operatorname{round}\left(255\frac{v-v_{min}}{v_{max}-v_{min}}\right),0,255 \right) \]

论文和代码确认使用 256 桶,但未公开精确坐标范围与反量化规则。上式说明通用原理,不是未发布预处理器的精确复现参数。

4.4 7-DoF 动作 token 化

flowchart LR A["连续动作"] --> P["位置 x, y, z"] A --> R["旋转 r1, r2, r3"] A --> G["夹爪 g"] P --> PT["3 个 aloc token"] R --> RT["3 个 arot token"] G --> GT["1 个 gripper token"] PT --> S["单步 7-DoF token"] RT --> S GT --> S S --> SEP["ACT_SEP"] SEP --> NEXT["下一动作"]

\[a_k=(x,y,z,r_1,r_2,r_3,g) \]

离散化让 T5 能统一生成语言、空间框和动作;代价是量化误差,且 token 不自动保证可达、无碰撞。


5. 3D 语言主干

5.1 从几千个点到 32 个 T5 token

flowchart LR F["点视觉特征 F:N x 1408"] --> ADD["逐点相加"] P["离散坐标 P:N x 3"] --> PE["xyz 位置编码:1407 维 + 补零"] PE --> SCALE["乘 0.1"] SCALE --> ADD ADD --> Q["Q-Former:32 个可学习 query"] Q --> H["32 x 768"] H --> PROJ["线性投影"] PROJ --> T["32 x 2048 的 T5 场景 token"]

\[\tilde F_i=F_i+0.1[PE(x_i);PE(y_i);PE(z_i);0] \]

\[H_Q=QFormer(Q,\tilde F)\in\mathbb R^{32\times768} \]

\[H_{3D}=W_{proj}H_Q\in\mathbb R^{32\times2048} \]

5.2 场景 token 插入文本

flowchart TB A["文本:初始场景是 scene 占位符,关闭底层抽屉"] --> B["T5 分词"] B --> C["找到 scene 起始 token"] S["Q-Former 输出 32 个 3D token"] --> D["插入 scene 起止 token 之间"] C --> D D --> E["文本 token 与 3D token 交错序列"] E --> F["Flan-T5 encoder"]

两个 scene 占位符可表达“初始 + 当前”或“初始 + 目标”两个静态快照。

5.3 T5 统一生成各种答案

flowchart LR E["同一个 T5 decoder"] --> A1["自然语言答案"] E --> A2["6 个位置 token"] E --> A3["image / pcd 生成区间"] E --> A4["7-DoF 动作序列"] A1 --> L["统一 token 交叉熵"] A2 --> L A3 --> L A4 --> L

\[\mathcal L_{LLM} =-\sum_{j=1}^{L_y}\log p_\theta(y_j\mid y_{<j},x,H_{3D}) \]

padding token 设为 \(-100\),不计入损失。公开代码计算了多答案频率权重,但当前 forward 没有把它乘入 loss。

5.4 冻结与训练范围

flowchart TB subgraph Train["训练"] T1["Q-Former"] T2["32 个 query token"] T3["Q-Former 到 T5 投影"] T4["T5 输入 embedding"] T5["T5 输出 embedding / LM head"] end subgraph Freeze["冻结"] F1["Flan-T5 主体 Transformer"] end

初始化使用 BLIP-2 Flan-T5 XL,不加载 3D-LLM 的室内场景权重。

5.5 前向过程伪代码

def forward_3d_vla(sample):
    # 点外观 + 三维位置
    point = sample.pc_feat + 0.1 * encode_xyz(sample.pc)

    # 每个场景压缩成 32 个 token,并投影到 T5 的 2048 维空间
    scene = to_t5_dim(q_former(query_32, point))

    # 将场景 token 插入文本中的 scene 占位符
    encoder_input = insert_scene(t5_tokenize(sample.question), scene)

    # 所有任务统一做自回归 token 交叉熵
    target = mask_padding(t5_tokenize(sample.answer), value=-100)
    return flan_t5(encoder_input, labels=target).loss

6. 目标图像 / RGB-D 扩散

6.1 训练数据流

flowchart LR G["目标 RGB-D"] --> V1["冻结 VAE"] V1 --> ZG["目标 latent zg"] ZG --> NOISE["随机时间 t + 高斯噪声"] NOISE --> ZT["带噪目标 latent zt"] C["当前 RGB-D"] --> V2["冻结 VAE"] V2 --> CI["当前状态 latent cI"] L["指令"] --> CLIP["冻结 CLIP text encoder"] CLIP --> CL["文本条件 cl"] ZT --> CAT["按通道拼接"] CI --> CAT CAT --> U["可训练 UNet"] CL --> U U --> EPS["预测噪声"]

\[z_t=\sqrt{\bar\alpha_t}z_g+\sqrt{1-\bar\alpha_t}\epsilon \]

\[\mathcal L_{img} =\mathbb E\left[\|\epsilon-epsilon_\theta([z_t;c_I],t,c_l)\|_2^2\right] \]

6.2 RGB 与 RGB-D 通道

flowchart TB subgraph RGB["RGB 模式"] R1["带噪目标:4"] --> R3["UNet 输入:8"] R2["当前条件:4"] --> R3 R3 --> R4["输出噪声:4"] end subgraph RGBD["RGB-D 模式"] D1["带噪 RGB 4 + Depth 4"] --> D3["UNet 输入:16"] D2["当前 RGB 4 + Depth 4"] --> D3 D3 --> D4["输出噪声:8"] end

深度以 3 通道图保存,单独经 VAE 得到 4 通道 latent,再与 RGB latent 拼接。

6.3 条件丢弃与 CFG

flowchart LR TRAIN["训练时随机丢条件"] --> C1["图像 + 文本"] TRAIN --> C2["只有图像"] TRAIN --> C3["无条件"] C1 --> INF["推理组合三种预测"] C2 --> INF C3 --> INF INF --> O1["文本引导:改对目标"] INF --> O2["图像引导:保持背景与视角"]

公开推理默认:50 个去噪步、guidance_scale=2.5image_guidance_scale=2.5

6.4 参数状态

flowchart LR F["冻结"] --> V["VAE"] F --> C["CLIP text encoder"] T["训练"] --> U["改造后的整个 UNet"] U --> N["新增输入通道零初始化"] U --> P["已有通道复制预训练权重"]

论文方法写 Stable Diffusion v1.4;当前 launcher / 推理默认 Stable Diffusion 2。最终 LLM 对齐阶段改用扩散 LoRA。


7. 目标点云扩散

7.1 训练对与共同归一化

flowchart LR E["RLBench episode"] --> S["第一帧点云 P0"] E --> G["最后一帧点云 Pg"] S --> ALL["合并求共同中心与半径"] G --> ALL ALL --> NS["归一化 P0"] ALL --> NG["归一化 Pg"] NS --> PAIR["训练对"] NG --> PAIR

共同归一化保留起点与终点之间的真实相对位移。每个点为 \((x,y,z,r,g,b)\)

7.2 模型数据流

flowchart LR PG["目标点云 Pg"] --> N["加噪得到 Pt:6 通道"] P0["当前点云 P0:6 通道"] --> CAT["拼接为 12 通道"] N --> CAT TXT["指令"] --> CLIP["CLIP 文本特征 768"] TIME["扩散时间 t"] --> TE["时间 token"] CAT --> TR["Point-E 风格 Transformer"] CLIP --> TR TE --> TR TR --> EPS["每点 6 维预测噪声"]
flowchart TB M["公开训练配置"] --> L["12 层"] M --> W["width 512"] M --> H["8 heads"] M --> N["2048 点"] M --> T["1024 个扩散时间步"] M --> B["base40M_textvec 初始化"]

\[\mathcal L_{pcd} =\mathbb E\left[\|\epsilon-epsilon_\theta([P_t;P_0],t,c_l)\|_2^2\right] \]

7.3 从 Point-E 改造成条件编辑器

flowchart LR BASE["预训练 Point-E"] --> IN["输入层扩为 12 通道"] IN --> COPY["旧 6 通道复制权重"] IN --> ZERO["新增 6 通道置零"] COPY --> OUT["输出层改为 6 通道"] ZERO --> OUT OUT --> FT["机器人点云对微调"]

7.4 反向扩散推理

sequenceDiagram participant N as 高斯目标点云 participant M as 点云 Transformer participant S as Scheduler participant C as 当前点云条件 loop 64 个反向扩散步骤 N->>M: 当前 Pt C->>M: 固定 P0 M->>M: 条件与无条件噪声预测 M->>S: CFG 组合,强度 2.0 S->>N: 更新 Pt 到 Pt-1 end N-->>N: 得到目标 xyzrgb 点云

发布模型推理可设 8192 点,训练使用 2048 点。


8. LLM 与扩散模型对齐

8.1 为什么需要 Projector

flowchart TB S["当前 3D 场景 + 指令"] --> LLM["3D-VLA LLM"] LLM --> O["对象:底层抽屉"] LLM --> B["位置:6 个 loc token"] LLM --> M["模态:pcd"] O --> H["生成区间隐藏状态"] B --> H M --> H H --> P["Transformer Projector"] P --> C["扩散模型条件空间"] C --> DM["点云扩散模型"]

只传原始指令会让扩散模型重复做对象识别与定位;Projector 复用 LLM 已完成的 3D 推理。

8.2 对齐关系

flowchart LR H["LLM 隐状态 HLLM"] --> P["Projector"] E["特殊 token embedding"] --> P P --> CI["图像扩散条件"] P --> CP["点云扩散条件"]

\[C_{DM}=Projector(H_{LLM},E_{token}) \]

仓库 TextFcLayer 提供 linear、Transformer、Q-Former 三种候选映射;Transformer 模式为 512 隐藏维、4 层 encoder、4 层 decoder、4 heads。

8.3 对齐阶段参数与损失

flowchart TB subgraph Train["训练"] T1["新增特殊 token embedding"] T2["对应 LM head"] T3["完整 Projector"] T4["扩散模型 LoRA"] end subgraph Loss["联合监督"] L1["LLM token 交叉熵"] L2["扩散去噪 MSE"] end Train --> Loss

\[\mathcal L_{align} =\lambda_{LLM}\mathcal L_{LLM} +\lambda_{DM}\mathcal L_{DM} \]

论文未给出两个 \(\lambda\) 的具体值。当前仓库只有 Projector 层定义,没有公开可运行的联合对齐主路径


9. 完整训练 pipeline 与 loss

9.1 五个阶段

flowchart LR A["A. 构造 3D 多任务数据"] --> B["B. 训练 3D 语言主干"] A --> C1["C1. 训练 RGB-D 扩散"] A --> C2["C2. 训练点云扩散"] B --> D["D. LLM 与扩散联合对齐"] C1 --> D C2 --> D D --> E["E. 目标条件动作生成"]

9.2 每阶段监督信号

flowchart TB B["3D LLM"] --> L1["L_LLM:token 交叉熵"] I["图像扩散"] --> L2["L_img:latent 噪声 MSE"] P["点云扩散"] --> L3["L_pcd:点噪声 MSE"] A["联合对齐"] --> L4["L_align:LLM loss + DM loss"] C["动作学习"] --> L5["动作 token 交叉熵,仍属于 L_LLM"]

9.3 训练伪代码

# 1. 先分别建立语言理解与两种目标生成能力
train_3d_llm(data, loss=L_llm)
train_image_diffusion(image_pairs, loss=L_img)
train_point_diffusion(point_pairs, loss=L_pcd)

# 2. 再对齐 LLM 隐状态与扩散条件空间
for batch in alignment_data:
    hidden, loss_llm = llm_teacher_forcing(batch)
    dm_condition = projector(hidden)
    loss_dm = diffusion_denoising(batch, dm_condition)
    update(special_tokens, lm_head, projector, diffusion_lora,
           loss=lambda_llm * loss_llm + lambda_dm * loss_dm)

9.4 论文、代码与发布权重配置

flowchart TB subgraph Paper["论文实验配置"] P1["3D LLM:30 epochs,batch 4/节点"] P2["warmup 1K:1e-8 到 1e-5,再衰减到 1e-6"] P3["联合对齐:最多 20 epochs,batch 2/节点"] P4["AdamW,weight decay 0.05"] end subgraph Repo["当前仓库示例"] R1["LLM YAML:100 epochs,batch 3,累积 2"] R2["LLM 学习率:5e-4"] R3["RGB-D:256 x 256,batch 32/GPU,180K steps"] R4["RGB-D 学习率:5e-5"] R5["点云:200 epochs,batch 24,2048 点,3e-5"] end subgraph Card["发布权重 Model Card"] C1["RGB:192 V100,360K steps,约 3 周"] C2["RGB-D:96 V100,100K steps,约 2 周"] end

这些属于论文实验版、后续发布权重版和开源示例版,不能拼成一套唯一配置。


10. 推理流程

10.1 论文完整系统

sequenceDiagram participant U as 用户 participant P as 3D 感知 participant L as 3D-VLA LLM participant D as 扩散模型 participant A as 动作生成 participant R as 机器人 U->>P: 当前观测 + 指令 P->>L: 场景 token L->>L: 选择模态、对象、3D 框 L->>D: Projector 对齐条件 P->>D: 当前 RGB-D / 点云 D->>L: 生成目标状态并重新编码 L->>A: 当前 + 目标 + 指令 A->>R: 反量化后的 7-DoF 动作序列 R-->>R: open-loop 执行

10.2 推理中的两个闭环

flowchart LR S0["当前状态"] --> L["LLM 推理"] L --> G["扩散生成目标"] G --> ENC["目标重新编码为 3D 场景"] ENC --> L2["动作生成"] S0 --> L2 L2 --> A["动作序列"]

这是模型内部的目标反馈,不是执行过程中的闭环控制。论文 RLBench 实验仍是 open-loop。

10.3 当前公开代码实际可运行的三条独立路径

flowchart TB subgraph LLM["公开路径 1"] L1["预计算 3D 特征 + 问题"] --> L2["3D LLM"] L2 --> L3["文本 / 位置 / 动作 token"] end subgraph IMG["公开路径 2"] I1["当前图像 + 原始指令"] --> I2["独立 RGB(-D) 扩散"] I2 --> I3["目标图像"] end subgraph PCD["公开路径 3"] P1["当前点云 + 原始指令"] --> P2["独立点云扩散"] P2 --> P3["目标点云"] end

公开 demo 的扩散条件是原始文本,不是 LLM Projector 的在线隐藏特征。


11. 完整示例:关闭底层抽屉

11.1 从演示数据到机器人执行

sequenceDiagram participant Data as 训练演示 participant Ann as 数据标注 participant LLM as 3D LLM participant DM as 点云扩散 participant Ctrl as 动作生成 Data->>Ann: 第一帧抽屉打开,末帧抽屉关闭 Ann->>Ann: mask 提升到 3D AABB Ann->>LLM: 场景 + 指令 + 位置 token LLM->>LLM: 定位底层抽屉并选择 pcd LLM->>DM: 目标语义 + 3D 位置 DM->>Ctrl: 抽屉关闭后的目标点云 Ctrl->>Ctrl: 比较当前与目标 Ctrl-->>Ctrl: 生成接近、抓取、推入动作

11.2 中间表示

flowchart LR U["Close the bottom drawer"] --> O["obj:bottom drawer"] O --> B["loc42 ... loc74"] B --> M["pcd 模态"] M --> G["目标点云:抽屉关闭,背景尽量不变"] G --> A1["动作 1:接近把手"] A1 --> A2["动作 2:接触 / 抓住"] A2 --> A3["动作 3:沿导轨推入"]
<pcd> close the <obj> bottom drawer </obj>
<loc42><loc81><loc20><loc96><loc137><loc74> </pcd>

<aloc...><aloc...><aloc...>
<arot...><arot...><arot...><gripper1><ACT_SEP>
...

示例数字只说明格式,不代表真实量化值。


12. 为什么这些设计有效

12.1 因果链

flowchart TB D3["显式 3D 特征"] --> SP["更准确的距离与空间关系"] SP --> LOC["更好的对象定位"] LOC --> BOX["预测 3D 框"] BOX --> FOCUS["扩散模型聚焦正确区域"] FOCUS --> GOAL["更稳定的目标状态"] GOAL --> PLAN["当前-目标差异更清晰"] PLAN --> ACT["更好的动作规划"]

12.2 三个关键消融结论

flowchart LR A["加入 3D"] --> A1["推理与定位提升"] B["加入预测框"] --> B1["目标图像与点云略有提升"] C["机器人域训练扩散"] --> C1["背景、视角与布局更稳定"]

论文 held-in 3D localization:IoU 29.33、Acc@25 42.26、Acc@50 27.09。结果支持方法设计,但不等于已证明开放世界泛化。


13. 发布边界与局限

13.1 论文与公开仓库的边界

flowchart TB subgraph Paper["论文完整系统"] P1["3D LLM"] --> P2["Projector"] P2 --> P3["多模态扩散"] P3 --> P4["目标反馈"] P4 --> P5["动作生成"] end subgraph Repo["当前公开仓库"] R1["3D LLM 训练代码"] R2["RGB(-D) 扩散训练与推理"] R3["点云扩散训练与推理"] R4["Projector 层定义"] R5["缺少联合对齐与端到端入口"] end
flowchart LR subgraph Full["论文完整能力"] F1["3D LLM 预训练"] F2["RGB / RGB-D 目标扩散"] F3["点云目标扩散"] F4["Transformer Projector"] F5["LLM + diffusion 联合对齐"] F6["目标反馈后动作生成"] F7["原始观测到 3D 特征"] F8["256 桶坐标与动作"] end subgraph Open["当前公开状态"] O1["LLM 有代码;完整权重 Coming Soon"] O2["RGB / RGB-D 有代码与权重"] O3["点云有代码与权重"] O4["Projector 只有层定义"] O5["联合对齐脚本未提供"] O6["端到端目标反馈入口未提供"] O7["完整 3D 特征预处理未发布"] O8["精确量化范围未发布"] end F1 --> O1 F2 --> O2 F3 --> O3 F4 --> O4 F5 --> O5 F6 --> O6 F7 --> O7 F8 --> O8

13.2 版本差异

flowchart LR P["论文"] --> P1["Stable Diffusion v1.4"] P --> P2["LLM 30 epochs"] R["当前仓库"] --> R1["Stable Diffusion 2"] R --> R2["LLM YAML 100 epochs"] M["发布 Model Card"] --> M1["RGB 360K steps"] M --> M2["RGB-D 100K steps"]

13.3 方法风险

flowchart TB X["主要局限"] --> L1["只生成目标,不保证中间物理轨迹"] X --> L2["open-loop 执行中无法及时纠错"] X --> L3["256 桶带来连续控制量化误差"] X --> L4["深度 / mask / 3D 框误差会级联"] X --> L5["扩散目标不保证可达、无碰撞"] X --> L6["held-in 与有限任务评测"] X --> L7["LLM + 扩散串联,推理成本较高"]

当前仓库可核实各子模块,但不能仅靠现有文件原样复现论文的完整端到端系统。


14. 全方法一屏总结

flowchart TB DATA["316K episodes -> 2M 指令样本"] --> FEAT["多视角 1408 维点特征 + xyz"] FEAT --> Q["Q-Former:每场景 32 token"] Q --> T5["Flan-T5 XL"] TOK["scene / obj / loc / image / pcd / action token"] --> T5 T5 --> REASON["问答、定位、模态选择"] T5 --> PROJ["Projector"] PROJ --> IMG["RGB-D 扩散:L_img"] PROJ --> PCD["点云扩散:L_pcd"] IMG --> GOAL["目标状态"] PCD --> GOAL FEAT --> ACT["当前 + 目标 + 指令"] GOAL --> ACT ACT --> OUT["7-DoF 动作 token:L_LLM"] OUT --> ROBOT["反量化并 open-loop 执行"] NOTE["公开版:三个子模块独立;联合对齐与端到端入口未发布"] -.-> PROJ

15. 术语与核对依据

flowchart LR VLA["VLA"] --> V1["视觉-语言-动作"] WM["World Model"] --> W1["本文主要生成目标状态"] AABB["AABB"] --> A1["轴对齐 3D 包围盒"] QF["Q-Former"] --> Q1["少量 query 汇聚大量 3D 点"] LDM["LDM"] --> L1["VAE 潜空间中的扩散"] CFG["CFG"] --> C1["条件与无条件预测组合"] OL["Open-loop"] --> O1["整段动作执行中不重新规划"]
posted @ 2026-07-10 13:54  S-X-Q  阅读(115)  评论(0)    收藏  举报