Diffusion Policy¶
The maintained Diffusion Policy path converts canonical absolute-action LeRobot data to UMI zarr, validates the conversion, trains through Hydra, and evaluates with receding-horizon execution.
Install¶
source ../IsaacLab/env_isaaclab/bin/activate
uv pip install -e source/am_isaac
uv pip install -e "source/am_isaac_il[dp]"
uv pip install -e source/am_isaac_il/am_isaac_il/policies/dp/universal_manipulation_interface
uv pip install --no-deps "lerobot==0.4.4"
Convert and validate¶
python scripts/data/validate_lerobotdataset.py \
--dataset_root <session-root> \
--repo_id am_bench/press_button_ee_absolute \
--target_hz 20
python scripts/data/dp/lerobot_to_zarr.py \
--input_path <session-root> \
--output_path <dataset-root>/press_button_ee.zarr.zip \
--omit_base_image
python scripts/data/dp/validate_zarr.py \
<dataset-root>/press_button_ee.zarr.zip \
--image_size 224
Omit --omit_base_image only when the canonical dataset contains observation.images.base_camera. The converter rejects EE-delta input. For BaseJoint data, record the matching absolute state/action schema and select the BaseJoint task configuration during training.
Train¶
Choose umi_drone_ee_pos for EE or umi_drone_base_joint for BaseJoint. Run from the UMI directory so Hydra resolves its config tree:
cd source/am_isaac_il/am_isaac_il/policies/dp/universal_manipulation_interface
CUDA_VISIBLE_DEVICES=0 WANDB_MODE=disabled python train.py \
--config-name=train_diffusion_unet_timm_umi_workspace \
task=umi_drone_ee_pos \
task.dataset_path=<absolute-path-to-dataset.zarr.zip> \
task.obs_down_sample_steps=6 \
task.action_horizon=16 \
task.pose_repr.obs_pose_repr=relative \
task.pose_repr.action_pose_repr=relative \
training.num_epochs=40 \
training.checkpoint_every=10 \
training.device=cuda:0 \
dataloader.batch_size=64 \
val_dataloader.batch_size=64 \
exp_name=press_button_dp \
logging.name=press_button_dp \
logging.mode=disabled \
hydra.run.dir=<absolute-output-dir>
cd -
For a bounded training smoke, add training.num_epochs=1 training.max_train_steps=1 training.max_val_steps=1.
Evaluate¶
python -m am_isaac_il.policies.dp.eval \
--task PressButton-Am-EE-Abs-PID-Direct-v0 \
--checkpoint <absolute-output-dir>/checkpoints/latest.ckpt \
--num-rollouts 10 \
--num-envs 1 \
--episode-length-s 20 \
--save-video \
--headless \
--device cuda:0
DP evaluation currently requires exactly one environment. A BaseJoint checkpoint must be paired with a BaseJoint task. Evaluation output follows the common artifact contract.