← reports index
模型对比 · 2026-09-08

八个模型的视觉斜率横向对比

同一把尺子量八个 checkpoint,四种 state 喂法。结论有两条,方向相反:横向(pan)那一列全是噪声,读不出任何东西;纵向(elbow)那一列差异明确,而且指向数据集。还有一条比数字更重要 —— 这把尺子已经被证明预测不了真机,所以它不能当上机门禁。

怎么量的

图像按集变化,覆盖整个杯位范围;只换 state 怎么喂。四种喂法:

喂法含义
z017 维全零
pin钉住恒定维 —— 训练统计量里 std==0 的维度钉回训练均值。这是线上修复后的实际行为,主表用它
ref所有集共用一个真实 state(控制变量最严)
per每集自己的真实 state(2026-09-08 修复之前的行为)

斜率 = 输出 pan 对杯位 pan 的回归斜率。示范里应接近 +1:杯子左右移多少,手就跟多少。

主表 · pin 喂法

数据集 · 臂 · 配方statepan 斜率elbow 斜率
0826 · 右 · b16 · 20k[6]−0.006+0.861
0826 · 右 · b16 · 20k[17]+0.001+0.757
0826 · 右 · b16 · 12k · +dropout[17]−0.008+0.851
0826 · 右 · b16 · 20k · +dropout[17]−0.052+0.841
0820 · 右 · b8 · 20k[17]+0.006+0.271
0820 · 右 · b16 · 16k[17]+0.024+0.186
0820 · 右 · b16 · 6k[17]+0.002+0.376
sep3-clean · 左 · 20k[17]+0.006−0.004
警告一 · 噪声底是 ±0.05
SmolVLA 是流匹配模型,每次推理重新采样噪声。同一个 checkpoint、同一种喂法,三次跑出 +0.086 / +0.041 / −0.006 —— 其中后两次是加了 torch.manual_seed 之后跑的,说明那个种子并没有真正控制住采样,配对比较没有成立。
所以:pan 那一列的八个数字彼此之间没有可分辨的差异,而且都不可分辨于零。不要从里面读出「哪个模型横向更好」。elbow 那一列的差异(0.86 对 0.19,四倍多)远在噪声之上,可以读。
警告二 · 这把尺子预测不了真机
它测的是单次开环、第一个动作块,从 policy.reset() 开始。而真机上横向对准发生在后面几十秒的闭环里。
2026-09-08 实测:离线显示「横向看不见」的那个模型,真机 trace 里手臂实实在在够到了 −33°,横向行程 24–34 度,操作者观察到一个没在训练集里出现过的左侧杯位「感觉很准」。
本页早先提出的「斜率 < 0.3 不许上机」已作废。按那条办会把一个其实在起作用的模型拦在门外。
警告三 · 敏感度百分比会骗人
「输出跨度 ÷ 杯位跨度」这个数看着直观,但跨度大不等于跟着杯子走 —— 方向可以是反的。2026-09-08 早上就被 32.8% 骗过一次,实际相关系数只有 0.155。所以每一格都同时给 r 和斜率,不要只看敏感度。

能读出来的两件事

一 · 0826 数据集在纵向上强出一档

数据集elbow 斜率范围
0826(四个模型)0.76 – 0.86
0820(三个模型)0.19 – 0.38
sep3-clean · 左臂−0.004

三倍以上的差距,跨四个模型稳定,远在噪声之上。 这是今天唯一一个可复现的跨模型差异。「伸多远」这一维,0826 确实教会了模型看图。

二 · state dropout 没有伤到 elbow

同数据、同配方、同 seed 的三个:

配置elbow 斜率
state[17],不带 dropout,20k+0.757
state[17],带 dropout,12k+0.851
state[17],带 dropout,20k+0.841

这曾经是个真实的担心:「伸多远」学得那么好,会不会有一部分是靠 state 撑着,一遮就塌。没有塌,四种喂法下都稳在 0.72–0.87。它是真视觉。

要单独查 · 左臂那个模型
sep3-clean · 左 · 20k:杯位跨度 58.7°,它的 pan 输出只动 0.98°(敏感度 1.7%),elbow 斜率 −0.004。四种喂法全一样。
这个模型对图像几乎没有任何响应,比右臂那批差一个数量级 —— 右臂再差 elbow 也有 0.19,它是 0。这不像同一个病,更像数据或训练本身出了别的问题。左臂那条线如果还在计划里,值得单独查一次。

真机侧:目前唯一和成败挂钩的数

离线斜率读不出东西,但实机 trace 读得出。trace_timing.py 从每次试跑的 trace 算三个数:

tracepan 行程到位闭爪早了开合次数
0826·state[6]·20k · T128.4°45.5 s6.7 s+38.8 s14
0826·state[6]·20k · T224.6°24.5 s3.8 s+20.8 s30
0826·+dropout·12k · T131.4°38.7 s4.5 s+34.2 s8
0826·+dropout·12k · T233.6°31.7 s12.9 s+18.9 s18

「早了」= 到达 pan 极值的时刻 − 闭爪时刻。正值 = 爪子先闭、手臂后到。

四次全部是爪子先闭,早了 19 到 39 秒。两个不同的模型都一样,所以这不是某个 checkpoint 的毛病。
同时 pan 行程 24–34 度 —— 横向是真的在动。失败模式不是「看不见杯子在哪」,是「还没到就闭爪」。
另外:带 dropout 的那两次夹爪开合是 8 / 18,不带的是 14 / 30。动作连续性上 dropout 是有效果的,只是没解决时机。

结论

工具:03-software/scripts/state_regime_sweep.py(四种喂法) · vision_sweep_phase.py(沿够取过程) · trace_timing.py(闭爪时机)
恒定维从每个 checkpoint 自己的归一化统计量推,和 run_policy_trials.py 的 install_state_guard() 同一判据 —— 否则不同模型之间不可比。
所有数字实测于本机 Jetson,2026-09-08。