SmolVLA
SmolVLA 是 Hugging Face 的轻量级机器人基础模型。专为在 LeRobot 数据集上轻松微调而设计,可帮助加速您的开发!
图 1. SmolVLA 的输入包括 (i) 多个摄像头视图,(ii)
机器人当前的感觉运动状态,以及 (iii)
自然语言指令,编码为上下文特征,用于在生成动作块时调节动作专家。
设置您的环境
- 按照我们的安装指南安装 LeRobot。
- 运行以下命令安装 SmolVLA 依赖项:
pip install -e ".[smolvla]"
收集数据集
SmolVLA 是一个基础模型,因此需要在您自己的数据上进行微调以在您的设置中获得最佳性能。 我们建议录制约 50 个回合的任务作为起点。按照我们的指南开始:录制数据集
Tip
在您的数据集中,确保为您引入的每个变化(例如,如果是立方体拾取放置任务,则为桌子上的立方体位置)提供足够的演示。
我们建议查看下面链接的数据集作为参考,该数据集用于 SmolVLA 论文:
在这个数据集中,我们在 5 个不同的立方体位置录制了 50 个回合。对于每个位置,我们收集了 10 个拾取和放置交互的回合。这种结构,多次重复每个变化,帮助模型更好地泛化。我们尝试了类似的 25 个回合的数据集,但这还不够,导致性能不佳。因此,数据质量和数量绝对是关键。 在您的数据集在 Hub 上可用后,您就可以使用我们的微调脚本将 SmolVLA 适配到您的应用程序了。
在您的数据上微调 SmolVLA
使用 smolvla_base,我们的预训练 450M 模型,并在您的数据上进行微调。
在单个 A100 GPU 上训练模型 20k 步大约需要 ~4 小时。您应该根据性能和用例调整步数。
如果您没有 GPU 设备,可以使用我们的笔记本在 上进行训练
使用 --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
Tip
您可以从小批次大小开始,如果 GPU 允许,只要加载时间保持较短,就可以逐步增加它。
微调是一门艺术。要全面了解微调选项,请运行
lerobot-train --help
图 2:SmolVLA 在任务变化中的比较。从左到右: (1) 拾取放置立方体计数,(2)
拾取放置立方体计数,(3) 扰动下的拾取放置立方体计数,以及 (4) 在真实世界
SO101 上拾取和放置乐高积木的泛化。
评估微调模型并实时运行
与录制回合类似,建议您登录到 HuggingFace Hub。您可以按照相应的步骤操作:录制数据集。 登录后,您可以通过以下方式在您的设置中运行推理:
lerobot-record \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \ # <- 使用您的端口
--robot.id=my_blue_follower_arm \ # <- 使用您的机器人 ID
--robot.cameras="{ front: {type: opencv, index_or_path: 8, width: 640, height: 480, fps: 30}}" \ # <- 使用您的摄像头
--dataset.single_task="抓取乐高积木并将其放入箱子中。" \ # <- 使用您在数据集录制中使用的相同任务描述
--dataset.repo_id=${HF_USER}/eval_DATASET_NAME_test \ # <- 这将是 HF Hub 上的数据集名称
--dataset.episode_time_s=50 \
--dataset.num_episodes=10 \
--dataset.streaming_encoding=true \
--dataset.encoder_threads=2 \
# --dataset.camera_encoder.vcodec=auto \
# <- 如果您想在回合之间进行遥操作,Teleop 是可选的 \
# --teleop.type=so100_leader \
# --teleop.port=/dev/ttyACM0 \
# --teleop.id=my_red_leader_arm \
--policy.path=HF_USER/FINETUNE_MODEL_NAME # <- 使用您的微调模型
根据您的评估设置,您可以配置持续时间和要为评估套件录制的回合数。