十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

LeRobot 如何训练 SARM 奖励模型并选择标注模式?

LeRobot 如何训练 SARM 奖励模型并选择标注模式? LeRobot 如何训练 SARM 奖励模型并选择标注模式【免费下载链接】lerobot LeRobot: Making AI for Robotics more accessible with end-to-end learning项目地址: https://gitcode.com/GitHub_Trending/le/lerobot如果你的 LeRobot 数据集里混有犹豫、修正和参差不齐的轨迹直接做行为克隆会把低质量帧同等对待。SARMStage-Aware Reward Modeling是一个基于视频的奖励建模框架给定视频帧和任务描述它预测机器人距离完成任务的进度0→1。在 LeRobot 中你可以按docs/source/sarm.mdx给出的流程完成三件事选择标注模式、训练 SARM 奖励模型、可视化预测结果文档还给出了可选的 RA-BC 加权策略训练作为下一步。前提是已按 LeRobot 的安装指南装好 LeRobot并且你的数据集在 HuggingFace Hub 上包含任务文本和至少一个相机视频流。先选标注模式single_stage、dense_only 还是 dual训练前唯一的分叉点就是--policy.annotation_mode它决定了进度标签如何计算对应三个模式模式需要的标注模型头适用场景single_stage无仅 sparse简单任务、快速实验、没有可用的 VLMdense_only仅 denseVLM 生成双头sparse 自动生成想要细粒度子任务跟踪但不需要定义高层阶段dualsparse denseVLM 生成双头复杂多阶段任务两种粒度都有用三个模式的具体行为single_stage整段 episode 被视为单一阶段task进度在 episode 时长内从 0 线性增长到 1。不需要任何标注流程最短训练 → 可视化 →可选RA-BC。dense_only只用 VLM 生成细粒度dense标注sparse 头自动使用覆盖整段的单一task阶段。流程标注dense→ 验证 → 训练 → 可视化。dualVLM 同时生成高层sparse和细粒度dense标注即 SARM 论文的完整双头设置。流程标注sparsedense→ 验证 → 训练 → 可视化。文档给出的选型建议先用single_stage做快速实验任务没有清晰高层阶段、但需要细粒度进度时用dense_only复杂任务中粗细两种粒度都有意义时用dual。准备环境安装 LeRobot 之后再安装 SARM 依赖对应 pyproject.toml 中的sarmextra包含 transformers、pydantic、matplotlib、qwen-vl-utils 等依赖pip install -e .[sarm]每个训练样本至少需要task字符串任务描述数据集中的policy.image_key图像和policy.state_key状态。主路径single_stage 直接训练没有标注需求时跳过标注步骤模型会用 episode 的任务描述自动计算线性进度。将命令中的your-username/your-dataset和your-username/your-model-name替换为你自己的 HuggingFace 数据集 repo ID 和模型名lerobot-train \ --dataset.repo_idyour-username/your-dataset \ --policy.typesarm \ --policy.annotation_modesingle_stage \ --policy.image_keyobservation.images.base \ --output_diroutputs/train/sarm_single \ --batch_size32 \ --steps5000 \ --wandb.enabletrue \ --wandb.projectsarm \ --policy.repo_idyour-username/your-model-name关键参数文档默认值参数说明默认值--policy.annotation_modesingle_stage、dense_only或dualsingle_stage--policy.image_key图像所用相机 keyobservation.images.top--policy.state_key关节状态 keyobservation.state--policy.n_obs_steps观测历史步数总观测帧数 n_obs_steps 18--policy.frame_gap采样观测之间的帧间隔30 fps 下 30 ≈ 1 秒30多卡训练在命令前加accelerate launch --multi_gpu --num_processes4。可选路径用 VLM 生成标注dense_only / dual如果任务有明显的子阶段用 VLM 生成标注。标注脚本是 subtask_annotation.py。dense_only只传--dense-only和逗号分隔的细粒度子任务名sparse 阶段自动生成python src/lerobot/data_processing/sarm_annotations/subtask_annotation.py \ --repo-id your-username/your-dataset \ --dense-only \ --dense-subtasks Bring robot arms up from starting position,Grab near side and do 1st fold,Grab side and do 2nd fold,Grab side and do 3rd fold to finish folding \ --video-key observation.images.base \ --num-workers 4 \ --push-to-hubdual同时提供高层和细粒度子任务名python src/lerobot/data_processing/sarm_annotations/subtask_annotation.py \ --repo-id your-username/your-dataset \ --sparse-subtasks Bring arms up from starting position,Fold the towel (3 folds in total) \ --dense-subtasks Bring robot arms up from starting position,Grab near side and do 1st fold,Grab side and do 2nd fold,Grab side and do 3rd fold to finish folding \ --video-key observation.images.base \ --num-workers 4 \ --push-to-hub常用参数--model指定 VLM默认Qwen/Qwen3-VL-30B-A3B-Instruct--num-workers为并行 GPU 工作进程数默认 1--episodes只标注指定 episode 索引默认全部--skip-existing跳过已有标注的 episode--num-visualizations控制标注完成后自动可视化的 episode 数默认 5设 0 跳过。标注完成后会写入这些内容可用于核对是否落盘成功meta/temporal_proportions_sparse.json与meta/temporal_proportions_dense.jsondense_only 模式下 sparse 文件为自动生成的{task: 1.0}episodes/*.parquet中每 episode 的*_subtask_names、*_subtask_start_frames、*_subtask_end_frames及对应的时间列。验证标注与训练结果验证标注用--visualize-only重新跑标注脚本生成带子任务边界叠加的视频帧和子任务时间线dense_only 模式传--visualize-type densedual 模式传--visualize-type bothpython src/lerobot/data_processing/sarm_annotations/subtask_annotation.py \ --repo-id your-username/your-dataset \ --visualize-only \ --visualize-type both \ --num-visualizations 5 \ --video-key observation.images.base \ --output-dir ./subtask_viz如果可视化显示标注不准把子任务描述改得更具体后重跑。文档建议的子任务命名做法具体用 grab near side and fold toward center 而不是 fold并且在所有 episode 中保持一致的命名。验证训练训练完成后用 compute_rabc_weights.py 加--visualize-only查看模型预测若可用还会叠加标注得到的 GT 目标需要--stride 1不会写 parquet 文件。--head-mode与标注模式对应single_stage 用sparsedense_only 用densedual 用bothpython -m lerobot.rewards.sarm.compute_rabc_weights \ --dataset-repo-id your-username/your-dataset \ --reward-model-path your-username/sarm-model \ --visualize-only \ --num-visualizations 5 \ --head-mode sparse \ --output-dir ./sarm_viz可视化包含三部分预测进度曲线progress plot、预测阶段概率的堆叠面积图、以及带进度/阶段标签的 episode 关键帧。--stride可以每 N 帧计算一次、其余帧插值默认 1 即每帧都算。下一步可选用 RA-BC 训练策略SARM 训练好之后文档给出的延伸用途是 Reward-Aligned Behavior CloningRA-BC用 SARM 预测的进度增量给训练样本加权高进度样本权重大、负进度样本被降权。目前支持 RA-BC 的策略为 PI0、PI0.5 和 SmolVLA。分两步python -m lerobot.rewards.sarm.compute_rabc_weights \ --dataset-repo-id your-username/your-dataset \ --reward-model-path your-username/sarm-model \ --head-mode sparse \ --num-visualizations 5 \ --push-to-hub该脚本处理全部帧、把进度值存到数据集旁的sarm_progress.parquet列包括index、episode_index、frame_index、progress_sparse、progress_dense并生成前 N 个 episode 的可视化。--push-to-hub会把进度文件上传到数据集仓库不需要时不要加。然后训练策略进度文件会从数据集路径自动发现lerobot-train \ --dataset.repo_idyour-username/your-dataset \ --policy.typepi0 \ --sample_weighting.typerabc \ --sample_weighting.head_modesparse \ --sample_weighting.kappa0.01 \ --output_diroutputs/train/policy_rabc \ --batch_size32 \ --steps40000kappa是高质量样本的阈值delta kappa的样本直接取权重 10 ≤ delta ≤ kappa走软权重delta 0权重为 0。默认值 0.01 是按论文 T-shirt 折叠任务约 90 秒 episode、30 fps调的对自己的数据集训练中监控 WandB 的sample_weight_mean_weight健康范围 0.3–0.8≈1.0 说明 kappa 过低、RA-BC 退化成普通 BC、sample_weighting/delta_mean应为正和sample_weighting/delta_std再据此调整 kappa。限制SARM 输入依赖数据集里真实存在的task、图像 key 和状态 key--policy.image_key与标注时的--video-key要指向同一个相机。dense_only和dual模式依赖 VLM 标注默认模型是Qwen/Qwen3-VL-30B-A3B-Instruct需要 GPU 资源。RA-BC 的质量完全取决于 SARM 本身的质量如果数据集本身质量均匀一致文档指出 RA-BC 带来的收益有限。完整流程、公式推导和引用信息见 docs/source/sarm.mdx处理器实现见 processor_sarm.py。【免费下载链接】lerobot LeRobot: Making AI for Robotics more accessible with end-to-end learning项目地址: https://gitcode.com/GitHub_Trending/le/lerobot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表