vlabench_primitive_etc
收藏资源简介:
VLABench Primitive ETC数据集是VLABench基准测试项目的组成部分,专门设计用于语言条件机器人操作和长时程推理任务的大规模评估。该数据集包含两个独立且自包含的子集:primitive和primitive_track2。核心数据由PNG格式的图像组成,以未压缩的tar/WebDataset风格分片存储,以优化存储和访问效率。每个子集都配有JSON格式的标注文件,通常分为训练集(jsons_train_final)和测试集(jsons_test_final)。通过index.jsonl文件提供详细的图像索引,包括图像ID、来源、原始路径、分片信息、分片内路径和文件大小。该数据集适用于机器人学、具身人工智能、视觉-语言模型以及语言条件操作等研究领域。使用时需根据具体子集定位索引和标注文件,以确保数据匹配。
The VLABench Primitive ETC dataset is part of the VLABench benchmarking project, designed to provide large-scale evaluation data for language-conditioned robot manipulation and long-horizon reasoning tasks. It consists of two independent and self-contained subsets: primitive and primitive_track2. The core data comprises PNG-format images stored in uncompressed tar/WebDataset-style shards to avoid storage and access overhead from numerous small files. Each subset includes corresponding JSON-format annotation files, typically organized as training sets (jsons_train_final) and test sets (jsons_test_final). The dataset provides detailed image indexing via an index.jsonl file, recording each images ID, source, original path, shard location, member path within the shard, and file size. It is suitable for research in robotics, embodied AI, vision-language models, and language-conditioned manipulation. Users must locate index and annotation files based on the specific subset (primitive or primitive_track2) to ensure correct data-annotation matching.
VLABench Primitive ETC 数据集概述
许可协议: MIT
标签: robotics, etc, vision-language, embodied-ai, vlabench, language-conditioned-manipulation
论文: arxiv 2412.18194
来源链接:
- 项目页面: https://vlabench.github.io/
- 论文: https://arxiv.org/abs/2412.18194
- 代码: https://github.com/OpenMOSS/VLABench
- 原始数据集: https://huggingface.co/datasets/VLABench/raw_primitive_datasets
数据集结构与内容
该数据集包含两个独立的部分,彼此互不合并:
- primitive/
- primitive_track2/
每个部分都是自包含的,在其对应目录下存储了各自的注释、PNG tar 分片、索引、预览和清单。
目录布局
vlabench_primitive_etc/ README.md manifest.json make_shards.log verify_shards.log
primitive/ annotations/ jsons_train_final/ jsons_test_final/ data/ shard_000000.tar shard_000001.tar ... previews/ preview_0000.png preview_0000.json ... index.jsonl manifest.json
primitive_track2/ annotations/ jsons_train_final/ jsons_test_final/ data/ shard_000000.tar shard_000001.tar ... previews/ preview_0000.png preview_0000.json ... index.jsonl manifest.json
scripts/ make_shards.py verify_shards.py
- 如果某个源部分不包含
jsons_test_final/,则该部分的目录下不会出现该文件夹。
关键设计
- PNG 图片存储方式: 图片以未压缩的 tar/WebDataset 风格分片(
.tar文件)存储,而非海量的独立 PNG 文件,这有助于规避 Hugging Face 仓库的提交速率限制,并减少小文件带来的开销。
索引格式
每个部分拥有自己的 index.jsonl 文件。文件中每一行描述该部分 tar 分片中的一张 PNG 图片,格式如下:
json {"id":0,"source":"primitive","original_path":"select_mahjong/episode_xxx/cam_0.png","shard":"data/shard_000000.tar","member":"select_mahjong/episode_xxx/cam_0.png","size":123456}
字段含义:
id:该部分内基于零的图片 ID。source:来源部分,值为primitive或primitive_track2。original_path:相对于该部分原始源根目录的路径。shard:相对于该部分目录的 tar 分片路径。member:tar 分片内部的成员路径。size:原始 PNG 文件的字节大小。
注释
注释也按部分分离,存放在以下目录中:
primitive/annotations/jsons_train_final/primitive/annotations/jsons_test_final/primitive_track2/annotations/jsons_train_final/primitive_track2/annotations/jsons_test_final/
注释中的原始图片路径需要根据对应部分的 index.jsonl 进行解析。例如,primitive/annotations/ 下的注释应使用 primitive/index.jsonl。
使用示例
以下提供两个 Python 代码片段示例,说明如何读取图片以及如何解析注释中的图片路径。
从一个部分读取一张 PNG 图片
python import io import json import tarfile from pathlib import Path
from PIL import Image
dataset_root = Path("/path/to/vlabench_primitive_etc") part = "primitive" # 或 "primitive_track2" part_root = dataset_root / part
with (part_root / "index.jsonl").open("r", encoding="utf-8") as f: record = json.loads(next(f))
with tarfile.open(part_root / record["shard"], "r") as tar: fileobj = tar.extractfile(record["member"]) image = Image.open(io.BytesIO(fileobj.read())) image.load()
print(part, record["original_path"], image.size)
解析注释中的图片路径
python import io import json import tarfile from pathlib import Path
from PIL import Image
dataset_root = Path("/path/to/vlabench_primitive_etc") part = "primitive" part_root = dataset_root / part
index = {} with (part_root / "index.jsonl").open("r", encoding="utf-8") as f: for line in f: item = json.loads(line) index[item["original_path"]] = item
annotation_file = part_root / "annotations/jsons_train_final/trajectory/trajectory_all_train.json" with annotation_file.open("r", encoding="utf-8") as f: samples = json.load(f)
image_path = samples[0]["image"][0] if image_path.startswith(part + "/"): image_path = image_path[len(part) + 1:]
record = index[image_path] with tarfile.open(part_root / record["shard"], "r") as tar: image_bytes = tar.extractfile(record["member"]).read() image = Image.open(io.BytesIO(image_bytes)) image.load()




