lerobot中use_relative_actions=True需要重新计算meta/stats.json等信息 目录1 问题说明2 recompute_stats的具体计算逻辑2.1 统计信息的存储位置2.2 默认计算路径2.3 relative action 的定义2.4 合法 chunk 的筛选2.5 relative_exclude_joints2.6 为什么同一个action会被多次统计2.7 计算哪些统计量2.8 为什么普通路径要跳过action2.9 参数要求1 问题说明默认情况下π 0.5 \pi_{0.5}π0.5​输出的是绝对动作。启用relative actions后模型将预测相对于机器人当前状态的动作增量而不是绝对目标动作。在某些任务或机器人配置下这种方式能够提升训练的稳定性。如果要使用相对动作首先需要使用命令行工具CLI重新计算数据集在相对动作空间下的统计信息。lerobot-edit-dataset\--repo_idyour_dataset\--operation.typerecompute_stats\--operation.relative_actiontrue\--operation.chunk_size50\--operation.relative_exclude_joints[gripper]\--push_to_hubtrue或者使用 Python 的等效实现如下fromlerobot.datasetsimportLeRobotDataset,recompute_stats datasetLeRobotDataset(your_dataset)recompute_stats(dataset,relative_actionTrue,chunk_size50,relative_exclude_joints[gripper])dataset.push_to_hub()chunk_size应与策略模型的chunk_size参数保持一致π 0.5 \pi_{0.5}π0.5​的默认值为 50。relative_exclude_joints用于指定哪些关节仍采用绝对动作表示而不转换为相对动作例如夹爪的开合控制。如果需要将更新后的数据集统计信息上传到Hugging Face Hub请添加参数--push_to_hub true。然后在训练时启用相对动作lerobot-train\--dataset.repo_idyour_dataset\--policy.typepi05\--policy.use_relative_actionstrue\--policy.relative_exclude_joints[gripper]\...2 recompute_stats的具体计算逻辑代码位置src/lerobot/datasets/dataset_tools.py中的recompute_stats()函数。它用于重新计算 LeRobot 数据集的全局统计信息并写入meta/stats.json它不会修改原始数据文件也不会更新data/**/*.parquet meta/episodes/**/*.parquet2.1 统计信息的存储位置数据集中有两类 stats文件内容主要用途meta/stats.json整个数据集的全局统计量训练时 action/state 的归一化meta/episodes/**/*.parquet每个 episode 的局部统计量数据集录制、聚合、子集等元数据操作训练实际读取的是dataset.meta.stats其来源为meta/stats.json。因此recompute_stats()的目标是修正或重建全局训练统计而不是回写 episode 元数据中的历史 stats。2.2 默认计算路径函数先从dataset.meta.features筛选需要统计的数值特征numeric_features{k:vfork,vinfeatures.items()ifv[dtype]notin[image,video,string]andknotin{index,episode_index,task_index,frame_index,timestamp}}默认skip_image_videoTrue因此只重新计算数值特征例如action observation.state 其他数值 observation随后它会读取data/**/*.parquet按episode_index切分每个 episode为每个 feature 计算 episode 内的min/max/mean/std/quantiles将所有 episode 的统计聚合为数据集全局统计写入meta/stats.json对于普通 absolute action逻辑相当于stats[action] statistics(all absolute actions)relative_actionTrue的计算逻辑当以下条件都成立时函数会改用相对动作的方式计算action statsrelative_actionisTrueACTIONinfeatures OBS_STATEinfeatures也就是说数据集至少必须同时包含action observation.state2.3 relative action 的定义对于一个 action chunk其起始帧为t长度为Kaction chunk: [a_t, a_(t1), ..., a_(tK-1)] current state: s_t相对动作定义为relative_action(t, j) action(t j) - state(t)其中j 0, 1, ..., K - 1重点是chunk 内所有未来 action 都减去 chunk 起始帧的 state。它不是action(t j) - state(t j)而是action(t j) - state(t)这与 action-chunk policy 的训练输入一致模型基于当前状态state(t)预测未来连续K步动作。2.4 合法 chunk 的筛选假设chunk_size 3episode 0 的帧为0, 1, 2, 3, 4则合法 chunk 为起点 0 - [0, 1, 2] 起点 1 - [1, 2, 3] 起点 2 - [2, 3, 4]如果 episode 1 从帧 5 开始则下面的 chunk 无效起点 3 - [3, 4, 5] 起点 4 - [4, 5, 6]因为它们跨越了 episode 边界。实现仅比较 chunk 首尾帧的episode_indexvalidepisode_indices[starts]episode_indices[startschunk_size-1]一个长度为L的 episode 可提供的合法 chunk 数量为max(L - chunk_size 1, 0)2.5relative_exclude_joints默认情况下relative_exclude_joints[gripper]这意味着名称中包含gripper的 action 维度不做相对化仍保留绝对值。例如action_names [shoulder, elbow, wrist, gripper] relative_mask [1, 1, 1, 0]含义1 - action - state 0 - 保持原 action若state(t) [10, 20, 30, 0.4]原始 action chunk 为a_t [11, 19, 31, 0.5] a_(t1) [13, 18, 34, 0.6] a_(t2) [16, 17, 38, 0.7]转换后relative a_t [1, -1, 1, 0.5] relative a_(t1) [3, -2, 4, 0.6] relative a_(t2) [6, -3, 8, 0.7]前三个关节维度减去起始 stategripper 维度保持绝对值。若 action metadata 中没有action.names代码无法按名称识别 gripper此时掩码会默认使全部维度相对化。2.6 为什么同一个action会被多次统计chunk 使用滑动窗口因此相邻 chunk 会重叠。例如帧 2 会出现在chunk [0, 1, 2]: action(2) - state(0) chunk [1, 2, 3]: action(2) - state(1) chunk [2, 3, 4]: action(2) - state(2)虽然是同一个绝对 action但参考 state 不同所以它们是不同的相对动作样本。最终参与统计的样本数量是合法 chunk 数 × chunk_size这刻意模拟了训练中所有可能的「当前 state 未来 action chunk」组合。2.7 计算哪些统计量所有相对 action chunk 会被展平为(num_valid_chunks × chunk_size, action_dim)并逐维计算min max mean std count q01 q10 q50 q90 q99其中 quantile 使用运行中的直方图近似计算。最终结果写入meta/stats.json - action2.8 为什么普通路径要跳过action普通统计路径会针对原始数据计算statistics(absolute action)但启用相对动作训练后模型接收到的是statistics(action - chunk_start_state)这两个分布通常不同不能混用。因此在相对 action stats 计算完成后代码会执行features_to_compute.pop(ACTION,None)避免后续普通的逐 episode absolute-action 统计覆盖相对 action 的结果。最后结构为meta/stats.json: observation.state: # 原始绝对 state 的统计量 action: # 相对 action 的统计量 # relative_exclude_joints 的维度仍是绝对 action 统计量2.9 参数要求chunk_size应与训练 policy 的 action chunk 长度一致recompute_stats(dataset,relative_actionTrue,chunk_sizepolicy.chunk_size,)若两者不同计算 stats 时的相对 action 分布与训练时实际输入模型的分布不一致可能导致归一化不正确。

相关新闻

最新新闻

3分钟搞定Windows和Office永久激活:KMS智能激活终极指南

3分钟搞定Windows和Office永久激活:KMS智能激活终极指南

3分钟搞定Windows和Office永久激活:KMS智能激活终极指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统激活烦恼吗?Office突然变成只读模式让你无法正…

2026/7/15 14:24:38
免费AI音频处理完全指南:在Audacity中解锁专业级AI功能

免费AI音频处理完全指南:在Audacity中解锁专业级AI功能

免费AI音频处理完全指南:在Audacity中解锁专业级AI功能 【免费下载链接】openvino-plugins-ai-audacity A set of AI-enabled effects, generators, and analyzers for Audacity. 项目地址: https://gitcode.com/gh_mirrors/op/openvino-plugins-ai-audacity …

2026/7/15 14:24:38
深度逆向工程实战:Beyond Compare 5授权密钥生成器完整技术解析

深度逆向工程实战:Beyond Compare 5授权密钥生成器完整技术解析

深度逆向工程实战:Beyond Compare 5授权密钥生成器完整技术解析 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen Beyond Compare 5作为业界领先的文件比较工具,其授权验证…

2026/7/15 14:24:38
MaterialLeanBack适配器完整指南:从基础到高级使用技巧

MaterialLeanBack适配器完整指南:从基础到高级使用技巧

MaterialLeanBack适配器完整指南:从基础到高级使用技巧 【免费下载链接】MaterialLeanBack A beautiful leanback port for Smartphones and Tablets 项目地址: https://gitcode.com/gh_mirrors/ma/MaterialLeanBack MaterialLeanBack是一款专为智能手机和平…

2026/7/15 14:24:38
解决FanMenu集成难题:常见问题与性能优化技巧大全

解决FanMenu集成难题:常见问题与性能优化技巧大全

解决FanMenu集成难题:常见问题与性能优化技巧大全 【免费下载链接】fan-menu Menu with a circular layout based on Macaw 项目地址: https://gitcode.com/gh_mirrors/fa/fan-menu FanMenu是一款基于Macaw的圆形布局菜单组件,为iOS应用提供优雅的…

2026/7/15 14:24:38
隔离DC/DC电源模块技术演进与核心设计要素

隔离DC/DC电源模块技术演进与核心设计要素

1. 隔离DC/DC电源模块的技术演进脉络十年前我刚入行时,工程师们还在用分立元件搭建隔离电源——光耦、变压器、MOS管散落在PCB上,布板时得小心翼翼处理爬电距离。如今打开TI的官网,看到UCC33420这类集成模块把整个隔离电源系统塞进8mm8mm的封…

2026/7/15 14:19:38

月新闻