Modality connects dataset columns to the training pipeline. You must edit groot/vla/configs/data/dreamzero/base_48_wan_fine_aug_relative.yaml to include your embodiment's configuration.
1. Modality Configuration
Define modality_config_<EMBODIMENT> using groot.vla.data.dataset.ModalityConfig. The keys used here must match the names in your generated meta/modality.json with type prefixes:
- State:
state.<name> - Action:
action.<name> - Video:
video.<name> - Language:
annotation.<name>
delta_indices usage:
- Video: Frame offsets to sample (e.g.,
[0, 1, ..., 24]). - State / Language:
[0] for current timestep only. - Action: Future offsets (e.g.,
[0, 1, ..., 23]) for action chunking.
2. Transform Configuration
Define transform_<EMBODIMENT> using groot.vla.data.transform.ComposedModalityTransform.
- Normalization: Every state and action key must appear in
normalization_modes (typically using q99). - Concat: Use
ConcatTransform to define the order of concatenation for video, state, and action keys.
3. Global Registration
Register your new configs in the base YAML's global maps:
modality_configstransformsmetadata_versionsfps
modality_config_<EMBODIMENT>:
video:
_target_: groot.vla.data.dataset.ModalityConfig
delta_indices: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]
eval_delta_indices: [0]
modality_keys:
- video.cam0
- video.cam1
- video.cam2
state:
_target_: groot.vla.data.dataset.ModalityConfig
delta_indices: [0]
modality_keys:
- state.joint_pos
- state.gripper_pos
action:
_target_: groot.vla.data.dataset.ModalityConfig
delta_indices: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]
modality_keys:
- action.joint_pos
- action.gripper_pos
language:
_target_: groot.vla.data.dataset.ModalityConfig
delta_indices: [0]
modality_keys:
- annotation.task
transform_<EMBODIMENT>:
_target_: groot.vla.data.transform.ComposedModalityTransform
transforms:
- <<: *totensor_cfg
apply_to: ${modality_config_<EMBODIMENT>.video.modality_keys}
- <<: *crop_cfg
apply_to: ${modality_config_<EMBODIMENT>.video.modality_keys}
- <<: *resize_cfg
apply_to: ${modality_config_<EMBODIMENT>.video.modality_keys}
- <<: *color_jitter_cfg
apply_to: ${modality_config_<EMBODIMENT>.video.modality_keys}
- <<: *to_numpy_cfg
apply_to: ${modality_config_<EMBODIMENT>.video.modality_keys}
- _target_: groot.vla.data.transform.StateActionToTensor
apply_to: ${modality_config_<EMBODIMENT>.state.modality_keys}
- _target_: groot.vla.data.transform.StateActionTransform
apply_to: ${modality_config_<EMBODIMENT>.state.modality_keys}
normalization_modes:
state.joint_pos: q99
state.gripper_pos: q99
- _target_: groot.vla.data.transform.StateActionToTensor
apply_to: ${modality_config_<EMBODIMENT>.action.modality_keys}
- _target_: groot.vla.data.transform.StateActionTransform
apply_to: ${modality_config_<EMBODIMENT>.action.modality_keys}
normalization_modes:
action.joint_pos: q99
action.gripper_pos: q99
- _target_: groot.vla.data.transform.ConcatTransform
video_concat_order: ${modality_config_<EMBODIMENT>.video.modality_keys}
state_concat_order: ${modality_config_<EMBODIMENT>.state.modality_keys}
action_concat_order: ${modality_config_<EMBODIMENT>.action.modality_keys}
- ${model_specific_transform}