--- license: mit tags: [diffusion-policy, robotics, franka] --- # oopsie-debug Diffusion Policy (image, UNet) checkpoints trained with `train.py` of https://github.com/KuanchengWang/oopsie (branch `dp-teleop-block`) on Franka teleop data. ## swap-animal/ Dataset `teleop_dataset_20260922_211038` (40 episodes, 15840 steps @ 10 Hz, all demos in training, no held-out validation). 3000-epoch run started 2026-09-23 (batch 64, ~244 steps/epoch); the run keeps only `latest.ckpt`, so snapshots are taken when it passes the listed epochs. Loss values are in-sample train loss. | file | epoch | mean train loss | |---|---|---| | swap-animal/epoch_1600.ckpt | 1600 | 0.0005 | (epochs 500 / 1000 / 1500 were overwritten before a copy could be taken; epochs 2000 / 2500 / 3000 will be added as the run passes them.) `swap-animal/config.yaml` is the resolved training config. The checkpoint's `task.dataset.quat_order` is `wxyz` (the corrected quaternion handling; see the repo README). Each `.ckpt` is a full training checkpoint (`state_dicts`: model, ema_model, optimizer; `pickles`: epoch, global_step, rng_state; `cfg`), loadable with `torch.load(path, pickle_module=dill, map_location='cpu', weights_only=False)`. Use `state_dicts['ema_model']` for inference, or roll it out with `eval_real_robot_panda_realsense_teleop_block.py -i `. ## Observation / action contract - obs: `img_third`, `img_wrist` (3x120x160 RGB, INTER_AREA from 480x640 BGR), `robot_eef_pose` (9-D: xyz + rotation_6d from the stored (w,x,y,z) quaternion), `gripper_state` (width m); n_obs_steps 2. - action (10-D): `[x, y, z, rot6d(6), gripper width]` = pose/gripper of frame t+1; horizon 16, 8 executed. - Normalization: position min/max -> [-1,1]; rotation_6d identity; gripper fixed [0, 0.08] m -> [-1,1]. The teleop-block checkpoints previously stored at the repo root were removed on 2026-09-23.