Li et al. 2025 · arXiv:2512.03724v2 · 用末端位姿投影监督 VLA 注意力,提升动作精度与效率
/home/chenzhiyuan/Zotero/storage/35A52HF9/Li 等 - 2025 - PosA-VLA Enhancing Action Generation via Pose-Conditioned Anchor Attention.pdf 提取分析;本地与公开搜索暂未找到官方代码仓库,因此代码印证部分标注为“源码未找到,机制以论文描述为准”。PosA-VLA 的核心不是再让 VLM/SAM 帮机器人找目标,而是把机器人自己的 end-effector pose 投影到 head/wrist camera 的 2D 图像平面上,生成 task-relevant anchor 和 end-effector anchor,用它们监督 VLA 的视觉注意力。这样模型在执行过程中持续看“目标区域 + 末端当前位置”,减少无效扫描、反复修正和冗余动作。
| 项 | 内容 |
|---|---|
| 单位 | MBZUAI / AI2 Robotics / University of Sydney / University of Melbourne |
| 核心机制 | Pose-conditioned anchor attention:task anchor + end-effector anchor 双注意力监督 |
| 视觉 backbone | CLIP-Base text/image encoder 生成 anchor attention;DINOv2-Base dense features 被 anchor weight refine |
| 动作头 | Flow Matching Transformer,action chunk length = 30,inference flow steps = 10 |
| 真实平台 | AlphaBot 1s,7-DoF manipulator,head camera + wrist camera |
| 关键结果 | 真实抓取 Avg 55.3,Basic 74.9;长程 Overall 61.1;训练 20 GPU hours;总执行 12.9s |
| 主要局限 | 依赖 gripper open/close 等末端状态变化生成 task anchor;对 pushing/sliding、重遮挡场景较弱 |
作者观察到现有 VLA 在真实抓取中经常不是“看不懂目标”,而是动作轨迹不稳定:末端和目标抓取点之间的距离曲线反复波动,动作会绕路、回撤、过度修正,导致任务慢、接触不稳、抓取失败或撞到附近物体。
论文把原因归结为 spatially uniform perception field:模型注意力过于平均地扫整个图像,缺少一个随机器人自身状态变化的内部空间锚点。
| 路线 | 代表 | 问题 | PosA-VLA 的差异 |
|---|---|---|---|
| 外部检测/分割 | SAM / GroundingDINO / DexGraspVLA 类 | 依赖外部模型;分割错了下游策略难以纠正 | 不使用辅助 perception module,用机器人 pose 构造监督 |
| 视觉提示接口 | VP-VLA | System-2 需要解析目标并画 crosshair/bbox | anchor 来自示教轨迹中的末端 pose,不是 VLM planner 输出 |
| 历史轨迹提示 | TraceVLA | 把历史运动画给 VLA 看,但不直接监督内部 attention | 直接监督 attention weight,并用 EE anchor 保持闭环空间意识 |
| Anchor | 什么时候生成 | 监督什么 | 直觉 |
|---|---|---|---|
| Task-relevant anchor Ftask | gripper open/close 等 end-effector state change 时刻 | 模型应该关注真实交互区域/目标区域 | “任务关键点在哪里” |
| End-effector anchor Fend | 每个 timestep | 模型应该持续知道末端当前位置 | “我的手现在在哪里” |
task anchor 用较宽 Gaussian,end-effector anchor 用更窄 Gaussian,论文设置 σend < σtask。
把末端 3D pose p_t = [x_t, y_t, z_t, R_t] 通过 camera-end-effector transformation 投影到 head/wrist camera 的像素坐标,再以该点为中心生成 Gaussian map:
这一步要求具备相机与末端之间的标定/变换关系。论文强调这种监督来自机器人自身 pose,不需要人工 mask 或外部分割模型。
| Loss | 作用 |
|---|---|
| Spatial attention loss Lf | 用 Focal Loss 监督预测的 anchor attention weight Mt 对齐 Gaussian anchor maps。 |
| Batch-wise contrastive loss Lc | 在 batch 内对 text-image fused embeddings 做 pairwise BCE;同一 instruction 为正,不同 task 为负。 |
| Anchor loss | Lanchor = α Lf + (1-α) Lc,默认 α=0.5。 |
| Total loss | Ltotal = Laction + λ Lanchor,论文设置 λ=1.0。 |
动作 chunk 为 At = [at,...,at+H-1]。训练时从高斯噪声 z0 到目标动作 At 构造线性插值:
推理时用 ODE solver 从噪声积分到 clean action chunk。论文称这种方式避免 iterative denoising,动作更平滑高效。
| 项 | 值 |
|---|---|
| 训练 GPU | single NVIDIA A100 |
| 推理 GPU | NVIDIA RTX 4090 |
| batch size | 16 |
| 训练步数 | 200k steps;先用 anchor loss 预训练 20k steps |
| 学习率 | 3.0e-4 |
| optimizer | AdamW, betas [0.95, 0.999], weight decay 1e-6 |
| flow time sampling | Beta(α=1.5, β=1.0), range [0.001, 1.0] |
| inference steps | 10 |
| action chunk length | 30 |
| 项 | 内容 |
|---|---|
| 平台 | AlphaBot 1s,7-DoF manipulator,head-mounted camera + wrist-mounted camera |
| 训练数据 | 每个 object 200 demonstrations;桌面 5×5 grid,每个中心 8 次 teleoperation;随机目标 in-plane pose 和 distractors |
| 测试协议 | 每个目标随机放置 100 次;每次额外放 4 个 distractor;位置均保证训练未见 |
| 评测条件 | Basic, Unseen Background, Unseen Lights, Distractor Objects, Unseen Objects |
| 长程任务 | 打开盒盖、把盒盖放到一边、抓取指定物体、放入盒中;整体成功要求所有阶段成功 |
| 方法 | Basic | Unseen BG | Unseen Lights | Distractor | Unseen Objects | Avg |
|---|---|---|---|---|---|---|
| π0 | 43.1 | 30.2 | 23.6 | 27.9 | 33.4 | 31.6 |
| OpenVLA-OFT | 21.6 | 17.2 | 6.1 | 18.4 | 10.3 | 14.7 |
| Smol-VLA | 20.3 | 15.8 | 7.9 | 16.5 | 8.7 | 13.8 |
| DexGraspVLA | 57.2 | 51.2 | 45.0 | 51.1 | 48.1 | 50.5 |
| π0.5 LoRA | 38.5 | 31.2 | 22.4 | 25.3 | 30.8 | 29.6 |
| π0.5 Full | 60.8 | 52.5 | 41.3 | 48.6 | 38.9 | 48.4 |
| PosA-VLA | 74.9 | 57.2 | 47.8 | 56.1 | 40.7 | 55.3 |
| 方法 | Open & Put down | Pick up | Overall |
|---|---|---|---|
| π0 | 97.2 | 50.0 | 42.6 |
| OpenVLA-OFT | 73.2 | 15.8 | 13.0 |
| Smol-VLA | 88.5 | 26.4 | 19.1 |
| PosA-VLA | 97.2 | 63.0 | 61.1 |
| 方法 | Training Time (h) | Avg Time/action (ms) | Steps | Total (s) |
|---|---|---|---|---|
| π0 JAX | 25 | 27.0 | 563 | 15.2 |
| OpenVLA-OFT | 104 | 38.9 | 558 | 21.7 |
| Smol-VLA | 19 | 23.1 | 624 | 14.4 |
| DexGraspVLA | 90 | 49.6 | 577 | 28.6 |
| PosA-VLA | 20 | 24.5 | 526 | 12.9 |
PosA-VLA 不是单步最快,但因为动作更直接,平均 steps 最少,总执行时间最短。
| 变体 | Avg Success | 说明 |
|---|---|---|
| Full | 74.9 | 完整 anchor loss + contrastive + EE attention |
| w/o Anchor Loss | 29.5 | 核心空间监督被移除,性能大幅崩溃 |
| w/o Batch-wise Contrastive Loss | 57.8 | 跨样本 text-image 对齐变差 |
| w/o End-effector Attention | 55.6 | 缺少末端当前位置意识,轨迹不稳 |
| 方法 | 50 samples | 100 samples | 200 samples |
|---|---|---|---|
| π0 | 37.4 | 42.5 | 43.1 |
| OpenVLA-OFT | 5.3 | 14.9 | 21.6 |
| Smol-VLA | 0.0 | 18.7 | 20.3 |
| DexGraspVLA | 40.1 | 49.2 | 57.2 |
| PosA-VLA | 51.2 | 68.9 | 74.9 |
| 方法 | Spatial | Object | Long | Average |
|---|---|---|---|---|
| Smol-VLA | 93.0 | 94.0 | 77.0 | 88.0 |
| OpenVLA-OFT | 95.2 | 94.2 | 93.2 | 94.2 |
| π0-FAST* | 96.4 | 96.8 | 60.2 | 84.5 |
| π0* | 96.8 | 98.8 | 85.2 | 93.6 |
| OpenVLA-OFT* | 97.6 | 98.4 | 94.5 | 96.8 |
| PosA-VLA | 95.6 | 98.6 | 91.2 | 95.1 |
* 表示使用过滤 unsuccessful demonstrations 的 modified training dataset。作者强调 PosA-VLA 不依赖这种数据清洗也能达到 95.1 平均。
| 方向 | PosA-VLA 给出的证据 | 对我们怎么用 |
|---|---|---|
| 2D RGB 不等于只能用图像 | 用末端 3D pose 投影到 2D,形成视觉监督 | 如果 Realman 有末端 pose/相机标定,可做 pose-aware 2D attention / verifier。 |
| 不用 SAM 也能做空间锚定 | anchor 来自机器人自身示教轨迹,而非 segmentation | 适合担心 SAM/检测器不稳定的真机平台。 |
| 关注“手在哪里 + 目标在哪里” | w/o EE attention 从 74.9 降到 55.6 | 你的触觉/闭眼摸方向可以把“手-物体相对关系”作为 belief 更新核心。 |
| 动作效率是可投稿卖点 | 总执行时间 12.9s 最短,steps 最少 | 除 success rate 外,应统计冗余动作、action reversal、轨迹长度、时间。 |
| 工作 | 核心 | PosA-VLA 区别 |
|---|---|---|
| VP-VLA | VLM planner + SAM3 生成 crosshair/bbox | 不依赖 planner/segmentation;用末端 pose 自监督 attention。 |
| TraceVLA | CoTracker 历史 visual trace 作为输入提示 | 不画历史轨迹给模型看;直接监督内部 attention map。 |
| ProgressVLA | progress gradient 引导 action diffusion | 不是进度评分,而是 pose-conditioned spatial attention alignment。 |
| OASIS | 预测 SE(3) 轨迹作为动作空间对齐中间表示 | 不预测未来 SE(3) 轨迹;只用 pose projection 监督 2D attention。 |
本轮检查结果:
PosA-VLA 对应代码仓库。def make_anchor_maps(ee_pose, cameras):
maps = []
for cam in cameras: # head, wrist
u, v = project_ee_pose_to_image(ee_pose, cam.extrinsic, cam.intrinsic)
F_end = gaussian(center=(u, v), sigma=sigma_end)
if gripper_state_changed(ee_pose):
F_task = gaussian(center=(u, v), sigma=sigma_task)
else:
F_task = zeros_like(F_end)
maps.append(stack([F_task, F_end]))
return maps
def forward(batch):
fx = clip_text(batch.instruction)
fe = clip_text("gripper")
FI = clip_image(batch.head_img, batch.wrist_img)
M_task = cross_attention(fx, FI)
M_end = cross_attention(fe, FI)
M = stack([M_task, M_end])
F = make_anchor_maps(batch.ee_pose, cameras)
L_anchor = 0.5 * focal_loss(M, F) + 0.5 * batch_contrastive(fx, FI, F)
F_ref = M * dinov2(batch.images)
action = flow_matching_transformer(F_ref, fx, batch.robot_state)
L_action = flow_matching_loss(action, batch.action_chunk)
return L_action + lambda_anchor * L_anchor