Skip to content

Clarifications on fine-tuning on different envs and embodiments #2259

Description

@RonPlusSign

Hi everyone,
I’m currently working on fine-tuning SmolVLA and π₀ using RLBench. The robot setup is a Franka Emika Panda (7DoF + gripper), and I’ve already collected custom LeRobot datasets for a pick-and-place task (available on my Hugging Face) with 500 demo episodes.

I’ve successfully fine-tuned OpenVLA using its official repository, where the action space is defined as ΔEEF pose (Euler rotation) + gripper, and the state as ΔEEF pose (quaternion rotation) + gripper, using a single observation image (left shoulder), reaching around 22% success rate.

However, when trying to fine-tune SmolVLA, despite the training running without issues (loss converges and wandb plots look fine), the evaluation yields 0% success. I suspect I’m misunderstanding how to correctly define the state and action spaces for SmolVLA in this context.
Since RLBench is not one of the officially supported envs, I created an evaluation script (you can find it here), similar to the examples provided in Robot Learning: A Tutorial (thanks @fracapuano for the amazing work!).

Image

For example, I started the finetuning using:

python src/lerobot/scripts/lerobot_train.py \
        --policy.path=HuggingFaceVLA/smolvla_libero \
        --policy.repo_id=RonPlusSign/smolvla_PutRubbishInBin \
        --dataset.repo_id=RonPlusSign/RLBench-LeRobot-v3-PutRubbishInBin \
        --batch_size=32  \
        --output_dir=outputs/train/smolvla_finetuned_rubbish \
        --policy.device=cuda \
        --wandb.enable=true \
        --save_freq=10000 \
        --steps=60000

I also tested smaller finetunings (e.g. 5k, 10k, 20k steps).

Here are some specific points I’d like to clarify:

  1. What are the exact action and state spaces used in SmolVLA and π₀ pretraining? (ΔEEF pose, absolute EEF pose, joint positions, joint velocities, ... and angle representations e.g. quaternion or Euler).

  2. Regarding camera inputs: does the naming or number of cameras affect the model performance? Should I stick to the exact names provided in the config.json file, such as observation.images.image and observation.images.image2 (front/wrist), similar to pretraining? Or is it fine to use different camera names and/or add extra views? Is there a way to override the existing input and output features or this means that the pretrain would be wasted?

  3. The base model lerobot/smolvla_base is pretrained on the SO100/SO101 robot, so I assume it might not transfer well to Franka Panda tasks — is that correct?

  4. Would it make more sense to start from a model trained on Franka, e.g. HuggingFaceVLA/smolvla_libero, or it's still a different type of embodiment (it seems with 6DoF+gripper, which is not my case)?

  5. Are the datasets HuggingFaceVLA/libero and/or HuggingFaceVLA/smol-libero the ones used for pretraining HuggingFaceVLA/smolvla_libero?

  6. In HuggingFaceVLA/smol-libero the actions have dimension 7, which doesn’t clearly map to 7 joint angles + gripper. Are these absolute joint positions, EEF poses, or something else? Does LIBERO use a 6DoF or 7DoF Franka setup? If 6DoF, which joint is excluded?

Any guidance on these points (or pointers to where this information is documented) would be very helpful — I’ve been trying to align my setup with the pretrained models but haven’t found clear references for these details.

Thanks a lot for your time and for maintaining this project!

Metadata

Metadata

Assignees

Labels

policiesItems related to robot policiesquestionRequests for clarification or additional informationsimulationMatters involving system simulation or modeling

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions