LIBERO-100数据集多模态构成解析
·
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 文件。")
运行此代码,你将能直接看到任务的自然语言描述、演示数据的维度(如观测图像序列的长度和形状)以及动作序列的维度,从而对数据集的具体内容有一个量化的认识 。
参考来源
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)