Views
No views yet
Hang_Trousers_FloatGrip, 195 demos, 12,516 transitions, Isaac Sim).EE MAE is held-out end-effector position error against demonstration actions.
It is not task success — no policy here has been evaluated in closed loop yet.| file | encoder | observation | edges | epoch | EE MAE |
|---|---|---|---|---|---|
trousers_pn_depth.ckpt | PointNet | depth cloud 2048×3 | — | 550 | 6.25 mm |
trousers_gnn_depth.ckpt | mesh-GNN | depth cloud | kNN | 200 | 6.85 mm |
trousers_pn_mesh.ckpt | PointNet | decimated GT mesh + pothook | — | 900 | 6.94 mm |
trousers_gnn_mesh.ckpt | mesh-GNN | GT mesh nodes | true garment faces | 300 | 7.24 mm |
trousers_gnn_knn.ckpt | mesh-GNN | GT mesh nodes | kNN | 200 | 7.35 mm |
gnn_mesh vs gnn_knn is the sharpest comparison: identical nodes, identical encoder,
identical parameter count — the only difference is whether edges come from true mesh
faces or from k-nearest-neighbours. The gap is 0.11 mm, i.e. nothing.val_loss would be up to 3.3 mm worse — it is diffusion
denoising MSE averaged over noise levels, not a measure of sampled action quality.hf download albilo/dp3-floatgrip --local-dir checkpoints_pretrainedtorch, diffusers, hydra-core, omegaconf, dill, einops, termcolor, and
the diffusion_policy_3d package from DexGarmentLab's IL_Baselines/Diffusion_Policy_3D
on PYTHONPATH (the config in each checkpoint instantiates classes by dotted path).1import torch, dill, hydra
2from omegaconf import OmegaConf
3OmegaConf.register_new_resolver("eval", eval, replace=True)
4
5p = torch.load("trousers_pn_depth.ckpt", map_location="cpu", pickle_module=dill)
6policy = hydra.utils.instantiate(p["cfg"].policy)
7policy.load_state_dict(p["state_dicts"]["ema_model"])
8policy.cuda().eval()
9
10action = policy.predict_action(obs)["action"] # (B, 4, 8)n_obs_steps = 3, so a history of 3 frames, oldest first:| key | shape | notes |
|---|---|---|
point_cloud | (B, 3, 2048, 3) float32 | xyz only, metres, ground removed, FPS-downsampled |
agent_pos | (B, 3, 8) float32 | [left_xyz, right_xyz, grip_L, grip_R] |
trousers_gnn_mesh additionally requires edges (B, 3, E, 2), n_nodes (B, 3) and
n_edges (B, 3); without them it raises KeyError: 'edges'. The other four do not —
the kNN variants build their graph from coordinates at runtime.(B, 4, 8): four future steps of
[left_xyz, right_xyz, grip_L, grip_R], absolute positions in metres, not deltas.
There is no orientation (the grippers are attachment spheres; the demos never recorded
any). The normalizer travels inside the state_dict, so actions come back already in
metres — do not rescale. Gripper bits are regressed continuously; threshold at 0.5.
Execute all 4 actions before re-planning.manifest.json records which training epoch each file came from.