CoolFace
Datasetpublic

ckwolfe/benchmarks-viz-tiles

Dexterous Manipulation Benchmark — Cross-Method Evaluation Cross-method evaluation scaffolding for dexterous manipulation, comparing 4 methods × 4 hands × 2 datasets × 7 trajectories on identical hardware, scenes, and reference trajectories. Tag: v0.7-mt-complete · Trained checkpoints in the private companion repo ckwolfe/benchmarks-trained-ckpts. TL;DR method class simulator best metric status ManipTrans closed-loop RL (residual) IsaacGym tracking err… See the full description on the dataset page: https://huggingface.co/datasets/ckwolfe/benchmarks-viz-tiles.

sourceHugging Facemitupdated 5mo agoView on Hugging Face
0likes100downloads
Dataset Card

Dexterous Manipulation Benchmark — Cross-Method Evaluation

Cross-method evaluation scaffolding for dexterous manipulation, comparing 4 methods × 4 hands × 2 datasets × 7 trajectories on identical hardware, scenes, and reference trajectories.

Tag: `v0.7-mt-complete` · Trained checkpoints in the private companion repo `ckwolfe/benchmarks-trained-ckpts`.


TL;DR

methodclasssimulatorbest metricstatus
ManipTransclosed-loop RL (residual)IsaacGymtracking err 4.0 cm @ oakink21/28 cells (schunk retrain live)
DexMachinaclosed-loop RL (PPO)GenesisADD 0.24 m @ arctic28/28 cells ✅
Spidersampling (MJWP)MuJoCo-Warptracking err 8.3 cm, succ 36% @ oakink12/28 cells
Oracle (kinematic replay)open-loop upper boundMuJoCotracking err 0.0 (by definition)28/28 videos, 20/28 evals

Results — averaged across all real eval cells

methodn cellsADD ↓ (m)tracking_err ↓ (m)success ↑cost / cell
ManipTrans (closed-loop, IG)27—0.040—~2 s
DexMachina (closed-loop, Genesis)2250.244—0.191~300 s
Spider (sampling, MJWP)28—0.0830.357~600 s
Oracle (kinematic replay, MJ)20—0.000n/a<5 s

All numbers are per-cell means; full per-(method,hand,traj) rows live in metrics/*.jsonl.

Interpretation notes for reviewers

  • —DM "5 seeds" = 5 training reps, shared RL seed=42. All 140 public DM checkpoints in staging/run_paths.json were trained with seed: 42 per their config.json. The 5-rep variance reflects rl_games's env-step + mini-epoch stochasticity, not a seed sweep.
  • —Open-loop vs closed-loop. Spider (sampling) and Oracle (kinematic replay) are fundamentally different from MT/DM (closed-loop learned controllers). Reading them as one leaderboard is misleading. Paper Table 1 splits into two sub-tables keyed on method class.
  • —Simulator confound. MT runs in IsaacGym, DM in Genesis, Spider in MuJoCo-Warp, Oracle in MuJoCo. Contact model, integrator, and timestep differ. Tracking-err is most comparable within-class; cross-class comparisons are illustrative only.
  • —Divergent-rollout guard. Rows where the rollout diverged (tracking_err_mean > tracking_err_max + 0.01 or add_mean > 5 m) are blanked to null at write time. Schema validator in shared/bench/schema.py enforces this on append.

Datasets × hands

datasettrajshands covered
OakInk-v2liftboard, pickspoonbowl, pourtube, stirbeaker, uncapalcoholburner, unplug, wipeboardallegro, inspire, schunk, xhand
Arcticketchup30, box30, mixer30, ketchup40, mixer40, notebook40, waffleiron40allegro, inspire, schunk, xhand

Per-cell coverage (✓ real eval, · missing)

ManipTrans × OakInk | | liftboard | pickspoon | pourtube | stirbeaker | uncap | unplug | wipe_board | |---|---|---|---|---|---|---|---| | allegro | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | inspire | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | schunk | · | · | · | · | · | · | · | | xhand | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |

Schunk retrain running (epoch ~550/3000, reward climbing). Arrival: `v0.8-schunk-retrained`.

DexMachina × Arctic | | ketchup30 | box30 | mixer30 | ketchup40 | mixer40 | notebook40 | waffleiron40 | |---|---|---|---|---|---|---|---| | allegro | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | inspire | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | schunk | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | xhand | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |


Standardized videos

All videos are 720×480 @ 30 fps h264 crf 20, rendered through a shared MuJoCo scene with BENCH_CAMERA["front"] (pos=[0,-1.6,2.2], lookat=[0,-0.1,1.2], fov=30°). Files live under videos_std/.

bucketcountprefixdescription
Oracle (oakink)28/28std_*kinematic replay through per-hand URDF
ManipTrans (oakink)21/28mt_*captured rollout qpos replayed through same MJ scene
(MT × schunk)0/7mt_*training in progress
Arctic0/56—Spider arctic preprocess stage-2+ pending

Native (per-method) videos

Also published for cross-check: each method's own renderer (different camera, resolution, overlays). Under videos/:

  • —dexmachina_* (Genesis camera): 16 oakink demo-playback clips
  • —spider_* (MJX camera): 26 oakink cells
  • —ours_* (MuJoCo camera): 9 oakink cells

How to reproduce one cell

bash
# Clone the benchmarking repo (not shipped here — the datasets repo only hosts artifacts).
git clone https://github.com/<you>/benchmarking && cd benchmarking
./scripts/run.sh maniptrans --hand xhand --dataset oakink_v2 --traj lift_board_bimanual --seed 42 --viz none --dev
# → appends MetricsRow to outputs/metrics/maniptrans.jsonl and (via bench_hooks.patch)
#   dumps qpos to outputs/mt_qpos/<run_id>.npz for post-hoc video rendering.

MUJOCO_GL=egl python scripts/render_standardized.py --source mt --hand xhand --traj lift_board
# → writes videos_std/mt_xhand_oakink_v2_lift_board_bimanual_seed42_default.mp4

Full sweep

bash
./scripts/deploy_all.sh               # all 4 methods end-to-end, ~14 GPU-hr

Per-method deploy scripts under scripts/deploy_{spider,dexmachina,maniptrans,ours}.sh.


Files in this repo

metrics/
  maniptrans.jsonl     # 613 rows (27 real)
  dexmachina.jsonl     # 229 rows (225 real)
  spider.jsonl         # 293 rows (28 real — 1 divergent row stripped)
  ours.jsonl           # 20 rows (20 real)
videos_std/
  std_*.mp4            # 28 Oracle kinematic replays (oakink)
  mt_*.mp4             # 21 ManipTrans captured-qpos replays (oakink)
videos/
  dexmachina_*.mp4     # 16 DM native (oakink demo playback)
  spider_*.mp4         # 26 Spider native (MJX camera)
  ours_*.mp4           # 9 Oracle native (MuJoCo camera)
scripts/
  render_standardized.py   # MJ renderer shared across methods
patches/
  mt_bench_hooks.patch      # MT qpos-capture upstream patch (253 lines)
  mt_trajs_configs/         # 7 oakink YAMLs with upstream-compatible data_idx
STATUS.md                   # live coverage snapshot

Metric schema (shared/bench/schema.py::MetricsRow)

fieldtypeunitsnotes
run_idstr—canonical <method>_<hand>_<dataset>_<traj>_seed<N>_<warmstart>
successbool—success_rate >= 0.5
success_ratefloat0–1per-episode outcome mean
tracking_err_meanOptional[float]metersposition err vs reference; blanked if >1 m (divergent)
tracking_err_maxOptional[float]metersmax per rollout; Spider uses quat-L2 legacy
add_meanOptional[float]metersAverage Distance of Displacement (DM canonical)
add_aucOptional[float]metersAUC under threshold sweep 0–0.1 m
wallclock_sfloatsecondshost-side subprocess wall time
sim_stepsint—hard cap via BENCH_MAX_STEPS
upstream_commitOptional[str]git SHAcaptured on host via BENCH_UPSTREAM_COMMIT env
sim_backendstr—one of isaacgym, genesis, mjwp, mujoco

Validator (at row-append time) rejects tracking_err_mean > tracking_err_max + 0.01 and add_mean > 5 m — those are the known divergent-rollout failure modes.


Limitations & what's not here

gapwhy
DM × oakink training140 public checkpoints are arctic-only; from-scratch is ~35 GPU-days per cell.
MT × schunk imitatorNo public artifact; retrain in progress (v0.8 tag forthcoming).
Arctic standardized videosSpider arctic preprocess stops at stage-1; no scene.xml for arctic cells.
Oracle real warmstart (Tara's retargeter)Payload pending from an external collaborator; 55/56 stubs remain. Present arm uses kinematic IK fallback.
MT allegro/inspire video joint-name mappingHand-specific IG DOF ↔ MJ joint table needed (xhand works: 24/38 joints auto-matched).

Citation

Paper in preparation. If you reference this artifact in the meantime, please cite:

bibtex
@misc{benchmarks-viz-tiles-2026,
  title  = {Dexterous Manipulation Benchmark — Cross-Method Evaluation Tiles},
  author = {C.K. Wolfe and T. Sadjadpour},
  year   = {2026},
  url    = {https://huggingface.co/datasets/ckwolfe/benchmarks-viz-tiles},
  note   = {Tag v0.7-mt-complete}
}

Upstream methods retain their own licenses/attributions. See: