多样性评测算子
功能概述
数据集多样性评测算子用于对机器人轨迹数据集进行全面多样性评估与分析,从指令、技能、物体、场景、空间等多个维度衡量数据集的丰富程度和覆盖范围,帮助判断数据集是否足以支撑高质量的模型训练。
核心能力:
- 指令多样性:评估任务指令中动词-宾语组合的丰富度。
- 技能多样性:评估操作技能(pick、place、grab 等)的覆盖程度。
- 物体类别多样性:评估数据集中涉及的物体类别丰富度。
- 物体实例多样性:评估同一类别下具体物体实例的丰富程度。
- 场景多样性:评估场景环境的丰富程度(需相机图像)。
- 本体多样性:评估机器人形态的多样性。
- 末端执行器空间覆盖:分析末端执行器在3D工作空间中的覆盖程度。
- 抓取位姿分布:分析抓取动作时末端执行器的位姿分布。
- 操作物体空间分布:分析机器人与物体交互时的空间位置分布。
- 轨迹长度分布:分析episode长度的分布特征。
输入:LeRobot 格式数据集目录(支持 V3 和 V2.1,自动识别并转换)、机器人描述文件(URDF)和 YAML 配置文件
输出:PDF 格式的多样性评测报告 + 包含 3D 交互可视化内容的压缩包(tar.gz,内含 HTML 交互页面和 JSON 结果数据)
支持机型:如表1所示。
输入说明: 数据集与配置文件
数据集目录结构说明
多样性评测算子支持LeRobot V2.1和V3两种格式的数据集。输入路径可以是包含 meta 文件夹的父目录,也可以是meta文件夹所在的层级目录。
LeRobot V3格式:
<dataset_dir>/ # 数据集根目录(输入路径)
├── data/
│ └── chunk-000/
│ ├── episode_000000.parquet # 轨迹数据
│ ├── episode_000001.parquet
│ └── ...
├── meta/
│ ├── info.json # 数据集基本信息(版本、帧率等)
│ ├── stats.json # 数据统计信息
│ ├── tasks.parquet # 任务定义(parquet 格式)
│ └── episodes/ # Episode 元信息目录
└── videos/ # 视频数据
├── observation.images.front/
├── observation.images.wrist_left/
└── observation.images.wrist_right/ LeRobot V2.1格式:
<dataset_dir>/ # 数据集根目录(输入路径) ├── data/ │ └── chunk-000/ │ ├── episode_000000.parquet # 轨迹数据 │ ├── episode_000001.parquet │ └── ... ├── meta/ │ ├── info.json # 数据集基本信息(版本、帧率等) │ ├── tasks.jsonl # 任务定义(jsonl格式) │ ├── episodes.jsonl # Episode 元信息 │ └── episodes_stats.jsonl # Episode 统计信息 ├── images/ # 图像数据(图片序列) │ ├── observation.images.front/ │ ├── observation.images.wrist_left/ │ └── observation.images.wrist_right/ └── videos/ # 视频数据(可选)
目前仅支持单数据集输入。
配置文件结构
多样性评测使用 YAML 配置文件定义机器人参数、数据字段映射和启用的指标列表。从界面上选择的机器人描述文件夹需包含
├── r1_robot.urdf ├── r1_robot.yml
配置文件yml包含以下主要部分:
# 基础配置(所有机器人共享)
# 默认配置
default_config: r1_config # 默认使用的机器人特定配置,可选r1_config或者so101_config。如果填了r1_config,则使用星海图r1的配置。
_base_config:
data_fields:
camera_head:
field_path: observation.images.head # 相机图像路径
source_type: observation # 来源类型:observation(观测数据)
state:
field_path: observation.state
source_type: observation
task_descriptions:
field_path: tasks.index # 任务指令路径(若使用subtasks则改为 subtasks.index)
source_type: meta # 来源类型:meta(元数据)
metrics: ... # 指标定义与启用的指标列表, 可以参考指标配置(metrics)。
robots: ... # 机器人关节映射等信息(R1、SO101),可以参考机器人定义(robots)提供的预制的robots内容
video_backend: pyav # 视频后端
# 机器人特定配置(继承基础配置并覆盖差异部分)
r1_config:
extends: _base_config
data_fields:
camera_head:
field_path: observation.images.front # R1 使用前置相机
so101_config:
extends: _base_config
data_fields:
camera_head:
field_path: observation.images.up # SO101 使用上方相机
数据字段映射(data_fields)
_base_config中的data_fields默认定义了camera_head, state, 以及task_descriptions。metric中的指标如果使用了data_fields的值,比如task_description,则说明该指标依赖task_description项。 field_path指定数据在LeRobot数据集中的路径,source_type指定数据来源类型(observation表示观测数据,meta 表示元数据)。
_base_config:
data_fields:
camera_head:
field_path: observation.images.front
source_type: observation
state:
field_path: observation.state
source_type: observation
task_descriptions:
field_path: tasks.index
source_type: meta
metrics:
instruction_diversity:
data_fields: [task_descriptions] # 使用 task_descriptions 字段
description: 指令多样性 - 评估动宾组合的多样性 | 字段名 | 说明 | source_type | R1 路径 | SO101 路径 |
|---|---|---|---|---|
| camera_head | 头部相机图像 | observation | observation.images.front | observation.images.up |
| state | 关节状态 | observation | observation.state | observation.state |
| task_descriptions | 任务指令文本 | meta | tasks.index | tasks.index |
如果LeRobot数据集使用了subtasks能力(即任务包含子任务分解),task_descriptions的field_path需要改为subtasks.index,而非tasks.index。
r1:
angles_in_degrees: false # 关节角单位为弧度
vertical_axis: z # 竖直轴为Z轴
desktop_axes: xy # 桌面平面为XY平面
high_value_is_open: true # 夹爪值越大越张开
urdf_path: <urdf文件路径>
chains:
left_arm:
end_effector: left_gripper_link
gripper_index: 6
joints:
- left_arm_joint1
- left_arm_joint2
- left_arm_joint3
- left_arm_joint4
- left_arm_joint5
- left_arm_joint6
right_arm:
end_effector: right_gripper_link
gripper_index: 13
joints:
- right_arm_joint1
- right_arm_joint2
- right_arm_joint3
- right_arm_joint4
- right_arm_joint5
- right_arm_joint6
fk_chains: [left_arm, right_arm] # 如果数据集只使用了左臂,可以将right_arm删除,以及删除chains字段里关于右臂的内容和mapping字段里关于右臂的相关内容
state_layout:
state_size: 14 # 状态向量维度(6左臂关节 + 1左夹爪 + 6右臂关节 + 1右夹爪)
mapping:
left_arm_joint1: 0
left_arm_joint2: 1
left_arm_joint3: 2
left_arm_joint4: 3
left_arm_joint5: 4
left_arm_joint6: 5
left_gripper: 6
right_arm_joint1: 7
right_arm_joint2: 8
right_arm_joint3: 9
right_arm_joint4: 10
right_arm_joint5: 11
right_arm_joint6: 12
right_gripper: 13 SO101机器人配置:
so101:
angles_in_degrees: true # 关节角单位为角度
vertical_axis: z
high_value_is_open: true
urdf_path: <urdf文件路径>
chains:
arm:
end_effector: gripper_frame_link
gripper_index: -1 # 无独立夹爪索引
joints: [shoulder_pan, shoulder_lift, elbow_flex, wrist_flex, wrist_roll]
fk_chains: [arm]
state_layout:
state_size: 6 # 状态向量维度(5关节 + 1夹爪)
mapping:
shoulder_pan: 0
shoulder_lift: 1
elbow_flex: 2
wrist_flex: 3
wrist_roll: 4
gripper: 5 metrics:
# ── 任务属性指标(通用) ──
skill_diversity:
data_fields: [task_descriptions]
description: "技能多样性 - 评估操作技能的丰富程度"
object_category_diversity:
data_fields: [task_descriptions]
description: "物体类别多样性 - 评估物体类别的丰富程度"
instruction_diversity:
data_fields: [task_descriptions]
description: "指令多样性 - 评估动宾组合的多样性"
object_instance_diversity:
data_fields: [task_descriptions]
description: "物体实例多样性 - 评估具体物体实例的丰富程度"
trajectory_length_distribution:
data_fields: []
description: "轨迹长度分布 - 分析episode长度的分布特征"
embodiment_diversity:
data_fields: [task_descriptions]
description: "本体多样性 - 评估机器人形态的多样性"
# ── 场景/图像指标 ──
scene_diversity:
data_fields: [camera_head]
description: "场景多样性 - 评估场景环境的丰富程度(需要相机图像)"
# ── 空间分布指标(需要 FK) ──
grasping_pose_distribution:
data_fields: [state]
description: "抓取位姿分布 - 分析抓取动作时末端执行器的位姿分布"
end_effector_spatial_coverage:
data_fields: [state]
description: "末端执行器空间分布 - 分析机器人末端执行器在3D工作空间中的空间覆盖程度"
manipulation_object_spatial_distribution:
data_fields: [state, camera_head]
description: "操作物体空间分布 - 分析机器人与物体交互时的空间位置分布"
planes:
xy: true
xz: false
yz: false
show_episode_labels: false
save_grasping_images:
enabled: true
data_field: "camera_head"
当指标依赖项data_fields在数据集缺失。算子会跳过该指标,作业不会失败。用户日志或全量报告中会显示缺失指标项以及修复建议。
输出指标说明
共 10 项多样性指标,分为语义多样性、空间多样性、统计分布三类。
语义多样性
- 技能多样性(skill_diversity)
评估数据集中操作技能的丰富程度。将动词归一化为标准技能类别后统计分布。
表4 技能多样性指标 指标
说明
unique_skills
归一化后的唯一技能数
total_samples
总样本数
max_frequency / min_frequency
最高/最低技能频率
mean_frequency
平均技能频率
tail_distribution_ratio
长尾分布比例(尾部技能占比)
top10_concentration
Top 10 技能集中度
skill_frequency
各技能的频率分布
示例输出: 12种唯一技能(pick: 30、place: 41、grab: 18 等),Top 10集中度0.9836。
- 物体类别多样性(object_category_diversity)
评估数据集中涉及的物体类别丰富程度,支持超类(superclass)映射。
表5 物体类别多样性指标 指标
说明
all_specific_categories
所有具体物体类别列表
all_superclasses
所有超类列表
object_mapping
具体类别到超类的映射
- 物体实例多样性(object_instance_diversity)
表6 物体实例多样性指标 指标
说明
total_unique_instances
唯一物体实例总数
total_unique_categories
唯一类别总数
mean_instances_per_category
每类别平均实例数
max_instances_in_category
单类别最大实例数
instance_frequency
各实例的出现频率
category_to_instances
类别到实例的映射
示例输出: 5 个唯一实例(red plug、box、gray box、pink box、purple box),2 个类别。
- 场景多样性(scene_diversity)
表7 场景多样性指标 指标
说明
all_scenes
所有场景标签列表
scene_similarities
各场景间的相似度分数
- 本体多样性(embodiment_diversity)
表8 本体多样性指标 指标
说明
unique_robot_bodies
唯一机器人形态数
total_task_types
总任务类型数
robots
各机器人的详细信息(名称、类型、自由度、episode 数、任务数)
空间多样性
- 抓取位姿分布(grasping_pose_distribution)
表10 抓取位姿分布指标 指标
说明
chains
分析的运动链
rotation_representation
旋转表示方式(euler)
grasping_axis
抓取轴(x)
grasping_poses
各 episode 抓取时刻的位姿(位置 + 欧拉角 + 四元数 + 抓取方向)
HTML交互报告中包含3D散点图和方向箭头,用于展示可视化抓取位姿的空间分布。
- 操作物体空间分布(manipulation_object_spatial_distribution)
表11 操作物体空间分布指标 指标
说明
coordinate_frame
坐标参考系
data_source
数据来源(forward_kinematics)
manipulation_points
各episode操作时刻的3D坐标点
统计分布
轨迹长度分布(trajectory_length_distribution)
分析episode长度的分布特征。
| 指标 | 说明 |
|---|---|
| mean / std / median | 均值、标准差、中位数(帧数) |
| min / max | 最小/最大帧数 |
| q25 / q50 / q75 / q90 / q95 | 各分位数 |
| iqr | 四分位距 |
| mean_seconds / std_seconds | 以秒为单位的均值和标准差(假设fps=10) |
| total_episodes | 总episode数 |
| total_frames | 总帧数 |
示例输出: 均值454帧(45.4秒),标准差41帧,中位数455帧,范围344~546帧。
PDF报告结构
最终生成的PDF报告包含的章节如表13所示。
| 章节 | 内容 |
|---|---|
| 数据集概览 | 数据集名称、样本量等基本信息 |
| 指令多样性分析 | 动词-宾语组合分布柱状图与统计 |
| 技能多样性分析 | 技能频率分布与集中度分析 |
| 物体类别与实例多样性 | 物体类别、实例的丰富度统计 |
| 场景多样性分析 | 场景环境丰富度评估 |
| 本体多样性分析 | 机器人形态多样性 |
| 空间覆盖分析 | 末端执行器、抓取位姿、操作物体的空间分布 |
| 轨迹长度分布 | episode长度分布直方图与统计量 |
HTML交互报告
解压tar.gz后,在浏览器中打开index.html可查看交互式报告。交互报告的特点如下:
- 3D 可视化:末端执行器空间覆盖、抓取位姿分布、操作物体空间分布均提供3D散点图,支持旋转、缩放、平移。
- 悬浮提示:鼠标悬浮在数据点上可查看episode编号、帧索引、坐标值等详细信息。
- 分指标页面:每个指标独立一个HTML页面,通过主页index.html导航访问。