An investigation into the architectural constraints of pretrained Vision-Language-Action (VLA) models when applied to custom robot morphologies. This project documents the challenges encountered when attempting to fine-tune SmolVLA on a humanoid manipulation task in MuJoCo simulation.
Full technical writeup coming soon!
- Hardcoded Sequence Lengths: Pretrained VLAs have fixed attention mask dimensions determined during pretraining
- Normalization Constraints: Frozen normalization statistics require exact input dimensions matching the pretraining setup
- Camera Configuration Dependencies: Models trained on multi-camera setups (e.g., ALOHA) may not transfer to single-camera configurations
- Tokenization Sensitivity: Total sequence length depends on image patches, language tokens, state encoding, and action dimensions
- Python 3.12
- mise for version management
- GPU: NVIDIA, Intel Arc or AMD (auto-detected)
# Install mise and Python 3.12
make setup-mise
# Install all dependencies (auto-detects GPU)
make install
# Setup environment variables
make setup-env
# Verify installation
make verify-setupThe project includes a fully functional data collection system for MuJoCo simulation:
make collect-dataFeatures:
- Terminal-based keyboard teleoperation
- Contact-aware grasping
- Randomized object spawning
- 224x224 RGB observations + 15-dim proprioceptive state
- Natural language task descriptions
Controls:
W/A/S/D/Q/E: Arm movementG/H: Gripper close/openJ/K: Torso lift up/down (very minimal impact so basically useless with the current implementation)X: Save episodeZ: Reset episode
This project automatically detects and configures for multiple GPU vendors:
# Display GPU information
make gpu-info
# Supported GPUs:
# - NVIDIA (CUDA)
# - Intel Arc (XPU)
# - AMD (ROCm) - I haven't tested this yet as I am yet to get an AMD GPU, soon though!- Robot: ROBOTIS FFW-BG2 humanoid torso (source)
- Control: Single left arm (7-DOF) + parallel gripper (1-DOF)
- Observations: RGB camera (224x224) + joint state (15-dim)
- Actions: 8-dimensional continuous control
{
"observation.image": [3, 224, 224], # RGB image
"observation.state": [15], # qpos(7) + qvel(7) + gripper(1)
"action": [8], # 7 arm joints + gripper
"task": str # Natural language instruction
}- Dimension Mismatch (Solved): Normalization layers expected specific dimensions
- Sequence Length Mismatch (Unsolved): Attention mechanism has hardcoded 145-token expectation, got 163 tokens
- Root Cause: Architectural constraints from pretraining on different robot configuration
- Check pretrained model architecture first before collecting data
- Match the pretraining setup exactly or train from scratch
- Consider policy alternatives (ACT, Diffusion Policy) for custom robots
- Document failures - they're educational for the community
This investigation highlights the need for more architecturally flexible VLA models that can:
- Adapt to variable sequence lengths
- Handle different camera configurations
- Support diverse robot morphologies without retraining
For custom robot setups, consider:
- Action Chunking Transformers (ACT) - Flexible architecture, works with single cameras
- Diffusion Policy - Generative approach, adaptable to various configurations
- Behavior Cloning - Simple and effective for imitation learning
- Training SmolVLA from scratch - Requires massive compute and data
@misc{shukor2025smolvlavisionlanguageactionmodelaffordable,
title={SmolVLA: A Vision-Language-Action Model for Affordable and Efficient Robotics},
author={Mustafa Shukor and Dana Aubakirova and Francesco Capuano and Pepijn Kooijmans and Steven Palma and Adil Zouitine and Michel Aractingi and Caroline Pascal and Martino Russi and Andres Marafioti and Simon Alibert and Matthieu Cord and Thomas Wolf and Remi Cadene},
year={2025},
eprint={2506.01844},
archivePrefix={arXiv},
primaryClass={cs.LG},
url={https://arxiv.org/abs/2506.01844},
}- Paper: SmolVLA (arXiv:2506.01844)
- Pretrained Model: lerobot/smolvla_base
- Robot Assets: ROBOTIS MuJoCo Menagerie (Apache 2.0)
- Framework: LeRobot
# Format code
make format
# Run linting
make lint
# Run tests
make test
# Clean temporary files
make cleanMIT License - See LICENSE file for details
Robot assets from ROBOTIS are licensed under Apache 2.0.
William Obino
- Email: obinowilliam@staka.cc
- Location: Nairobi, Kenya
- GitHub: @andomeder
