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.5、image_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["整段动作执行中不重新规划"]