为什么 'pi0_libero' 配置中 extra_delta_action 设置为 True?
In class LeRobotLiberoDataConfig from src/openpi/training/config.py:
# One additional data transform: pi0 models are trained on delta actions (relative to the first
# state in each action chunk). IF your data has absolute actions (e.g. target joint angles)
# you can uncomment the following line to convert the actions to delta actions. The only exception
# is for the gripper actions which are always absolute.
# In the example below, we would apply the delta conversion to the first 6 actions (joints) and
# leave the 7th action (gripper) unchanged, i.e. absolute.
# In Libero, the raw actions in the dataset are already delta actions, so we do not need to
# apply a separate delta conversion (that's why it's commented out). Choose whether to apply this
# transform based on whether your dataset uses absolute or delta actions out of the box.
# LIBERO already represents actions as deltas, but we have some old Pi0 checkpoints that are trained with this
# extra delta transform.
if self.extra_delta_transform:
delta_action_mask = _transforms.make_bool_mask(6, -1)
data_transforms = data_transforms.push(
inputs=[_transforms.DeltaActions(delta_action_mask)],
outputs=[_transforms.AbsoluteActions(delta_action_mask)],
)
In the pi0_libero train config, extra_delta_action=True:
TrainConfig(
# Change the name to reflect your model and dataset.
name="pi0_libero",
# Here you define the model config -- In this example we use pi0 as the model architecture and perform full finetuning. in the examples below we show how to modify
# this to perform low-memory (LORA) finetuning and use pi0-FAST as an alternative architecture.
model=pi0_config.Pi0Config(),
# Here you define the dataset you are training on. In this example we use the Libero dataset. For your own dataset, you can change the repo_id to point to your dataset.
# Also modify the DataConfig to use the new config you made for your dataset above.
data=LeRobotLiberoDataConfig(
repo_id="physical-intelligence/libero",
base_config=DataConfig(
# This flag determines whether we load the prompt (i.e. the task instruction) from the
# task field in the LeRobot dataset. If set to True, the prompt will show up in
# a field called prompt in the input dict. The recommended setting is True.
prompt_from_task=True,
),
extra_delta_transform=True,
),
# Here you define which pre-trained checkpoint you want to load to initialize the model.
# This should match the model config you chose above -- i.e. in this case we use the pi0 base model.
…
内容来源: Physical-Intelligence/openpi