LeRobot documentation
Wall-OSS-0.5
Wall-OSS-0.5
Wall-OSS-0.5 是 XSquare Robot 推出的 4B 视觉-语言-动作模型。 它将 Qwen2.5-VL 视觉-语言骨干网络与连续流匹配动作专家相结合。
LeRobot 通过 wall_oss_05 策略类型和 lerobot/wall-oss-0.5 检查点提供 Wall-OSS-0.5。
wall_oss_05和现有的wall_x策略针对不同的 WALL 版本。 请使用wall_oss_05搭配 Wall-OSS-0.5 检查点。
模型概览
Wall-OSS-0.5 基于相机观测、机器人状态和自然语言任务来条件化动作生成。该策略通过流匹配预测一段连续动作。其视觉-语言专家还可以生成文本,用于字幕生成、视觉问答、定位以及语言子任务。
发布的模型使用:
- 26 维的规范状态和动作表示;
- 32 步动作块;
- q01/q99 范围归一化;
- 10 步流采样器;
- Qwen2.5-VL 用于视觉和语言输入。
基础检查点旨在部署前针对目标机器人和任务数据集进行微调。
LeRobot 集成涵盖的内容
- 标准
policy.type=wall_oss_05配置和 Hub 检查点加载。 - 原生 Qwen2.5-VL 视觉语言处理以及 Wall 动作专家。
- 连续 x-prediction 流训练和 10 步 Euler 采样。
- 基于配方(Recipe)的文本交叉熵以及文本/动作联合微调。
- 用于视觉问答、定位、字幕生成和语言子任务的原生文本生成。
- 通过 LeRobot 的交互式 rollout 直接生成文本。
- 使用 LeRobot q01/q99 处理器对 26D 状态和动作输入进行归一化。
- 使用
lerobot-train进行微调,并通过标准策略 API 进行推理。
安装要求
Wall-OSS-0.5 需要配备 CUDA 的 NVIDIA GPU。请安装带有策略依赖项的 LeRobot:
pip install "lerobot[wall_oss_05]"对于 LeRobot 源代码检出:
uv sync --extra wall_oss_05该策略在 LeRobot 中原生实现。其唯一的策略特定依赖项是 Transformers;无需单独检出 Wall-X。基于 Recipe 的处理还需要 dataset 额外依赖项。对于语言查询或训练,请安装 uv sync --extra wall_oss_05 --extra training(training 包含 dataset 支持)。对于仅处理动作且不使用 dataset 额外依赖项的情况,请设置 --policy.recipe=null。
检查点
| 变体 | LeRobot 检查点 | 预期用途 |
|---|---|---|
| Base 4B | lerobot/wall-oss-0.5 | Canonical 26D 微调和部署 |
该检查点包含策略配置、Qwen 处理器和分词器、模型权重、已保存的 LeRobot 预处理器/后处理器、归一化统计信息以及转换元数据。这是一个基础检查点:在报告任务级结果之前,请先在目标机器人和任务上对其进行微调。
用法
使用以下命令选择策略:
--policy.type=wall_oss_05
使用以下命令从 LeRobot 检查点初始化:
--policy.path=lerobot/wall-oss-0.5
在评估或部署已保存的 LeRobot 检查点时,请使用 --policy.path=your-org/your-finetuned-checkpoint。
文本和 VQA
Wall-OSS-0.5 使用共享的策略文本契约。运行时提供 query_kind 和 query_text,然后运行常规的策略输入处理器:
request = {
**observation,
"query_kind": "vqa",
"query_text": "Which object is closest to the right gripper?",
}
processed_batch = preprocessor(request)
answer = policy.generate_text(processed_batch)vqa 保留调用方的问题。next_subtask 应用由 WallOSS05Config 拥有的配方。该策略继承 generate_text(processed_batch) 并
重写 supports_text_generation 和 generate_text。生成过程使用检查点中绑定的 Qwen 词汇表头和视觉语言专家;它不会调用
独立的 VLM。
语言运行时可以生成一个子任务,然后基于该子任务来条件化 Wall 的动作预测:
lerobot-rollout \
--policy.path=your-org/your-finetuned-wall-oss-0.5 \
--policy.device=cuda \
--task="clear the table" \
--interactive=true在 /start 之后,使用 /vqa <question>、/autosteer <goal> 或 /subtask <text>。
Wall 保留了有用的具身 VQA 和定位能力,但它专为机器人观测而设计,并非旨在替代通用 VLM。
数据要求
Wall-OSS-0.5 内部采用标准的 26D 状态和动作布局。较窄的状态和动作特征会先根据其原生数据集的统计量进行归一化,然后零填充至 26D 以供模型使用。填充的动作维度会被排除在训练损失之外。在反归一化之前,输出会被裁剪至数据集的动作宽度:例如,8D 状态和 7D 动作将返回 7D 动作。postprocess_action_dim 可以应用额外的输出裁剪。填充不会重新映射关节坐标或控制器约定;请提供兼容的值。
使用 camera_key_mapping 配置图像输入。该映射将每个 LeRobot 图像特征与 Wall 相机插槽关联。默认检查点使用 face_view 和 right_wrist_view。
数据集任务字符串会作为语言指令传递给策略。 在记录、训练和评估时,请使用一致的任务描述。
状态和动作的 q01/q99 归一化由保存的 LeRobot 预处理器和后处理器处理。推理时会恢复与检查点一起保存的统计信息。使用 lerobot-train 进行微调时,训练数据集的统计信息会替换预训练处理器的统计信息,并与新的检查点一起保存。
已发布的检查点使用原生的 LeRobot 策略状态字典以及当前的预处理器/后处理器格式。权重通过共享的策略持久化代码进行加载和保存,其中包括分布式 gather 操作和主进程写入门控。配置保留了对稳定 tokenizer 资产的引用,并且可以从任意工作目录加载。
训练
使用标准的 LeRobot 训练命令对基础检查点进行微调:
训练命令示例
lerobot-train \ --dataset.repo_id=your-org/your-dataset \ --policy.path=lerobot/wall-oss-0.5 \ --policy.repo_id=your-org/wall-oss-0.5-your-task \ --output_dir=outputs/train/wall_oss_05 \ --job_name=wall_oss_05_finetune \ --policy.device=cuda \ --batch_size=1 \ --steps=20000
由于 Wall-OSS-0.5 是一个 4B 参数的模型,请从较小的 batch size 开始。 根据可用的 GPU 内存增加它,或者通过分布式训练配置使用梯度累积。
对于具有不同相机名称的数据集,请将其特征键映射到 Wall 的相机槽位。例如,为 top 和 wrist 添加以下选项:
--policy.camera_key_mapping='{"observation.images.top":"face_view","observation.images.wrist":"right_wrist_view"}'微调会从数据集中解析相机形状以及状态/动作宽度,包括使用 --policy.path 加载基础检查点时也是如此。
使用语言注释进行训练
WallOSS05Config 所拥有的配方默认使用 LeRobot 的可选语言列。其联合子任务配方在一个因果序列中同时监督助手响应和连续动作块:
lerobot-train \
--dataset.repo_id=your-org/your-language-annotated-dataset \
--policy.path=lerobot/wall-oss-0.5 \
--policy.use_language_recipe=true \
--policy.text_loss_weight=0.1 \
--policy.flow_loss_weight=1.0 \
--policy.device=cuda \
--batch_size=1 \
--steps=20000配方流决定了每个样本运行哪些目标:
- 针对特定助手回合,接收下一词元文本交叉熵;
low_level回合接收连续流动作监督;并且- 采用
low_level配方且包含目标助手轮次的样本会同时接收两种损失,其中动作标记会关注受监督的文本。
仅将目标助手负载及其 <|im_end|> 标记用作语言标签。用户提示、填充、图像、本体感觉以及连续动作查询标记均从文本交叉熵中屏蔽。未包含注释的行保留原始的动作专用提示和损失。设置 use_language_recipe=false 可禁用注释渲染,或设置 recipe=null 以同时禁用两个配方渲染器。显式指定的 recipe_path 会覆盖内置配方。全新微调会根据该配方和训练统计信息重建处理器;恢复训练和 rollout 则会恢复检查点中保存的处理器和统计信息。
请参阅 语言列和配方 了解注释模式和配方结构。recipe_path 可以指向显式的外部 YAML 覆盖文件;LeRobot 不提供共享的默认配方文件。
关键配置参数
| 参数 | 默认 | 描述 |
|---|---|---|
pretrained_name_or_path | lerobot/wall-oss-0.5 | 分词器和图像处理器资产来源 |
tokenizer_revision | None | 可选的基础分词器固定版本,独立于权重版本 |
chunk_size | 32 | 每个块预测的动作数量 |
n_action_steps | 32 | 在重新规划之前执行的预测动作数量 |
camera_key_mapping | 面部和右手腕视角 | 将图像特征键与模型相机槽位关联 |
use_language_recipe | true | 启用策略配置中存储的配方 |
recipe_path | None | 可选的显式外部配方覆盖 |
text_loss_weight | 0.1 | 用于监督助手标记交叉熵的权重 |
flow_loss_weight | 1.0 | 连续流-动作损失的权重 |
tokenizer_max_length | 1000 | 最大联合视觉-语言-动作标记序列长度 |
device | auto | 对 Wall-OSS-0.5 使用 cuda |
评估与推理
通过将其 Hub 仓库或本地目录作为策略路径传入,即可在标准的 LeRobot 评估或机器人 rollout 工作流中使用微调后的检查点。
Wall-OSS-0.5 使用其 flow sampler 生成连续的动作块。当前策略支持连续 flow 分支;自回归动作分支未对外暴露。
每个块(chunk)会对其相机图像进行编码,并一次性预填充(prefill)观测/文本前缀。十个欧拉步(Euler steps)会复用前缀的键(keys)和值(values),仅解码动作(action)标记。每当出现新的观测时,缓存都会被重建。
对于受支持的模拟器,请通过 lerobot-eval 提供微调后的检查点以及特定于环境的相关选项:
lerobot-eval \ --policy.path=your-org/your-finetuned-wall-oss-0.5 \ --policy.device=cuda \ --env.type=<environment> \ --env.task=<task> \ --eval.batch_size=1 \ --eval.n_episodes=10
不要将基础检查点当作特定任务的策略来评估。 其规范表示、归一化统计量和任务分布 必须与微调后的检查点相匹配。
参考
许可证
Wall-OSS-0.5 和 Wall-X 基于 Apache 2.0 许可证发布。
Update on GitHub