Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions docs/ARC_CLOCK_CONTRACT.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,12 @@ This contract replaces the historical Cartesian mean/wide/stacked/clock/E1
families. It builds on PR #263 and preserves the local first-row-delay
implementation. It does not change the separate planar or Libero codecs.

New run presets are grouped by task under `hydra_configs/experiment/`:
`organize_stationary`, `fold_and_stack_towels`, `wireless_earbuds`, and
`multitask`, each with `arc_vel`, `arc_dur`, and `baseline`.
See the [experiment menu](../egomimic/hydra_configs/experiment/README.md)
for models, frozen data pools, budgets, retained variants and migration.

```yaml
_target_: egomimic.rldb.zarr.arc_length_tokenizer.TokenizeBimanualArcLengthCartesian
clock_mode: velocity # velocity | duration
Expand Down
32 changes: 32 additions & 0 deletions docs/experiment_config_migration.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
{
"abc_arc/cotrain/organize_clock_duration_full_separation": "organize_stationary/arc_dur",
"abc_arc/cotrain/organize_clock_duration_translation_rotation": "organize_stationary/arc_dur",
"abc_arc/cotrain/organize_clock_velocity_full_separation": "organize_stationary/arc_vel",
"abc_arc/cotrain/organize_clock_velocity_translation_rotation": "organize_stationary/arc_vel",
"abc_arc/cotrain/organize_rl2_elmo_hpt180_cotrain_baseline": "organize_stationary/variants/organize_rl2_elmo_hpt180_cotrain_baseline",
"abc_arc/cotrain/organize_rl2_elmo_hpt180_cotrain_multistream": "organize_stationary/variants/organize_rl2_elmo_hpt180_cotrain_multistream",
"abc_arc/cotrain/organize_rl2_elmo_hpt300_cotrain_baseline": "organize_stationary/baseline",
"abc_arc/cotrain/organize_rl2_elmo_hpt300_cotrain_multistream": "organize_stationary/_base/arc",
"abc_arc/cotrain/organize_rl2_elmo_hpt300_cotrain_multistream_logclock": "organize_stationary/arc_dur",
"abc_arc/cotrain/organize_rl2_elmo_hpt300_cotrain_multistream_perwaypoint": "organize_stationary/arc_vel",
"abc_arc/robot_bc/abc_multitask4_abcdit_baseline_visual_openloop": "multitask/variants/abc_multitask4_abcdit_baseline_visual_openloop",
"abc_arc/robot_bc/abc_multitask4_abcdit_hybrid_visual_openloop": "multitask/variants/abc_multitask4_abcdit_hybrid_visual_openloop",
"abc_arc/robot_bc/abc_multitask4_hpt300_baseline_visual_openloop": "multitask/baseline",
"abc_arc/robot_bc/abc_multitask4_hpt300_hybrid_visual_openloop": "multitask/arc_vel",
"abc_arc/robot_bc/abc_rl2_towels_abcdit_baseline_visual_openloop": "fold_and_stack_towels/variants/abc_rl2_towels_abcdit_baseline_visual_openloop",
"abc_arc/robot_bc/abc_rl2_towels_abcdit_multistream_logclock_visual_openloop": "fold_and_stack_towels/variants/abc_rl2_towels_abcdit_multistream_logclock_visual_openloop",
"abc_arc/robot_bc/abc_rl2_towels_abcdit_multistream_visual_openloop": "fold_and_stack_towels/variants/abc_rl2_towels_abcdit_multistream_visual_openloop",
"abc_arc/robot_bc/abc_rl2_towels_hpt180_multistream_visual_openloop": "fold_and_stack_towels/variants/abc_rl2_towels_hpt180_multistream_visual_openloop",
"abc_arc/robot_bc/abc_towels_hpt180_baseline_visual_openloop": "fold_and_stack_towels/variants/abc_towels_hpt180_baseline_visual_openloop",
"abc_arc/robot_bc/abc_towels_hpt180_hybrid_visual_openloop": "fold_and_stack_towels/variants/abc_towels_hpt180_hybrid_visual_openloop",
"abc_arc/robot_bc/abc_visual_hpt300_base": "_shared/visual_hpt300",
"abc_arc/robot_bc/stationery_rl2_hpt300_visual_baseline_openloop": "organize_stationary/variants/stationery_rl2_hpt300_visual_baseline_openloop",
"abc_arc/robot_bc/stationery_rl2_hpt300_visual_hybrid_openloop": "organize_stationary/variants/stationery_rl2_hpt300_visual_hybrid_openloop",
"yam_arc_grid/_base/earbuds_updated_hpt300": "_shared/frozen_yam/earbuds_updated_hpt300",
"yam_arc_grid/_base/stattempo": "_shared/frozen_yam/stattempo",
"yam_arc_grid/_base/stattempo_openloop": "_shared/frozen_yam/stattempo_openloop",
"yam_arc_grid/_base/towels_hpt300": "_shared/frozen_yam/towels_hpt300",
"yam_arc_grid/earbuds_updated_time_hpt300": "wireless_earbuds/baseline",
"yam_arc_grid/towels_new290plus74_time_hpt300": "fold_and_stack_towels/variants/new290plus74_baseline",
"yam_arc_grid/towels_since0924plus74_time_hpt300": "fold_and_stack_towels/baseline"
}
3 changes: 2 additions & 1 deletion egomimic/hydra_configs/data/abc_arc/abc_visual.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ train_datasets:
min_distance_unit: ${abc.arc_distance}
rotation_distance_unit: ${abc.arc_rotation_distance}
resampled_vector_length: ${abc.arc_waypoints}
clock_mode: velocity
clock_mode: ${abc.arc_clock_mode}
streams: ${abc.arc_streams}
filters:
_target_: egomimic.rldb.filters.DatasetFilter
filter_lambdas:
Expand Down
64 changes: 64 additions & 0 deletions egomimic/hydra_configs/experiment/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# Task-first experiments

The Cartesian YAM/ABC experiment menu is:

```text
experiment/
organize_stationary/ {baseline,arc_vel,arc_dur}.yaml
fold_and_stack_towels/ {baseline,arc_vel,arc_dur}.yaml
wireless_earbuds/ {baseline,arc_vel,arc_dur}.yaml
multitask/ {baseline,arc_vel,arc_dur}.yaml
_shared/ shared defaults, not standalone runs
```

Select one with `+experiment=organize_stationary/arc_vel` (or `arc_dur`
or `baseline`). Cluster resources still come from the explicit
`hydra/launcher=...` selection and require a separate launch preflight.

| Folder | Default model / data | ARC M / D / R |
| --- | --- | --- |
| organize_stationary | HPT300, RL2 Elmo robot + human organize stationery | 100 / 0.42 m / 24° |
| fold_and_stack_towels | HPT300, frozen RL2 `since0924plus74` pool | 200 / 0.33 m / 100° |
| wireless_earbuds | HPT300, frozen RL2 `wireless_earbuds_updated` pool | 200 / 0.33 m / 100° |
| multitask | HPT300, existing ABC four-task pool | 100 / 0.81 m / 24° |

These are explicit recipe defaults, not a new distance/rotation calibration.
The four-task pool is towels, fake fruits, stationery and earbuds, **not**
the separate seven-task ABC-130k proposal.
Each task's three entries use exactly the same filters, episode lists and split.
Baseline geometry is 100 × 14 time-indexed actions.

ARC uses the canonical [clock contract](../../../docs/ARC_CLOCK_CONTRACT.md)
(repository path `docs/ARC_CLOCK_CONTRACT.md`): velocity or log **interval**
seconds, first-row start delay, first-moving-stream termination.
It is not E1 or cumulative absolute seconds. Full separation is the default.
Use `abc.arc_streams=translation_rotation` for four clocks; token width
automatically changes from M × 20 to M × 18, including the model and decoder.
No tokenizer or detokenizer algorithm is changed by this YAML reorganization.

The frozen towel/earbud ARC entries are **new canonical-codec recipes** built
on their retained baseline network/optimizer/pool. They read 400 native
frames, use the shared open-loop evaluator, and require fresh normalization
and training. They do not reproduce retired E1 ARC checkpoints.
The baselines retain their original evaluator/training schedule.

## Retained variants

Distinct existing HPT180, robot-only, ABC-DiT, ABC-only/ABC+RL2 towel,
and `new290plus74` pool choices live under each task's `variants/`.
They retain their model/data settings and are not interchangeable aliases for
the primary menu. Other task/model families (PushT, Libero, human-only,
Ravens, etc.) are untouched.

Duplicate organize clock-layout leaves were consolidated: choose
`organize_stationary/arc_vel` or `arc_dur` and set `abc.arc_streams` instead
of choosing a second file. Distinct old experiment paths are mapped in
`docs/experiment_config_migration.json`; the two retired
`*_translation_rotation` aliases additionally require
`abc.arc_streams=translation_rotation`.

Old CLI paths under `abc_arc/{robot_bc,cotrain}` and `yam_arc_grid` are removed,
not silently redirected. Original jobs/checkpoints must keep their recorded
source/config/normalization. No cluster jobs are migrated by changing these
files. Historical E1 recipe-generation scripts are not a supported way to
regenerate this task menu.
24 changes: 24 additions & 0 deletions egomimic/hydra_configs/experiment/_shared/clock_settings.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# @package _global_
# Shared Cartesian clock contract; task recipes own D, R, M and the data pool.
abc:
arc_clock_mode: velocity
arc_streams: full_separation
arc_stream_dims:
full_separation: 20
translation_rotation: 18
arc_token_dim: ${abc.arc_stream_dims.${abc.arc_streams}}
arc_token_rows: ${abc.arc_waypoints}
run_provenance:
action_contract:
representation: ${abc.action_mode}
arc_chunking_mode: ${abc.arc_chunking_mode}
translation_distance_m: ${abc.arc_distance}
rotation_distance_radians: ${abc.arc_rotation_distance}
waypoints: ${abc.arc_waypoints}
clock_mode: ${abc.arc_clock_mode}
streams: ${abc.arc_streams}
timing_layout: first_delay_incoming_v1
hold_window_frames: 400
gripper_stream_mode: ${oc.select:abc.arc_gripper_stream_mode,events}
gripper_distance_unit: ${oc.select:abc.arc_gripper_distance,null}
control_dt: ${evaluator.control_dt}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# @package _global_
defaults:
- /experiment/yam_arc_grid/_base/towels_hpt300
- /experiment/_shared/frozen_yam/towels_hpt300
- override /data: abc_arc/earbuds_updated
- _self_
e1:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# validation, for robot-only BC and (via _base/stattempo_aria) Aria cotrain.
# Keep evaluator selection in defaults so teacher-forced kwargs cannot leak in.
defaults:
- /experiment/yam_arc_grid/_base/stattempo
- /experiment/_shared/frozen_yam/stattempo
- override /evaluator: eval_open_loop_sim
- _self_
trainer:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# the same training recipe and tempo evaluator as the stationery base; leaves pick the frozen pool
# (towels_pool + data override), the codec (e1.variant) and the run identity.
defaults:
- /experiment/yam_arc_grid/_base/stattempo
- /experiment/_shared/frozen_yam/stattempo
- override /model: e1/hpt300_flow_wrists_time
- override /data: abc_arc/towels_since0924plus74_20261015
- _self_
Expand Down
93 changes: 93 additions & 0 deletions egomimic/hydra_configs/experiment/_shared/frozen_yam_arc.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
# @package _global_
# Canonical ARC over the retained frozen YAM baseline graph and episode lists.
defaults:
- /experiment/_shared/clock_settings
- /model_contract/abc_visual@model
- override /evaluator: eval_open_loop_sim
- _self_
abc:
action_mode: hybrid_arc_tokenizer_cartesian
arc_chunking_mode: multistream
arc_distance: 0.33
arc_rotation_distance: 1.7453292519943295
arc_waypoints: 200
arc_source_buffer_frames: 400
arc_gripper_stream_mode: events
arc_gripper_distance: null
e1:
variant: arc
yam_source_frames: ${abc.arc_source_buffer_frames}
M: ${abc.arc_waypoints}
D: ${abc.arc_distance}
arc_tokenizer:
min_distance_unit: ${abc.arc_distance}
resampled_vector_length: ${abc.arc_waypoints}
hpt:
action_horizon: ${abc.arc_token_rows}
token_dim: ${abc.arc_token_dim}
model:
action_token_dim: ${abc.arc_token_dim}
action_horizon: ${abc.arc_token_rows}
native_action_horizon: ${abc.arc_token_rows}
native_action_dim: ${abc.arc_token_dim}
inference: ${model.inference_contracts.hybrid_arc_tokenizer_cartesian}
data_requirements:
preprocessing:
'7':
key_map:
_target_: egomimic.rldb.embodiment.bimanual_arc.get_keymap
horizon: 200
embodiment: yam
drop_wrist_images: false
yam_source_frames: ${abc.arc_source_buffer_frames}
transforms:
_target_: egomimic.rldb.embodiment.bimanual_arc.get_transform_list
variant: arc
chunk_length: 200
time_rows: ${abc.arc_source_buffer_frames}
min_distance_unit: ${abc.arc_distance}
rotation_distance_unit: ${abc.arc_rotation_distance}
resampled_vector_length: ${abc.arc_waypoints}
stride: 1
rotation_mode: euler
embodiment: yam
yam_source_frames: ${abc.arc_source_buffer_frames}
clock_mode: ${abc.arc_clock_mode}
streams: ${abc.arc_streams}
gripper_stream_mode: ${abc.arc_gripper_stream_mode}
source_fps: 30.0
graph:
noising:
action_horizon: ${abc.arc_token_rows}
sampler:
action_horizon: ${abc.arc_token_rows}
model:
act_seq: ${abc.arc_token_rows}
data:
train_datasets:
yam_bimanual:
resolver:
key_map: ${model.data_requirements.preprocessing.7.key_map}
transform_list: ${model.data_requirements.preprocessing.7.transforms}
valid_datasets:
yam_bimanual:
resolver:
key_map: ${model.data_requirements.preprocessing.7.key_map}
transform_list: ${model.data_requirements.preprocessing.7.transforms}
trainer:
limit_val_batches: 1.0
evaluator:
action_mode: arc
ground_truth_action_key: actions_time
execute_fraction: 0.3
arc_execution_cap_mode: waypoints
arc_chunking_mode: ${abc.arc_chunking_mode}
min_distance_unit: ${abc.arc_distance}
rotation_distance_unit: ${abc.arc_rotation_distance}
resampled_vector_length: ${abc.arc_waypoints}
clock_mode: ${abc.arc_clock_mode}
streams: ${abc.arc_streams}
logger:
wandb:
id: ${name}_s42
tags: [rl2, hpt300, "${abc.arc_clock_mode}", "${abc.arc_streams}", open_loop, video]
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# @package _global_
defaults:
- /experiment/_shared/clock_settings
- override /model: abc_arc/hpt_yam_visual
- override /data: abc_arc/abc_visual
- override /evaluator: eval_open_loop_sim
Expand Down Expand Up @@ -30,26 +31,8 @@ abc:
arc_distance: 0.4
arc_rotation_distance: null
arc_waypoints: 100
arc_token_rows: 100
arc_token_dim: 20
arc_streams: full_separation
arc_clock_mode: velocity
arc_chunking_mode: multistream
task_predicate: ???
run_provenance:
action_contract:
representation: ${abc.action_mode}
arc_chunking_mode: ${abc.arc_chunking_mode}
translation_distance_m: ${abc.arc_distance}
rotation_distance_radians: ${abc.arc_rotation_distance}
waypoints: ${abc.arc_waypoints}
clock_mode: ${abc.arc_clock_mode}
streams: ${abc.arc_streams}
timing_layout: first_delay_incoming_v1
hold_window_frames: 400
gripper_stream_mode: ${oc.select:abc.arc_gripper_stream_mode,events}
gripper_distance_unit: ${oc.select:abc.arc_gripper_distance,null}
control_dt: ${evaluator.control_dt}
trainer:
max_steps: 240000
max_epochs: -1
Expand All @@ -74,7 +57,7 @@ evaluator:
min_distance_unit: ${abc.arc_distance}
rotation_distance_unit: ${abc.arc_rotation_distance}
resampled_vector_length: ${abc.arc_waypoints}
clock_mode: velocity
clock_mode: ${abc.arc_clock_mode}
limit_val_episodes: 16
requires_ordered_validation: true
logger:
Expand Down
24 changes: 9 additions & 15 deletions egomimic/hydra_configs/experiment/abc_arc/README.md
Original file line number Diff line number Diff line change
@@ -1,20 +1,14 @@
# Supported visual ABC / human BC experiments
# Human-only BC and migrated task recipes

Launch from this experiment group, not from retired model/data templates:
Robot and cotrain presets now live in the four task folders documented in
[the experiment menu](../README.md). Distinct HPT180, ABC-DiT and data-pool
variants are preserved under those folders; duplicate clock-layout recipes
are replaced by the `abc.arc_streams` override.

| Group | Dataset | Paired recipes |
| --- | --- | --- |
| `robot_bc` | ABC stationery slice + RL2 updated organize-stationery; RL2-only validation | `stationery_rl2_hpt300_visual_{baseline,hybrid}_openloop` |
| `robot_bc` | ABC fold and stack the towels | `abc_towels_hpt180_{baseline,hybrid}_visual_openloop` |
| `robot_bc` | ABC four-task multitask | `abc_multitask4_hpt300_{baseline,hybrid}_visual_openloop` |
| `human_bc` | MECKA folding clothes, 40-hour subset | `mecka_fold_clothes_40h_human_visual_{baseline,hybrid}_openloop` |

Brace notation denotes separate YAML files, not Hydra syntax.

`robot_bc/abc_visual_hpt300_base` is a shared template requiring a task
predicate. Cotraining has four explicit
`organize_clock_{velocity,duration}_{full_separation,translation_rotation}`
leaves. See [the clock contract](../../../../docs/ARC_CLOCK_CONTRACT.md).
This folder retains the independent MECKA human-only folding experiments:
`human_bc/mecka_fold_clothes_40h_human_visual_{baseline,hybrid}_openloop`.
Brace notation denotes two YAML files, not Hydra syntax.
See [the clock contract](../../../../docs/ARC_CLOCK_CONTRACT.md).

Select `abc.arc_clock_mode=velocity|duration` and
`abc.arc_streams=full_separation|translation_rotation`, with token dimension
Expand Down
6 changes: 0 additions & 6 deletions egomimic/hydra_configs/experiment/abc_arc/cotrain/README.md

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

Loading
Loading