LeRobot 文档

微调 SmolVLA

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

微调 SmolVLA

SmolVLA 是 Hugging Face 的轻量级机器人基础模型。它专为在 LeRobot 数据集上轻松微调而设计,可帮助您加速开发!

SmolVLA architecture.
图 1. SmolVLA 的输入包括:(i) 多个摄像头视角,(ii) 机器人当前的感官运动状态,以及 (iii) 一条自然语言指令,这些输入被编码成上下文特征,用于在生成动作块时对动作专家进行条件化。

设置您的环境

  1. 请遵循我们的安装指南来安装 LeRobot。

  2. 运行以下命令安装 SmolVLA 依赖项

    pip install -e ".[smolvla]"

收集数据集

SmolVLA 是一个基础模型,因此需要在您自己的数据上进行微调,才能在您的设置中获得最佳性能。我们建议录制约 50 个任务片段作为起点。请遵循我们的指南开始操作:录制数据集

在您的数据集中,请确保为您引入的每种变化(例如,如果是方块拾取放置任务,则为方块在桌子上的位置)提供足够的演示。

我们建议您参考下面链接的数据集,该数据集曾在 SmolVLA 论文中使用过

🔗 SVLA SO100 PickPlace

在这个数据集中,我们记录了 50 个片段,涵盖 5 个不同的方块位置。对于每个位置,我们收集了 10 个拾取和放置交互的片段。这种多次重复每种变化的结构有助于模型更好地泛化。我们尝试过一个包含 25 个片段的类似数据集,但这并不足以支持良好性能。因此,数据的质量和数量绝对是关键。当您的数据集在 Hub 上可用后,您就可以使用我们的微调脚本来使 SmolVLA 适应您的应用了。

在您的数据上微调 SmolVLA

使用 smolvla_base,这是我们预训练的 4.5 亿参数模型,并在您的数据上进行微调。在单张 A100 GPU 上,训练模型 20k 步大约需要 4 小时。您应根据性能和您的用例来调整训练步数。

如果您没有 GPU 设备,可以使用我们的 notebook 在 Google Colab 上进行训练。

通过 --dataset.repo_id 将您的数据集传递给训练脚本。如果您想测试安装是否成功,请运行以下命令,其中我们使用了为 SmolVLA 论文 收集的一个数据集。

cd lerobot && lerobot-train \
  --policy.path=lerobot/smolvla_base \
  --dataset.repo_id=${HF_USER}/mydataset \
  --batch_size=64 \
  --steps=20000 \
  --output_dir=outputs/train/my_smolvla \
  --job_name=my_smolvla_training \
  --policy.device=cuda \
  --wandb.enable=true
您可以从一个较小的批次大小开始,如果 GPU 允许,可以逐渐增加,只要加载时间保持较短即可。

微调是一门艺术。要全面了解微调的选项,请运行

lerobot-train --help

Comparison of SmolVLA across task variations.
图 2:SmolVLA 在不同任务变化下的比较。从左到右:(1) 方块拾取放置计数,(2) 方块拾取放置计数,(3) 受干扰下的方块拾取放置计数,以及 (4) 在真实世界 SO101 环境下对乐高积木拾取放置的泛化能力。

评估微调后的模型并实时运行

与录制片段时类似,建议您登录到 HuggingFace Hub。您可以按照相应的步骤操作:录制数据集。登录后,您可以通过以下命令在您的设置中运行推理

lerobot-record \
  --robot.type=so101_follower \
  --robot.port=/dev/ttyACM0 \ # <- Use your port
  --robot.id=my_blue_follower_arm \ # <- Use your robot id
  --robot.cameras="{ front: {type: opencv, index_or_path: 8, width: 640, height: 480, fps: 30}}" \ # <- Use your cameras
  --dataset.single_task="Grasp a lego block and put it in the bin." \ # <- Use the same task description you used in your dataset recording
  --dataset.repo_id=${HF_USER}/eval_DATASET_NAME_test \  # <- This will be the dataset name on HF Hub
  --dataset.episode_time_s=50 \
  --dataset.num_episodes=10 \
  # <- Teleop optional if you want to teleoperate in between episodes \
  # --teleop.type=so100_leader \
  # --teleop.port=/dev/ttyACM0 \
  # --teleop.id=my_red_leader_arm \
  --policy.path=HF_USER/FINETUNE_MODEL_NAME # <- Use your fine-tuned model

根据您的评估设置,您可以配置为评估套件录制的时长和片段数量。

< > 在 GitHub 上更新