Humanoid Challenge

Overview

The policy is trained for 20k steps with a batch size of 64 on one RTX 5090 (29 min). Everything is trained from scratch except the DINOv2 image encoder, which starts from its pretrained weights and is fine-tuned. The policy is conditioned on the wrist camera, the action flow and the robot state, and generates the next 32 action steps (1.6 s at 20 Hz).

Policy architecture: the wrist image (DINOv2), action flow and robot state become tokens for the obs encoder; the action denoiser turns 32 noised actions into 32 output actions, cross-attending to the encoder output Wrist camera224 × 224 RGBDINOv2 ViT-S/14fine-tuned256 patch tokensAction flow16 steps × 14 pointsLinear16 flow tokensRobot state9 valuesLinear1 state tokenlearned positionembeddingObs encoder273 tokens × 7684 transformer layers, 8 headsfinal encoder output(273 tokens)cross-attended byall 6 decoder layers32 noised actionsdx, dy, dz, gripperLineartime t +position emb.32 action tokensAction denoiser6 transformer decoder layers10 Euler stepsat inference,t = 1 → 032 actions = 1.6 s at 20 Hz;the first 10 are run, then re-plan

Results

Key comparison

typerobot
state
wrist
camera
front
camera
object
flow
hand
flow
image
aug
encoder
pos. emb.
train
(80)
test
(20)
failed
(46)
baseline✓✓✓––✓none84.4 ± 1.677.8 ± 1.742.1 ± 1.6
baseline✓✓–––✓all59.1 ± 1.236.6 ± 2.924.9 ± 1.7
flow-conditioned✓✓––✓✓all91.3 ± 1.272.0 ± 0.07.8 ± 1.2
flow-conditioned✓✓–✓✓✓all92.3 ± 1.076.6 ± 1.47.0 ± 1.4
flow-conditioned✓✓–✓✓✓state, flow93.5 ± 0.473.0 ± 1.86.8 ± 0.4

All runs

typerobot
state
wrist
camera
front
camera
object
flow
hand
flow
image
aug
encoder
pos. emb.
train
(80)
test
(20)
failed
(46)
baseline✓–––––state0.7 ± 0.40.2 ± 0.40.3 ± 0.3
baseline✓✓–––✓all59.1 ± 1.236.6 ± 2.924.9 ± 1.7
baseline✓–✓––✓all78.0 ± 0.756.0 ± 3.923.5 ± 1.2
baseline✓✓✓–––none83.0 ± 1.262.6 ± 2.741.8 ± 0.8
baseline✓✓✓––✓none84.4 ± 1.677.8 ± 1.742.1 ± 1.6
baseline✓✓✓––✓all82.3 ± 1.664.4 ± 3.741.7 ± 2.1
flow-conditioned✓–––✓–state, flow88.3 ± 1.766.0 ± 1.44.2 ± 1.3
flow-conditioned✓✓––✓✓all91.3 ± 1.272.0 ± 0.07.8 ± 1.2
flow-conditioned✓–✓–✓✓all91.7 ± 0.569.0 ± 1.78.1 ± 0.7
flow-conditioned✓✓✓–✓✓all89.8 ± 0.673.4 ± 3.67.0 ± 1.0
flow-conditioned✓––✓✓–state, flow88.3 ± 1.062.2 ± 1.93.8 ± 0.4
flow-conditioned✓✓–✓✓✓all92.3 ± 1.076.6 ± 1.47.0 ± 1.4
flow-conditioned✓–✓✓✓✓all93.2 ± 0.871.2 ± 3.33.7 ± 1.1
flow-conditioned✓✓✓✓✓✓all89.3 ± 0.872.4 ± 2.22.6 ± 1.0

Ablations

typerobot
state
wrist
camera
front
camera
object
flow
hand
flow
image
aug
encoder
pos. emb.
train
(80)
test
(20)
failed
(46)
flow-conditioned (reference)✓✓–✓✓✓all92.3 ± 1.076.6 ± 1.47.0 ± 1.4
flow-conditioned (no image pos. emb.)✓✓–✓✓✓state, flow93.5 ± 0.473.0 ± 1.86.8 ± 0.4
flow-conditioned (flow dropout 0.2)✓✓–✓✓✓all87.5 ± 0.470.4 ± 3.17.1 ± 0.6
flow-conditioned (world-frame flow)✓✓–✓✓✓all82.0 ± 2.157.0 ± 0.912.5 ± 0.5

Visualizations

Episode 20261009_111418

Third-party dependencies

toolused for
DINOv2 ViT-S/14pretrained image encoder (loaded with torch.hub), fine-tuned with the policy

Limitations

Content to come.