更新时间:2026-08-05 GMT+08:00
分享

多样性评测算子

功能概述

数据集多样性评测算子用于对机器人轨迹数据集进行全面多样性评估与分析,从指令、技能、物体、场景、空间等多个维度衡量数据集的丰富程度和覆盖范围,帮助判断数据集是否足以支撑高质量的模型训练。

核心能力:

  • 指令多样性:评估任务指令中动词-宾语组合的丰富度。
  • 技能多样性:评估操作技能(pick、place、grab 等)的覆盖程度。
  • 物体类别多样性:评估数据集中涉及的物体类别丰富度。
  • 物体实例多样性:评估同一类别下具体物体实例的丰富程度。
  • 场景多样性:评估场景环境的丰富程度(需相机图像)。
  • 本体多样性:评估机器人形态的多样性。
  • 末端执行器空间覆盖:分析末端执行器在3D工作空间中的覆盖程度。
  • 抓取位姿分布:分析抓取动作时末端执行器的位姿分布。
  • 操作物体空间分布:分析机器人与物体交互时的空间位置分布。
  • 轨迹长度分布:分析episode长度的分布特征。

输入:LeRobot 格式数据集目录(支持 V3 和 V2.1,自动识别并转换)、机器人描述文件(URDF)和 YAML 配置文件

输出:PDF 格式的多样性评测报告 + 包含 3D 交互可视化内容的压缩包(tar.gz,内含 HTML 交互页面和 JSON 结果数据)

支持机型:如表1所示。

表1 支持机型

机器人

类型

自由度

说明

Galaxea R1

双臂

24 DOF(含夹爪)

左右臂各 6 关节 + 夹爪

SO101

单臂

6 DOF(含夹爪)

5 关节 + 夹爪

输入说明: 数据集与配置文件

数据集目录结构说明

多样性评测算子支持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: 指令多样性 - 评估动宾组合的多样性
表2 字段说明

字段名

说明

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。

机器人定义(robots)

R1机器人配置:

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)

每个指标需指定所需的数据字段和描述如下:

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 项多样性指标,分为语义多样性、空间多样性、统计分布三类。

语义多样性

  • 指令多样性(instruction_diversity)

    评估任务指令中动词-宾语(Verb-Object)组合的丰富度。

    表3 指令多样性指标

    指标

    说明

    unique_combinations

    唯一的动词-宾语组合数

    unique_verbs

    唯一的动词数

    unique_objects

    唯一的宾语数

    combination_distribution

    各组合的频率分布

    示例输出: 12 种唯一组合,11 种动词(pick、hold、grasp、seize、take、lift、grab、secure、clasp、snatch、retrieve),2 种宾语(box、plug)。

  • 技能多样性(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 数、任务数)

空间多样性

  • 末端执行器空间覆盖(end_effector_spatial_coverage)

    分析机器人末端执行器在3D工作空间中的空间覆盖程度,基于正向运动学(FK)计算。

    表9 末端执行器空间覆盖指标

    指标

    说明

    chains

    分析的运动链列表(如 left_arm、right_arm)

    coordinate_frame

    坐标参考系(robot_base)

    trajectory_count

    轨迹总数

    total_frames

    总帧数

    trajectories

    各 episode 的末端位置序列

    HTML交互报告中包含3D散点图,用于展示末端执行器在工作空间中的覆盖范围。

  • 抓取位姿分布(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长度的分布特征。

表12 轨迹长度分布指标

指标

说明

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所示。

表13 PDF报告结构

章节

内容

数据集概览

数据集名称、样本量等基本信息

指令多样性分析

动词-宾语组合分布柱状图与统计

技能多样性分析

技能频率分布与集中度分析

物体类别与实例多样性

物体类别、实例的丰富度统计

场景多样性分析

场景环境丰富度评估

本体多样性分析

机器人形态多样性

空间覆盖分析

末端执行器、抓取位姿、操作物体的空间分布

轨迹长度分布

episode长度分布直方图与统计量

HTML交互报告

解压tar.gz后,在浏览器中打开index.html可查看交互式报告。交互报告的特点如下:

  • 3D 可视化:末端执行器空间覆盖、抓取位姿分布、操作物体空间分布均提供3D散点图,支持旋转、缩放、平移。
  • 悬浮提示:鼠标悬浮在数据点上可查看episode编号、帧索引、坐标值等详细信息。
  • 分指标页面:每个指标独立一个HTML页面,通过主页index.html导航访问。

相关文档