LeRobot 框架的核心架构概念和组件(上)

发布于:2025-05-14 ⋅ 阅读:(12) ⋅ 点赞:(0)

本文档概述构成 LeRobot 框架的核心架构概念和组件。它介绍主要的子系统,并解释它们如何相互作用以实现机器人学习。

系统架构概述

LeRobot 采用模块化架构设计,在提供统一的机器人学习接口的同时,也兼具灵活性。该框架的核心由四个主要子系统组成:
策略系统 - 实现各种机器人控制学习算法
数据集管理 - 处理机器人数据的存储、加载和预处理
环境接口 - 提供与模拟环境交互的抽象层
机器人控制系统 - 管理机器人物理硬件和控制模式

添加图片注释,不超过 140 字(可选)

工厂模式

LeRobot 框架广泛使用工厂模式来实例化主要组件。这种架构方法提供统一的接口,同时支持多种不同的实现和配置。

添加图片注释,不超过 140 字(可选)

策略系统

策略系统提供了统一的接口,用于创建和使用各种策略类型。每个策略实现都封装了一个用于机器人控制的特定学习算法,从基于 Transformer 的方法到扩散模型。所有策略共享一个通用的基类和接口,从而确保在整个框架内保持一致的使用方式。

策略系统通过一组工厂函数实现,这些函数用于处理策略实例的创建和配置。这些函数位于 lerobot/common/policies/factory.py 文件中。

策略创建过程

策略创建过程包含以下几个步骤:
策略类选择:get_policy_class 函数根据策略类型名称返回相应的策略实现类。
配置创建:make_policy_config 函数创建特定于所选策略类型的配置对象。
策略实例化:make_policy 函数使用以下方法实例化策略对象:

策​​略配置

从数据集或环境获取的特征维度
可选的预训练权重
特征处理
策略需要输入和输出特征维度的信息。这些信息可以通过以下方式获取:
数据集的元数据:在数据集上进行训练时,会从数据集中提取特征维度和统计信息。
环境配置:与环境一起使用时,会从环境配置中提取特征维度。
策略工厂负责将这些特征映射到每个策略的相应输入和输出规范。

支持的策略类型

LeRobot 支持多种策略类型,每种策略类型都实现了不同的机器人学习方法:

添加图片注释,不超过 140 字(可选)

策略配置

每种策略类型都有一个继承自 PreTrainedConfig 的专用配置类。这些配置类定义每种策略类型特有的超参和设置。

添加图片注释,不超过 140 字(可选)

配置参数

策略配置包括:
模型架构参数(维度、层数等)
训练专用参数
设备规格(CPU/GPU/MPS)
预训练模型路径(如果从检查点加载)

策略与训练流水线集成

策略通过工厂系统与训练和评估流水线集成。训练流水线负责加载数据集、创建策略、训练循环和评估。

添加图片注释,不超过 140 字(可选

训练配置

训练流水线通过 TrainPipelineConfig 配置,其中包括:
数据集配置
环境配置
策略配置
训练参数(批次大小、步长等)
评估参数
日志记录和检查点设置

输入/输出归一化

策略架构的一个关键特性是输入/输出归一化。策略可以根据数据集的统计数据对其输入和输出进行归一化,从而确保无论数据规模如何,都能进行一致的训练和推理。

添加图片注释,不超过 140 字(可选)

使用示例

策略系统在整个代码库中的各种脚本和示例中都有使用。以下是训练和评估中策略使用的示例:

训练示例

python lerobot/scripts/train.py
–policy.type=act
–policy.dim_model=64
–policy.n_action_steps=20
–policy.chunk_size=20
–policy.device=cpu
–env.type=aloha
–dataset.repo_id=lerobot/aloha_sim_transfer_cube_human
–batch_size=2
–steps=4
–eval_freq=2
–save_checkpoint=true

评估示例

python lerobot/scripts/eval.py
–policy.path=path/to/pretrained_model
–policy.device=cpu
–env.type=aloha
–eval.n_episodes=1
–eval.batch_size=1

LeRobot 的策略架构提供一个灵活且可扩展的框架,用于创建、训练和评估各种机器人学习策略。工厂模式确保不同策略类型的使用一致性,而配置系统则允许对每个策略的行为进行详细的自定义。

该架构支持从零开始训练和使用预训练模型,并与框架中的数据集和环境系统无缝集成。这种设计使研究人员和开发者能够在统一的框架内尝试不同的策略方法。

数据集管理

数据集系统提供了统一的接口,用于加载、处理和利用机器人演示数据。数据集管理系统处理多模态机器人数据,包括数值(状态、动作)、视觉数据(图像、视频)和任务描述。该系统充当数据收集和策略训练之间的桥梁。

LeRobotDataset 类

LeRobotDataset 是继承自 torch.utils.data.Dataset 的核心类,使其与 PyTorch 的数据加载实用程序兼容。它是加载、创建和操作机器人数据集的主要接口。

LeRobotDatasetMetadata 类

LeRobotDatasetMetadata 类管理与数据集相关的所有元数据,包括事件、特征、任务和统计数据。

创建数据集工厂

make_dataset() 工厂函数提供了一种标准化的方法来创建用于训练和评估流程的数据集。

数据集结构和组织

LeRobotDataset 遵循特定的文件组织结构,可以高效地处理不同模态的机器人数据。

添加图片注释,不超过 140 字(可选

分块(chunking)机制

数据集被划分为多个“块”,以便高效管理大量场景。每个块默认最多包含 1000 个场景,具体设置参见 lerobot/common/datasets/utils.py:
DEFAULT_CHUNK_SIZE = 1000 # Max number of episodes per chunk

这种分块方法可以:
部分下载数据集
改进大型数据集的组织
增量创建数据集

特征类型

LeRobot 数据集支持多种特征类型:

添加图片注释,不超过 140 字(可选)

创建和加载数据集

使用数据集工厂

推荐使用 make_dataset() 工厂函数创建用于训练的数据集:

添加图片注释,不超过 140 字(可选)

工厂函数的功能:
设置图像转换(如果指定)
根据策略配置解析 Delta 时间戳
配置适当的规范化
创建单个数据集或多个数据集

加载现有数据集

要加载现有数据集,只需使用以下存储库 ID 实例化 LeRobotDataset:

添加图片注释,不超过 140 字(可选)

如果本地不存在数据集,则会自动从 Hugging Face Hub 下载。

特征处理

Delta 时间戳

LeRobotDataset 的独特功能之一是通过“Delta 时间戳”处理时间偏移。这允许查询不同时间偏移下的观测值和操作。

在这里插入图片描述
delta 时间戳以字典形式指定,其中:
K 为特征键(例如“observation.state”、“action”)
V 是以秒为单位的时间偏移列表

示例:

添加图片注释,不超过 140 字(可选)

这允许策略访问时间上下文,这对于许多机器人任务至关重要。

图像变换

对于视觉数据,LeRobotDataset 支持通过 ImageTransforms 类进行变换。这可用于:
调整图像大小
数据增强
归一化

数据集可视化

LeRobot 提供两种主要的数据集可视化工具:

1 Rerun 可视化

脚本 visualize_dataset.py 使用 Rerun 库提供可视化功能。

添加图片注释,不超过 140 字(可选)

其特征:
episode 数据的交互式可视化
图像和视频显示
数值数据绘图
多种查看模式(本地、远程)

2 HTML/Flask 可视化

脚本 visualize_dataset_html.py 提供一个基于 Web 的可视化工具。

在这里插入图片描述

其特征:
用于浏览数据集的 Web 界面
同步视频播放
数值数据的交互式图表
episode 选择界面
与 Hugging Face Hub 集成
LeRobotDataset 与 Hugging Face Hub 集成,用于存储和共享数据集。
推送至 Hub
可以使用 push_to_hub() 方法将数据集推送至 Hugging Face Hub:

添加图片注释,不超过 140 字(可选)
此方法:
如果存储库不存在,则创建存储库
上传元数据文件
上传数据文件
上传视频(可选)
创建数据集卡片
使用版本信息标记数据集
从 Hub 拉取
使用存储库 ID 实例化 LeRobotDataset 时,数据集会自动从 Hub 拉取。系统会处理以下操作:
下载元数据
下载请求的剧集
下载所需视频(如有需要)
版本管理
LeRobotDataset 包含版本兼容系统,以确保旧版本创建的数据集仍然可以使用。
常用操作
在策略训练中的应用
LeRobotDataset 旨在与 PyTorch 的 DataLoader 集成,以实现高效的批量训练:

添加图片注释,不超过 140 字(可选)
访问特定 episodes
可以通过提供 episodes 参数来加载特定 episodes:

Load only episodes 0, 5, and 10

dataset = LeRobotDataset(“lerobot/pusht”, episodes=[0, 5, 10])
可视化数据集
使用提供的工具可视化数据集:

添加图片注释,不超过 140 字(可选)
LeRobot 中的数据集管理系统为处理机器人数据集提供了全面的解决方案。它能够处理各种数据模态,与 Hugging Face Hub 集成,并提供可视化工具来探索数据集内容。这种标准化的数据集格式确保 LeRobot 框架不同组件(从数据收集到策略训练)之间的互操作性。
LeRobotDataset
核心数据集类是 LeRobotDataset,用于从本地存储或 Hugging Face Hub 加载数据。它支持不同类型的机器人数据,包括:
摄像头观测数据(来自多个摄像头的图像)
机器人状态观测数据(关节位置、速度等)
动作数据(发送给机器人的控制命令)
其他元数据(事件信息、时间戳等)

添加图片注释,不超过 140 字(可选)
。。。。。。待续。。。。。。