Compare commits

..

37 Commits

Author SHA1 Message Date
pre-commit-ci[bot]
97f061fca6 [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2025-06-03 13:32:37 +00:00
Dana Aubakirova
f01c6d06cf Merge branch 'user/mshukor/smolvla_fix' into my-fix-based-on-pr-1175 2025-06-03 15:32:02 +02:00
Dana
b41362a4aa fix 2025-06-03 15:29:10 +02:00
pre-commit-ci[bot]
209f89a274 [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2025-06-03 12:34:34 +00:00
Dana Aubakirova
efeef4eef2 fixes for merging (#1188) 2025-06-03 14:34:19 +02:00
Dana
812feac7d7 fixes for merging 2025-06-03 14:29:56 +02:00
Steven Palma
31c30cce82 Merge branch 'main' into user/mshukor/smolvla_fix 2025-06-02 21:24:35 +02:00
mshukor
345bc8b2d0 precommit 2025-06-02 20:51:37 +02:00
mshukor
c2d645717a assume always there is state 2025-06-02 20:50:38 +02:00
mshukor
1fd53b441a more comments 2025-06-02 20:49:46 +02:00
mshukor
73fd12dea1 minor fixes 2025-06-02 20:44:57 +02:00
Dana Aubakirova
60389f70ca Apply suggestions from code review
small fixes

Co-authored-by: Remi <remi.cadene@huggingface.co>
2025-06-02 18:33:41 +02:00
fracapuano
64cc94479a fix: docstring more informative 2025-06-02 11:45:44 +02:00
fracapuano
093773f850 remove: commented out line 2025-06-02 11:43:45 +02:00
fracapuano
17625ca4ff fix: copyright (time flies when having fun) 2025-06-02 11:43:45 +02:00
fracapuano
492b1812dd fix: device to send VLM to is found automatically 2025-06-02 11:43:45 +02:00
Steven Palma
2d98bf63a7 Merge branch 'main' into user/mshukor/smolvla_fix 2025-06-02 10:39:39 +02:00
mshukor
825e0e1ab1 instructions for smolvla 2025-06-01 09:50:06 +02:00
mshukor
7f3fe83465 instructions to train the model 2025-06-01 09:48:26 +02:00
pre-commit-ci[bot]
95a16c605d [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2025-06-01 07:38:37 +00:00
mshukor
5fd40b188e avoid import pytest 2025-06-01 09:36:23 +02:00
mshukor
4027d97c70 fix for observations with text 2025-06-01 09:35:22 +02:00
mshukor
496c9d0037 remove train script 2025-06-01 09:34:04 +02:00
mshukor
3ae55831c8 clean gitignore 2025-06-01 09:33:28 +02:00
fracapuano
6d776f7eb9 minor fixes iterating on steven's comments 2025-05-31 21:07:20 +02:00
fracapuano
312d45b7fe skipping keys containing lists, bc the robot gives nothing but tensors 2025-05-31 21:01:31 +02:00
mshukor
302bdd51a6 install accelerate 2025-05-30 13:43:44 +02:00
mshukor
8097f66248 clean train 2025-05-30 13:30:44 +02:00
pre-commit-ci[bot]
ac0f2e9dd9 [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2025-05-30 11:14:47 +00:00
mshukor
a3a73f6822 add stuff related to real eval 2025-05-30 13:10:56 +02:00
mshukor
a9d425f470 cleaning 2025-05-28 22:20:06 +02:00
mshukor
1c5a3585e7 launch training 2025-05-28 22:18:52 +02:00
mshukor
44b457852e precommit fix 2025-05-28 21:31:21 +02:00
mshukor
97d609feb4 precommit 2025-05-28 21:30:04 +02:00
mshukor
4719f41a43 training the model 2025-05-28 14:24:30 +02:00
mshukor
8d6acb3a4f load model 2025-05-28 14:14:51 +02:00
mshukor
d89d0884e3 init model 2025-05-28 14:11:58 +02:00
6 changed files with 4 additions and 99 deletions

View File

@@ -10,8 +10,3 @@
- local: getting_started_real_world_robot
title: Getting Started with Real-World Robots
title: "Tutorials"
- sections:
- local: smolvla
title: Use SmolVLA
title: "Policies"

View File

@@ -1,91 +0,0 @@
# Use SmolVLA
SmolVLA is designed to be easy to use and integrate—whether you're finetuning on your own data or plugging it into an existing robotics stack.
<p align="center">
<img src="https://cdn-uploads.huggingface.co/production/uploads/640e21ef3c82bd463ee5a76d/aooU0a3DMtYmy_1IWMaIM.png" alt="SmolVLA architecture." width="500"/>
<br/>
<em>Figure 2. SmolVLA takes as input a sequence of RGB images from multiple cameras, the robots current sensorimotor state, and a natural language instruction. The VLM encodes these into contextual features, which condition the action expert to generate a continuous sequence of actions.</em>
</p>
### Install
First, install the required dependencies:
```python
git clone https://github.com/huggingface/lerobot.git
cd lerobot
pip install -e ".[smolvla]"
```
### Finetune the pretrained model
Use [`smolvla_base`](https://hf.co/lerobot/smolvla_base), our pretrained 450M model, with the lerobot training framework:
```python
python lerobot/scripts/train.py \
--policy.path=lerobot/smolvla_base \
--dataset.repo_id=lerobot/svla_so100_stacking \
--batch_size=64 \
--steps=200000
```
<p align="center">
<img src="https://cdn-uploads.huggingface.co/production/uploads/640e21ef3c82bd463ee5a76d/S-3vvVCulChREwHDkquoc.gif" alt="Comparison of SmolVLA across task variations." width="500"/>
<br/>
<em>Figure 1: Comparison of SmolVLA across task variations. From left to right: (1) asynchronous pick-place cube counting, (2) synchronous pick-place cube counting, (3) pick-place cube counting under perturbations, and (4) generalization on pick-and-place of the lego block with real-world SO101.</em>
</p>
### Train from scratch
If you'd like to build from the architecture (pretrained VLM + action expert) rather than a pretrained checkpoint:
```python
python lerobot/scripts/train.py \
--policy.type=smolvla \
--dataset.repo_id=lerobot/svla_so100_stacking \
--batch_size=64 \
--steps=200000
```
You can also load `SmolVLAPolicy` directly:
```python
from lerobot.common.policies.smolvla.modeling_smolvla import SmolVLAPolicy
policy = SmolVLAPolicy.from_pretrained("lerobot/smolvla_base")
```
## Evaluate the pretrained policy and run it in real-time
If you want to record the evaluation process and safe the videos on the hub, login to your HF account by running:
```python
huggingface-cli login --token ${HUGGINGFACE_TOKEN} --add-to-git-credential
```
Store your Hugging Face repository name in a variable to run these commands:
```python
HF_USER=$(huggingface-cli whoami | head -n 1)
echo $HF_USER
```
Now, indicate the path to the policy, which is `lerobot/smolvla_base` in this case, and run:
```python
python lerobot/scripts/control_robot.py \
--robot.type=so100 \
--control.type=record \
--control.fps=30 \
--control.single_task="Grasp a lego block and put it in the bin." \
--control.repo_id=${HF_USER}/eval_svla_base_test \
--control.tags='["tutorial"]' \
--control.warmup_time_s=5 \
--control.episode_time_s=30 \
--control.reset_time_s=30 \
--control.num_episodes=10 \
--control.push_to_hub=true \
--control.policy.path=lerobot/smolvla_base
```
Depending on your evaluation setup, you can configure the duration and the number of episodes to record for your evaluation suite.

View File

@@ -168,7 +168,7 @@ available_datasets = sorted(
)
# lists all available policies from `lerobot/common/policies`
available_policies = ["act", "diffusion", "tdmpc", "vqbet"]
available_policies = ["act", "diffusion", "tdmpc", "vqbet", "smolvla"]
# lists all available robots from `lerobot/common/robot_devices/robots`
available_robots = [

View File

@@ -662,6 +662,7 @@ class VLAFlowMatching(nn.Module):
self.config.max_period,
device=device,
)
time_emb = time_emb.type(dtype=dtype)
time_emb = time_emb[:, None, :].expand_as(action_emb)

View File

@@ -272,7 +272,6 @@ def control_loop(
action = {"action": action}
if dataset is not None:
observation = {k: v for k, v in observation.items() if k not in ["task", "robot_type"]}
frame = {**observation, **action, "task": single_task}
dataset.add_frame(frame)

View File

@@ -21,6 +21,7 @@ import pytest
import lerobot
from lerobot.common.policies.act.modeling_act import ACTPolicy
from lerobot.common.policies.diffusion.modeling_diffusion import DiffusionPolicy
from lerobot.common.policies.smolvla.modeling_smolvla import SmolVLAPolicy
from lerobot.common.policies.tdmpc.modeling_tdmpc import TDMPCPolicy
from lerobot.common.policies.vqbet.modeling_vqbet import VQBeTPolicy
from tests.utils import require_env
@@ -45,7 +46,7 @@ def test_available_policies():
This test verifies that the class attribute `name` for all policies is
consistent with those listed in `lerobot/__init__.py`.
"""
policy_classes = [ACTPolicy, DiffusionPolicy, TDMPCPolicy, VQBeTPolicy]
policy_classes = [ACTPolicy, DiffusionPolicy, TDMPCPolicy, VQBeTPolicy, SmolVLAPolicy]
policies = [pol_cls.name for pol_cls in policy_classes]
assert set(policies) == set(lerobot.available_policies), policies