LIBERO-100 数据集是 LIBERO 基准平台中的一个核心任务套件,它由 100 个程序化生成的、多样化的机器人操作任务组成,旨在评估终身学习中的知识迁移能力 。其数据集的“样子”可以从数据内容、任务结构和文件组织形式三个维度来具体查看。

1. 数据内容与模态

LIBERO-100 数据集是一个多模态的视觉-语言-动作(VLA)数据集,每个任务样本通常包含以下数据 :

数据模态 具体内容与格式 说明
视觉观测 RGB 图像 通常来自固定视角的摄像头,分辨率多为 224x224或更高,用于提供场景的视觉信息 。
语言指令 自然语言任务描述 一句描述当前任务目标的文本,例如 “put the yellow block into the drawer” 。
动作数据 机器人本体感知与动作 包括机器人的关节状态(位置、速度等)和执行的连续动作(如末端执行器位移、夹持器开合)。
场景描述 PDDL文件 使用规划域定义语言(PDDL)描述任务的初始状态、目标状态和对象属性,用于程序化生成和逻辑推理 。
演示数据 高质量人类遥操作轨迹 每个任务都提供了由人类专家通过遥操作生成的成功演示轨迹,用于模仿学习 。

2. 任务结构与组织

LIBERO-100 的 100 个任务并非随机排列,而是被精心设计并分组,以系统化地评估不同类型的知识迁移 :

  • 知识迁移类型:这些任务主要围绕 空间物体目标 三种知识迁移范式进行组织 。
  • 任务分组:100 个任务被划分为多个任务序列(例如10 个序列,每个序列 10 个任务)。在终身学习实验中,模型会按顺序学习这些序列,以评估其应对灾难性遗忘和实现前后向知识迁移的能力 。

3. 文件目录结构示例

下载并解压 LIBERO-100 数据集后,其文件组织通常遵循如下结构,你可以通过查看此结构来直观理解数据集:

libero_dataset/
├── libero_100/
│   ├── task_1_open_the_middle_drawer/  # 任务1目录
│   │   ├── demonstrations/             # 演示数据│   │   │   ├── episode_0.hdf5         # 第0条演示轨迹(包含obs, actions等)
│   │   │   ├── episode_1.hdf5
│   │   │ └── ...
│   │   ├── bddl/                       # 任务逻辑描述
│   │   │ └── task_1.bddl            #基于PDDL的场景描述文件 
│   │ └── instruction.txt # 该任务的自然语言指令
│   ├── task_2_put_the_apple_in_the_bowl/ # 任务2目录
│   │   ├── demonstrations/
│   │   ├── bddl/
│   │ └── instruction.txt
│ └── ... (其余98个任务)
└── task_classification.json # 可选文件,描述任务所属的迁移类别和序列 

4. 数据查看代码示例

你可以使用以下 Python 代码快速加载并查看某个任务演示数据的基本信息:

import h5py
import json
import numpy as np

# 假设数据集路径
task_path = "./libero_dataset/libero_100/task_1_open_the_middle_drawer"

# 1. 查看任务指令
with open(f"{task_path}/instruction.txt", 'r') as f:
    instruction = f.read().strip()
print(f"任务指令: {instruction}
")

# 2. 查看一条演示轨迹的数据结构
demo_file = f"{task_path}/demonstrations/episode_0.hdf5"
with h5py.File(demo_file, 'r') as f:
    print("HDF5文件中的顶级键:", list(f.keys()))
    # 通常包含 'obs', 'actions', 'rewards' 等
    if 'obs' in f:
        obs = f['obs'][:]
        print(f"观测数据形状: {obs.shape}")  # 例如 (T, C, H, W) 或 (T, feature_dim)
        print(f"轨迹长度 (T): {len(obs)}")
    if 'actions' in f:
        actions = f['actions'][:]
        print(f"动作数据形状: {actions.shape}")  # 例如 (T, action_dim)

# 3. 查看任务分类信息(如果存在)
try:
    with open("./libero_dataset/task_classification.json", 'r') as f:
        task_class = json.load(f)
    print(f"
任务分类信息: {task_class.get('task_1_open_the_middle_drawer', '未找到')}")
except FileNotFoundError:
    print("
未找到 task_classification.json 文件。")

运行此代码,你将能直接看到任务的自然语言描述演示数据的维度(如观测图像序列的长度和形状)以及动作序列的维度,从而对数据集的具体内容有一个量化的认识 。


参考来源

 

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐