← 返回目录

第二节 · 闭环验证 + 探针判决(radio)

第二节做了什么:同一批模型进闭环 + 补训三种注入过探针 第一节训好的两个模型 基线 / token 注入 (权重原封不动) 闭环仿真 · 官方协议 10 实例 × 1 次真跑任务 注入侧热图 = oracle 逐帧实时计算 基线 1 / 10 注入+oracle 0 / 10 完美热图也未带来 闭环成功率提升 新训 3 种"逼依赖"注入 遮挡训练 / 轮廓叠加 / 聚光调制 (热图画进像素或独立通道) 两种探针 依赖:拿掉热图,损失变不变 误导:热图翻转,损失升不升 拿掉热图 ≤ 0 翻转热图 ≈ 0 五种注入全部 未使用热图信息

① 模型架构

本节不新增架构。闭环用第一节训好的权重原封不动(架构图与 🔥/❄ 标注见第一节)。为探针补训的三种注入不改网络结构,而是把热图画进输入本身:遮挡训练(训练期随机遮黑头部相机,逼模型只能从热图通道取信息)、轮廓叠加(热区轮廓+淡填充直接画在头部 RGB 上)、聚光调制(头部 RGB 逐像素乘热图,热区外变暗)。

为逼迫依赖而补训的三种注入(训练期真实输入样例)

遮挡训练:训练时头部相机以 50% 概率整帧置零(左右腕相机各另有 20% 独立置零),热图走独立通道(右下小图示意)——逼模型从热图找信息
轮廓叠加:热区两级等值线+淡填充直接画进像素(黄=外圈 0.25,红=内圈 0.6)
聚光调制:图像逐像素按热度调亮暗(暗处保留 5% 地板亮度)——不看热区就几乎看不见画面;只作用于头部相机,腕部相机与本体状态不变

三张均为训练管线同款变换从真实数据渲染的输入样例(radio,同一帧)。

② 训练数据与步数

模型训练
基线 A / token 注入 B1(进闭环)不重新训练:第一节 10000 步检查点原封不动
遮挡训练radio 183 集,LoRA 微调 2000 步
轮廓叠加radio 183 集,LoRA 微调 2000 步
聚光调制radio 183 集,LoRA 微调 2000 步 / 6000 步两档

③ 可训与冻结参数

与第一节相同(轻量法):可训 🔥 = 注入模块 + 动作专家列 LoRA + 动作头 4 投影(约 1%);冻结 ❄ = SigLIP + Gemma + 动作专家列本体。

④ 评测方式:闭环怎么跑 + 探针怎么做

闭环:官方评测协议真跑任务——仿真器里机器人从头执行,注入臂的热图由 oracle(仿真器内实时读物体位姿+实例分割)逐帧现算,相当于喂"完美预测器"。探针:不跑任务,直接手术模型输入看损失反应,判断模型到底用没用热图。

闭环评测怎么跑:仿真器 ⇄ 策略 实时回路(官方协议) OmniGibson 仿真器 机器人头部相机(每步渲染) oracle(仅注入组) 读物体位姿+实例分割 逐帧现算 GT 热图 任务判分:满足谓词数 / 总谓词数 上限 3225 步 · 10 个官方实例 × 1 次 (跑在 NU 4090) π0.5 策略服务 第一节训好的 checkpoint (权重原封不动) 每次预测 32 步动作块 执行前 16 步后重新预测 (跑在 TAMU GPU,网络隧道相连) 观测:3 路相机 + 23 维状态 + oracle 热图(虚线:仅注入组) 动作(30Hz 执行)
探针怎么做:同一批样本,改一路输入,看损失动不动 依赖探针 正常输入 模型 损失 L₀(基准) 拿掉热图 置零 模型 ΔL = −0.006(不升反微降 → 不依赖热图) 拿掉头部图像 置零 模型 ΔL = +0.024(明显上升 → 依赖图像) 头部图像 热图 (腕部相机与状态不动) 误导探针(判决性) 正确热图 → 损失 Lₐ 上下+左右翻转 → 损失 L_b vs L_b − Lₐ = +0.0007 ≈ 0 若模型在跟随光斑位置,翻转后损失必升

⑤ 结果与结论

闭环 10 实例 × 1 次 rollout(官方 public_test 协议) 绿 = 成功(谓词全满足),灰 = 失败(谓词零满足,3225 步耗尽) 301 302 303 304 305 306 307 308 309 310 基线 instance 301: 失败 q=0.0 instance 302: 失败 q=0.0 instance 303: 失败 q=0.0 instance 304: 失败 q=0.0 instance 305: 失败 q=0.0 instance 306: 失败 q=0.0 instance 307: 失败 q=0.0 instance 308: 失败 q=0.0 instance 309: 成功 q=1.0 instance 310: 失败 q=0.0 注入+oracle 热图 instance 301: 失败 q=0.0 instance 302: 失败 q=0.0 instance 303: 失败 q=0.0 instance 304: 失败 q=0.0 instance 305: 失败 q=0.0 instance 306: 失败 q=0.0 instance 307: 失败 q=0.0 instance 308: 失败 q=0.0 instance 309: 失败 q=0.0 instance 310: 失败 q=0.0

rollout 视频(结果 + 闭环评测实际输入原貌)

基线 · instance 309 · 成功 · 36 秒
看点:~15s 到咖啡桌前伸手,~25s 抓起收音机,末段完成开启

注入 + oracle · 同一 instance · 失败 · 108 秒
看点:全程在咖啡桌附近徘徊、多次伸手,未完成开启

oracle 三联 · instance 309(实拍 | 热图 | 叠加)
闭环评测实际输入原貌:光斑锁定目标,机器人未利用

口径说明:三联视频为闭环评测当时实际使用的 oracle 输出原貌(表面按当时实现整面标注);该实现与训练 GT 的"接触区一小块"口径存在差异,已记入对账。

依赖探针:拿掉某路输入后损失的变化(>0 = 模型依赖它) 三种为逼迫依赖热图而训练的注入方式 · 参照 = 拿掉整路头部相机图像 拿掉热图 拿掉头部图像(参照) -0.01 -0.005 +0 +0.005 +0.01 +0.015 +0.02 +0.025 遮挡训练 遮挡训练 拿掉热图: -0.00001-0.0000 遮挡训练 拿掉头部图像: +0.00040+0.0004 轮廓叠加 轮廓叠加 拿掉热图: -0.00477-0.0048 轮廓叠加 拿掉头部图像: +0.00770+0.0077 聚光调制 聚光调制 拿掉热图: -0.00590-0.0059 聚光调制 拿掉头部图像: +0.02363+0.0236
诊断:为什么 radio 上逼不出依赖

radio 场景固定、物体固定、183 条演示动作高度一致:关节状态(本体感受)加腕部相机即可拟合训练集,头部相机的空间信息对模仿目标冗余,梯度没有压力去利用热图。这是任务性质——由此转入第三节:换到"不同 demo 收拾不同物体"的 task-0003,让视觉消歧成为拟合必需。

结论:闭环上完美热图没有带来成功率提升(基线 1/10,注入+oracle 0/10);探针判决五种注入全部未使用热图的空间信息——拿掉热图损失不升,翻转热图损失也不升,而拿掉头部图像损失明确上升。诊断为任务性质:radio 演示动作可由本体感受+腕部相机拟合,头部空间信息冗余,输入侧注入没有梯度压力。由此转入第三节:换需要视觉消歧的 task-0003,热图改作监督信号。

口径细节(协议 / oracle / 探针定义 / 与训练 GT 的差异)
项值
闭环协议OmniGibson public_test,10 实例 × 1 rollout,上限 3225 步;q_score = 满足谓词/总谓词
oracle仿真器内实时读物体位姿+实例分割逐帧计算;表面标注为当时实现的整面口径,与训练 GT(接触区一小块)存在分布差异;对结论影响有限(探针显示模型对热图零依赖)
依赖探针同批样本三遍前向:正常 / 置零热图 / 置零头部图像;报损失变化均值(8 批 × 32 样本)
误导探针热图上下+左右翻转后前向;与正确热图同样本同噪声配对