LeRobot documentation
SmolVLA
SmolVLA
SmolVLA 是 Hugging Face 推出的轻量级机器人基础模型。它专为在 LeRobot 数据集上进行便捷的微调而设计,助力加速您的开发进程!
图 1。SmolVLA 的输入包括:(i) 多个摄像头视角,(ii) 机器人当前的感觉运动状态,以及 (iii) 自然语言指令。这些输入被编码为上下文特征,用于在生成动作块时条件化动作专家。
设置您的环境
按照我们的安装指南安装 LeRobot。
运行以下命令安装 SmolVLA 依赖项:
pip install -e ".[smolvla]"
收集数据集
SmolVLA 是一个基础模型,因此需要在您自己的数据上进行微调,才能在您的环境中获得最佳性能。 我们建议以录制约 50 个任务片段作为起点。请按照我们的指南开始操作:录制数据集
在您的数据集中,请确保为引入的每种变化(例如,在方块拾取-放置任务中,方块在桌面上的位置)都提供足够的演示。
我们建议参考 SmolVLA 论文 中使用的数据集,链接如下:
在此数据集中,我们记录了 50 个 episode,涵盖 5 个不同的立方体位置。对于每个位置,我们收集了 10 个 pick-and-place 交互的 episode。这种将每种变化重复多次的结构有助于模型更好地泛化。我们尝试了类似的包含 25 个 episode 的数据集,但数量不足,导致性能不佳。因此,数据的质量和数量绝对是关键。 当您的数据集在 Hub 上可用后,您就可以使用我们的微调脚本将 SmolVLA 适配到您的应用场景中。
使用您的数据微调 SmolVLA
使用 smolvla_base,即我们预训练的 450M 模型,并在您的数据上进行微调。
在单个 A100 GPU 上训练该模型 20k 步大约需要 4 小时。您应根据性能和具体用例调整训练步数。
如果没有 GPU 设备,您可以使用我们的 notebook 在 上进行训练
使用 --dataset.repo_id 将数据集传递给训练脚本。如果您想测试安装,请运行以下命令,其中我们使用了为 SmolVLA Paper 收集的数据集之一。请将其替换为您自己的数据集,以便在您的数据上进行微调。
lerobot-train \
--policy.path=lerobot/smolvla_base \
--dataset.repo_id=lerobot/svla_so100_pickplace \
--policy.repo_id=${HF_USER}/my_smolvla \
--rename_map='{"observation.images.top": "observation.images.camera1", "observation.images.wrist": "observation.images.camera2"}' \
--batch_size=64 \
--steps=20000 \
--output_dir=outputs/train/my_smolvla \
--job_name=my_smolvla_training \
--policy.device=cuda \
--trackio.enable=true--policy.repo_id是微调后的模型推送到的 Hub 仓库。--rename_map将数据集的相机名称映射为smolvla_base所期望的camera1、camera2和camera3名称。如果不使用该参数,训练会因特征不匹配错误而停止。请按照相同方式映射您自己的相机名称(参见 重命名映射)。
You can start with a small batch size and increase it incrementally, if the GPU allows it, as long as loading times remain short.
微调是一门艺术。若要全面了解微调的各种选项,请运行
lerobot-train --help
图 2:SmolVLA 在不同任务变体上的对比。从左到右依次为:
(1) 拾放方块计数,(2) 拾放方块计数,(3) 在扰动条件下的拾放方块计数,以及 (4) 在真实世界 SO101 上对乐高积木进行拾放任务的泛化能力。
评估微调后的模型并实时运行
同样,在录制剧集时,建议您已登录 HuggingFace Hub。您可以按照相应的步骤操作:录制数据集。 登录后,您可以通过以下方式在您的环境中运行推理:
lerobot-rollout \
--strategy.type=base \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_blue_follower_arm \
--robot.cameras="{ top: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30}}" \
--rename_map='{"observation.images.top": "observation.images.camera1", "observation.images.wrist": "observation.images.camera2"}' \
--task="Grasp a lego block and put it in the bin." \
--policy.path=${HF_USER}/FINETUNE_MODEL_NAME将 --robot.port、--robot.id、--robot.cameras 和 --policy.path 替换为您自己的端口、机器人 ID、相机(与数据集中相同的相机名称和分辨率)以及微调后的模型。传入与训练时相同的 --rename_map,以及与数据集录制时相同的 --task 描述。
您可以向上述命令添加的可选标志:
- RTC(在推理速度较慢时实现更流畅的动作,例如在低功耗硬件上):
--inference.type=rtc --inference.rtc.execution_horizon=10 --inference.rtc.max_guidance_weight=10.0 - 查看摄像头流:
--display_data=true - 自动停止:
--duration=60(以秒为单位)。默认情况下,策略会一直运行,直到你按下 Ctrl+C。
要记录评估回合,并可选使用遥操作者在回合之间重置场景,请改用 --strategy.type=episodic。有关所有策略,请参阅 策略部署。