SmolVLA:在 Lerobot 社区数据上训练的高效视觉-语言-动作模型

发布日期:2025 年 6 月 3 日
在 GitHub 上更新

🧭TL;DR

今天,我们推出了 SmolVLA,这是一款紧凑(4.5 亿参数)、开源的机器人视觉-语言-动作模型,可在消费级硬件上运行。

  • 该模型仅使用在 lerobot 标签下共享的兼容许可的开源社区数据集进行预训练。
  • SmolVLA-450M 在模拟(LIBERO、Meta-World)和真实世界任务(SO100、SO101)上均优于更大的 VLA 和强大的基线模型,例如 ACT
  • 支持**异步推理**,可实现**30% 更快的响应**和**2 倍的任务吞吐量**。

实用链接:

📚 目录

引言

在过去的几年里,Transformer 推动了人工智能的显著进步,从能够进行类人推理的语言模型到能够理解图像和文本的多模态系统。然而,在现实世界的机器人领域,进展却慢得多。机器人仍然难以泛化到不同的物体、环境和任务。这种有限的进展源于**缺乏高质量、多样化的数据**,以及缺乏能够在**物理世界中像人类一样推理和行动**的模型。

为了应对这些挑战,该领域最近转向了**视觉-语言-动作 (VLA) 模型**,旨在将感知、语言理解和动作预测统一到单一架构中。VLA 通常接收原始视觉观测和自然语言指令作为输入,并输出相应的机器人动作。尽管前景广阔,但 VLA 的大部分最新进展仍然被专有模型所限制,这些模型在大型私有数据集上训练,通常需要昂贵的硬件设置和大量的工程资源。因此,更广泛的机器人研究社区在重现和构建这些模型方面面临着巨大的障碍。

SmolVLA 弥补了这一空白,它提供了一个开源、紧凑且高效的 VLA 模型,该模型可以在**仅使用公开可用数据集的消费级硬件**上进行训练。通过不仅发布模型权重,还使用非常经济实惠的开源硬件,SmolVLA 旨在普及视觉-语言-动作模型的访问,并加速通用机器人代理的研究。

Comparison of SmolVLA across task variations.
图 1:SmolVLA 在任务变体中的比较。从左到右依次为:(1) 异步抓取放置方块计数,(2) 同步抓取放置方块计数,(3) 扰动下的抓取放置方块计数,以及 (4) 使用真实世界 SO101 抓取放置乐高积木的泛化能力。

认识 SmolVLA!

SmolVLA-450M 是我们开源的、紧凑而强大的 VLA 模型。它:

  • 小到可以在 CPU 上运行,在单个消费级 GPU 甚至 MacBook 上训练!
  • 在公共、社区共享的机器人数据上训练
  • 发布了完整的训练和推理配方
  • 可以在非常经济的硬件上测试和部署(SO-100、SO-101、LeKiwi 等)

受大型语言模型 (LLM) 训练范式的启发,SmolVLA 经历了通用操作数据的预训练阶段,然后是任务特定的后训练。在架构上,它将 Transformer 与**流匹配解码器**结合起来,并通过以下设计选择优化了速度和低延迟推理:

  • 跳过一半视觉模型的层,以实现更快的推理和更小的尺寸
  • 交错自注意力块和交叉注意力块
  • 使用更少的视觉标记
  • 利用更小的预训练 VLM

尽管训练片段少于 3 万个——比其他 VLA 少一个数量级——SmolVLA **匹配或超过了**更大模型在模拟和现实世界中的性能。

为了使实时机器人更容易使用,我们引入了异步推理堆栈。这项技术将机器人执行动作的方式与它们理解所见所闻的方式分离开来。由于这种分离,机器人可以在快速变化的环境中更快地做出反应。

SmolVLA architecture.
图 2. SmolVLA 接收来自多个摄像头的 RGB 图像序列、机器人当前的感知运动状态以及自然语言指令作为输入。VLM 将这些编码为上下文特征,这些特征条件化动作专家以生成连续的动作序列。

🚀 如何使用 SmolVLA?

SmolVLA 的设计旨在易于使用和集成——无论您是在自己的数据上进行微调还是将其插入到现有的机器人堆栈中。

安装

首先,安装所需的依赖项

git clone https://github.com/huggingface/lerobot.git
cd lerobot
pip install -e ".[smolvla]"

微调预训练模型

使用 smolvla_base,我们的预训练 450M 模型,与 lerobot 训练框架结合使用

python lerobot/scripts/train.py \
  --policy.path=lerobot/smolvla_base \
  --dataset.repo_id=lerobot/svla_so100_stacking \
  --batch_size=64 \
  --steps=20000  # 10% of training budget

从头开始训练

如果您想从架构(预训练 VLM + 动作专家)而非预训练检查点构建

python lerobot/scripts/train.py \
  --policy.type=smolvla \
  --dataset.repo_id=lerobot/svla_so100_stacking \
  --batch_size=64 \
  --steps=200000

您也可以直接加载 SmolVLAPolicy

from lerobot.common.policies.smolvla.modeling_smolvla import SmolVLAPolicy
policy = SmolVLAPolicy.from_pretrained("lerobot/smolvla_base")

方法

SmolVLA 不仅是一个轻量级但功能强大的模型,也是一种训练和评估通用机器人策略的方法。在本节中,我们介绍了 SmolVLA 背后的*模型架构*以及用于评估的*异步推理*设置,该设置已被证明更具适应性且能够更快地恢复。

SmolVLA 由两个核心组件组成:一个处理多模态输入的**视觉-语言模型 (VLM)** 和一个输出机器人控制命令的**动作专家**。下面,我们将分享 SmolVLA 架构主要组件和异步推理的详细信息。更多详情可在我们的技术报告中找到。

主要架构

视觉-语言模型 (VLM)

我们使用 SmolVLM2 作为 VLM 骨干。它针对多图像输入进行了优化,由 SigLIP 视觉编码器和 SmolLM2 语言解码器组成。

  • **图像标记**通过视觉编码器提取。
  • **语言指令**被标记化并直接馈送到解码器中。
  • **感觉运动状态**通过线性层投影成单个标记,以与语言模型的标记维度对齐。

解码器层处理连接的图像、语言和状态标记。然后将生成的特征传递给动作专家。

动作专家:流匹配 Transformer

SmolVLA 的**动作专家**是一个紧凑型 Transformer(约 1 亿参数),它根据 VLM 的输出生成动作块,即未来机器人动作的序列。它使用**流匹配目标**进行训练,该目标教导模型将噪声样本引导回真实值。相比之下,虽然离散动作表示(例如,通过标记化)功能强大,但它们通常需要自回归解码,这在推理时速度慢且效率低下。而流匹配则允许**直接、非自回归地预测连续动作**,从而实现高精度的实时控制。

更直观地说,在训练过程中,我们对机器人的真实动作序列添加随机噪声,并要求模型预测“校正向量”,将其带回到正确的轨迹。这在动作空间上形成了一个平滑的向量场,帮助模型学习准确和稳定的控制策略。

我们通过采用**交错注意力块**的 Transformer 架构(参见图 2)来实现这一点,并将其隐藏尺寸减小到 **VLM 的 75%**,以保持模型轻量化,便于部署。

效率和鲁棒性设计选择

将视觉-语言模型与动作预测模块相结合是最近 VLA 系统(如 Pi0、GR00T、Diffusion Policy)中的常见设计模式,我们确定了几种显著增强鲁棒性和性能的架构选择。在 SmolVLA 中,我们应用了三项关键技术:**减少视觉标记数量、跳过 VLM 中的上层**,以及在动作专家中**交错使用交叉注意力和自注意力层**。

视觉标记缩减

高分辨率图像可以改善感知,但会显著减慢推理速度。为了取得平衡,**SmolVLA 在训练和推理期间将每个帧的视觉标记数量限制为 64 个**。例如,一个 512×512 图像被压缩成仅 64 个标记,**而不是 1024 个**,使用 **PixelShuffle** 作为一种高效的洗牌技术。虽然底层视觉-语言模型 (VLM) 最初使用图像平铺进行预训练以实现更广泛的覆盖,但 **SmolVLA 在运行时仅使用全局图像**,以保持推理轻量和快速。

通过层跳跃实现更快的推理

我们不总是依赖 VLM 的最后一层——这可能成本高昂,有时也不是最优的——而是使用**中间层的特征**。先前的工作表明,早期层通常为下游任务提供更好的表示。在 SmolVLA 中,动作专家在训练期间仅关注 VLM 特征,直到可配置的第 NN 层,该层设置为**总层数的一半**。这使得 VLM 和动作专家的**计算成本减半**,显著加快了推理速度,同时性能损失最小。

交错的交叉和自注意力

在动作专家内部,注意力层在以下两者之间交替:

  • **交叉注意力 (CA)**,其中动作标记关注 VLM 的特征
  • **自注意力 (SA)**,其中动作标记彼此关注(因果关系——仅关注过去)

我们发现这种**交错设计**比使用完整注意力块更轻量且更有效。仅依赖 CA 或仅依赖 SA 的模型往往会牺牲平滑性或基础性。

在 SmolVLA 中,CA 确保动作与感知和指令良好地关联,而 SA 改善了**时间平滑性**——这对于真实世界的控制尤其关键,因为不稳定的预测可能导致不安全或不稳定的行为。

异步推理

Asynchronous inference

图 3. 异步推理。异步推理堆栈的图示。请注意,策略可以在远程服务器上运行,可能带有 GPU。

现代视觉运动策略输出**动作块**——要执行的动作序列。有两种方法来管理它们:

  • **同步 (sync):**机器人执行一个动作块,然后暂停,等待下一个动作块的计算。简单,但会导致机器人无法对新输入做出反应的延迟。
  • **异步 (async):**在执行当前动作块的同时,机器人已经将最新观测值发送到**策略服务器**(可能托管在 GPU 上)以计算下一个动作块。这避免了空闲时间并提高了响应性。

我们的异步堆栈将动作执行与动作块预测解耦,从而实现了更高的适应性,并在运行时完全消除了执行延迟。它依赖于以下关键机制:

  • **1. 提前触发:**当队列长度低于阈值(例如 70%)时,我们向**策略服务器**发送观测值,请求新的动作块。
  • **2. 解耦线程:**控制循环持续执行 → 推理并行发生(非阻塞)。
  • **3. 块融合:**来自连续动作块的重叠动作通过简单的合并规则进行拼接,以避免抖动。

我们非常高兴发布异步推理,因为它保证了更高的适应性和改进的性能,而无需更改模型。简而言之,异步推理通过重叠执行和远程预测来保持机器人响应。

社区数据集

虽然视觉和语言模型在 LAION、ImageNet 和 Common Crawl 等网络规模数据集上表现出色,但机器人技术却缺乏可比的资源。没有“机器人互联网”。相反,数据分散在不同的机器人类型、传感器、控制方案和格式之间——形成不相连的“数据孤岛”。在我们之前的帖子中,我们探讨了如何通过开放、协作的努力来解决这种碎片化问题。正如 ImageNet 通过提供大型、多样化的基准数据集催生了计算机视觉领域的突破一样,我们相信**社区驱动的机器人数据集**可以在通用机器人策略中发挥同样的基础性作用。

**SmolVLA 是我们实现这一愿景的第一步**:它预训练于精选的公开可用的、社区贡献的数据集,这些数据集旨在反映真实世界的变化。我们不只优化数据集大小,而是侧重于多样性:各种行为、摄像机视角和形态,以促进迁移和泛化。

SmolVLA 中使用的所有训练数据均来自 **LeRobot 社区数据集**,这些机器人数据集在 Hugging Face Hub 上以 `lerobot` 标签共享。这些数据集在不同的环境中收集,从实验室到客厅,代表了扩展真实世界机器人数据的一种开放、去中心化的努力。

A glimpse of the community dataset.
图 4. 社区数据集的一瞥。特别感谢 Ville Kuosmanen 制作此可视化。与学术基准不同,社区数据集自然地捕捉了混乱、真实的交互:各种照明、次优演示、非常规物体和异构控制方案。这种多样性对于学习鲁棒的通用表示将非常有用。

我们使用由 Alexandre ChapinVille Kuosmanen 创建的自定义过滤工具,根据帧数、视觉质量和任务覆盖范围选择数据集。经过细致的手动审查(特别感谢 Marina Barannikov),我们整理了一系列**487 个高质量数据集**,重点关注 **SO100 机械臂**,并将其标准化为 **30 FPS**。这产生了大约**1000 万帧**——至少**比其他流行的基准数据集小一个数量级**,但多样性显著更高。

改进任务注释

社区数据集的一个常见问题是任务描述模糊或缺失。许多片段缺少注释或包含模糊的标签,如“task desc”或“Move”、“Pick”。为了提高质量并标准化数据集的文本输入,我们使用 Qwen2.5-VL-3B-Instruct 生成简洁、面向动作的描述。

给定样本帧和原始标签,模型被要求在 30 个字符以内重写指令,并以动作动词开头(例如,“抓取”、“放置”、“打开”)。

使用的提示是

Here is a current task description: {current_task}. Generate a very short, clear, and complete one-sentence describing the action performed by the robot arm (max 30 characters). Do not include unnecessary words.
Be concise.
Here are some examples: Pick up the cube and place it in the box, open the drawer and so on.
Start directly with an action verb like “Pick”, “Place”, “Open”, etc.
Similar to the provided examples, what is the main action done by the robot arm?

标准化相机视图

另一个挑战是相机命名不一致。有些数据集使用清晰的名称,如 top 或 wrist.right,而另一些则使用模糊的标签,如 images.laptop,其含义各不相同。为了解决这个问题,我们手动检查了这些数据集,并将每个相机视图映射到一个标准化方案:OBS_IMAGE_1:俯视图 OBS_IMAGE_2:腕部安装视图 OBS_IMAGE_3+:额外视角

我们进一步区分了社区数据集预训练和多任务微调的贡献。在没有 LeRobot 社区数据集预训练的情况下,SmolVLA 最初在 SO100 上取得了 **51.7%** 的成功率。在社区收集的数据进行预训练后,性能跃升至 **78.3%**,**绝对提升了 26.6%**。多任务微调进一步提升了性能,即使在数据不足的情况下也表现出强大的任务迁移能力。

表 1. 社区数据集预训练和多任务微调的影响。

结果

我们评估了 SmolVLA 在模拟和真实世界基准测试中的泛化能力、效率和鲁棒性。尽管它很紧凑,但它始终优于或匹配了在更大规模机器人数据上预训练的更大模型和策略的性能。

SmolVLA Performance on Simulation Benchmarks.

表 2. SmolVLA 在模拟基准测试中的性能。

SmolVLA vs Baselines on Real-World Tasks (SO100).

表 3. SmolVLA 与基准模型在真实世界任务(SO100)上的对比。

在实际应用中,SmolVLA 在两个不同的套件上进行评估:SO100 和 SO101。这些任务包括抓取-放置、堆叠和排序,包含分布内和分布外对象配置。在 SO101 上,SmolVLA 在泛化方面也表现出色。

Generalization of SmolVLA to New Embodiment (SO101) vs ACT..

表 4. SmolVLA 对新实施(SO101)与 ACT 的泛化能力。

最后,我们评估了 SmolVLA 在同步和异步推理模式下的表现。异步推理将动作执行与模型推理解耦,允许策略在机器人移动时做出反应。

  • 两种模式的任务成功率相似(≈78%),但异步推理
    • 任务完成**快约 30%** (9.7s vs. 13.75s)
    • 在固定时间设置下,可实现**2 倍的任务完成量**(19 个方块 vs. 9 个方块)

这带来了更灵敏、更鲁棒的真实世界性能,特别是在有移动物体或外部干扰的动态环境中。

Asynchronous vs. Synchronous Inference in Real-World Tasks.

图 5. 真实世界任务中的异步与同步推理。(a) 任务成功率 (%),(b) 平均完成时间 (s),以及 (c) 在固定时间窗口内完成的任务数量。

结论

SmolVLA 是我们为构建开放、高效且可复现的机器人基础模型所做的贡献。尽管尺寸小巧,但它在一系列真实世界和模拟任务中匹配甚至超越了更大、专有模型的性能。通过仅依赖社区贡献的数据集和经济实惠的硬件,SmolVLA 降低了研究人员、教育工作者和爱好者进入该领域的门槛。但这仅仅是个开始。SmolVLA 不仅仅是一个模型——它是向可扩展、协作式机器人技术迈进的日益壮大的开源运动的一部分。

行动号召:

  • 🔧 **试一试!** 在您自己的数据上微调 SmolVLA,将其部署到经济实惠的硬件上,或将其与您当前的堆栈进行基准测试,并在 Twitter/LinkedIn 上分享。
  • 🤖 **上传数据集!** 有机器人吗?使用 lerobot 格式收集并分享您的数据。帮助扩展为 SmolVLA 提供支持的社区数据集。
  • 💬 **加入博客讨论。** 在下面的讨论中提出您的问题、想法或反馈。我们很乐意帮助集成、训练或部署。
  • 📊 **贡献。** 改进数据集,报告问题,提出新想法。每一次贡献都有帮助。
  • 🌍 **传播开来。** 与对高效、实时机器人策略感兴趣的研究人员、开发人员或教育工作者分享 SmolVLA。
  • 📫 **保持联系:** 关注 LeRobot 组织Discord 服务器以获取更新、教程和新版本。

携手合作,我们可以让现实世界的机器人更强大、更实惠、更开放。✨

社区

🔥🔥🔥

如果观测和动作生成之间状态不断变化,异步推理机制如何工作?

·

我想,类似于控制网页浏览器的代理循环。观察以确定要采取的行动,采取行动,然后观察任何视觉变化以决定下一步做什么。重复直到实现目标。

超级有趣的工作!

👏

整个预训练数据集都是用 SO100 机械臂收集的吗?我粗略地查看了论文末尾列出的数据集,似乎所有这些数据集都是由 SO100 机械臂收集的。

如果是这样,那么在微调之后,您的模型可以在 LIBERO 中的其他机械臂(如 Franka)上工作,那将非常有趣。

·

如果没理解错的话,SmolVLA 声称纯 SO100 或 SO101 训练的模型可以直接应用于 LIBERO 中的不同机械臂?这似乎很难令人置信,希望作者能证实。

喜欢这项工作!我曾尝试加载策略并在 pushT gym 上使用它。然而,开箱即用时它似乎不理解它需要做什么,直接射向侧面。这正常吗?我还不熟悉机器人技术或 VLA,但我很感兴趣尝试一下。

我已经将我的移动 aloha 数据集转换为 lerobot 的格式以用于 Pi0,我可以使用它用于这个项目吗?

此评论已被隐藏(标记为已解决)

很棒的工作!如果我们想在 SO-101 机械臂上使用这个模型,我想我们需要做一些微调,因为每个机械臂都有自己的校准?(也就是说,模型不能直接使用,对吗?)

你好,
非常棒的工作。我想知道您是如何将需要 6 自由度作为输入(在 SO100 数据集上训练)的 smolvla 应用到具有 7 自由度(在 panda franka 上训练)的 Libero 数据集的。

提前谢谢你

注册登录 发表评论