Do rollouts preserve MOTION?

frozen latent flow probe on GT vs predicted tactile latents · cosmos-cv4x8x8 · 2026-08-02 03:59Z
Why this exists. val_loss, latent MSE and decoded PSNR all score reconstruction. None scores whether the predicted tactile latents describe the right motion — the part a tactile stream exists to provide. A rollout can be blurry-but-moving-correctly or sharp-but-static, and PSNR prefers the second.

Method. One LatentFlowProbe is trained on ground-truth latent pairs, then frozen and applied identically to GT and predicted latents. Any difference is a property of the latents, not the probe. retention = 1 − EPE(pred,gt)/EPE(zero,gt): 1.0 keeps all motion structure, 0.0 carries no more than a static clip.

Motion retention is a separate axis from reconstruction

corr(val_loss, retention) = +0.114 over 17 arms — essentially independent. At val_loss ≈ 0.045 the arms span retention 0.46 to 0.61: same reconstruction quality, 30% apart on motion. And a model at epoch 5 with 4× the val_loss (v3, +0.621) nearly matches the fully-trained baseline (+0.648).

Contact weighting costs motion. At a fixed 0.20 threshold, weight 0 → 1 → 3 gives +0.648 → +0.530 → +0.378, monotone. The one point off that line (weight 2 at the broader 0.12 threshold, +0.614) suggests the damage comes from concentrating the loss on a narrow region rather than from the weight itself — worth a controlled sweep before trusting it.

All arms

runretentioncos EPEval_loss
mv1_v2_stride2_refbank_diffimg_cosmos+0.957+0.9980.05400.0244
mv1_v2_stride2_p01rand_cosmos+0.648+0.8030.15290.0299
mv1_v2_stride2_p01rand_adaptw_cosmos+0.646+0.7970.15400.0300
mv1_v2_stride2_p01_cosmos_tactile_only_v3_noncausal+0.639+0.7820.16210.1084
mv1_v2_stride2_refbank_difflat_cosmos+0.635+0.8090.15990.0298
mv1_v2_stride2_p01rand_v2t_cosmos+0.622+0.7870.16810.0419
mv1_v2_stride2_p01_cosmos_v3+0.621+0.7690.17000.1234
mv1_v2_stride2_p01rand_contactw2t12_cosmos+0.614+0.7950.17270.0562
mv1_v2_stride2_p01rand_contactw1_senshm_depth_cosmos+0.608+0.7420.17550.0471
mv1_v2_stride2_p01_cosmos_tactile_only_v3_causal+0.605+0.7790.17730.1208
mv1_v2_stride2_p01_cosmos_v3_causal+0.604+0.7700.17750.1647
mv1_v2_stride2_p01_cosmos_v3_contact+0.601+0.7740.17910.1301
mv1_v2_stride2_p01rand_contactw1_cosmos+0.530+0.7750.20290.0466
mv1_v2_stride2_p01rand_contactw1_senshm_s06_cosmos+0.525+0.7490.21060.0467
mv1_v2_stride2_p01rand_contactw1_senshm_cosmos+0.521+0.7780.21060.0467
mv1_v2_stride2_p01rand_contactw1_overlay_cosmos+0.503+0.7340.21840.0443
mv1_v2_stride2_p01rand_contactw1_senshm_mask_cosmos+0.462+0.7340.23850.0468
mv1_v2_stride2_p01rand_contactw3_cosmos+0.378+0.7430.27880.0801
Read as a ranking, not an absolute. The probe itself only beats its own zero baseline by 20% on held-out GT latents (val EPE 0.4229 vs 0.5300), so retention is bounded by how well the probe reads GT in the first place. Differences of 1-2% between the top arms are likely noise; the contactw3 gap (0.378 vs 0.648) is not.

Excluded. mv1_v2_stride2_p01_cosmos_vision_only_v3_causal, mv1_v2_stride2_p01_cosmos_vision_only_v3_noncausal carry zero tactile placeholders (vision-only arms) — the probe reads the same zeros on both sides and scores a meaningless +1.000. Greyed rows have latent semantics on a different scale (image_diff encodes pixel differences), so their retention is not comparable.

Raw metrics: data.json