CoolFace
Datasetpublic

IRVLUTD/RPX

RPX: Robot Perception X RPX is a real-world RGB-D benchmark for measuring robot perception across scene changes. The canonical naren/all release combines the multi-object, egocentric, single-object, VQA, and tracking metadata that previously lived on separate dataset branches. Code and benchmark toolkit: github.com/IRVLUTD/RPX Recommended dataset revision: naren/all (pin the commit SHA printed by your download for reproducible results) License: Creative Commons Attribution 4.0… See the full description on the dataset page: https://huggingface.co/datasets/IRVLUTD/RPX.

sourceHugging Facecc-by-4.0updated 1d agoView on Hugging Face
4likes1.7kdownloads
Dataset Card

RPX: Robot Perception X

RPX is a real-world RGB-D benchmark for measuring robot perception across scene changes. The canonical naren/all release combines the multi-object, egocentric, single-object, VQA, and tracking metadata that previously lived on separate dataset branches.

<video controls muted loop playsinline width="100%" src="https://huggingface.co/datasets/IRVLUTD/RPX/resolve/main/assets/rpx-jumbotron.mp4"></video>

What is included

CollectionCoveragePublished modalities
Multi-object scenes (MOS)100 scenes × 3 phases × 250 frames = 75,000 framesRGB, depth, fisheye stereo, 6-DoF camera pose, instance masks and annotation metadata
Egocentric views (Ego)100 scenes, 23,121 indexed framesRGB, instance masks and tracking metadata
Single-object scans (SOS)70 selected objects × 500 frames = 35,000 framesRGB, depth, fisheye stereo, camera pose, masks and annotation metadata
VQA ground truth4,529,322 single-image questionsattribute, spatial-bbox and spatial-binary tasks
In-context VQA749,083 two-image questionsMOS/Ego attribute transfer and MOS spatial reasoning
Runnable VQA subset31,500 questions, plus a 104-row acceptance setdeterministic bbox-output evaluation manifests
Tracking text vocabulary70 objects and 2,739 scene-condition entriesstable IDs, canonical names and fixed text prompts

manifest/frames_v1.parquet is the canonical frame inventory. It contains 133,121 unique frame records and accurately marks absent Ego depth, fisheye, pose and auxiliary-mask modalities. manifest/frames_v2.parquet is retained only as historical metadata; it is incomplete and is not referenced by the active release index.

Get started

Install the benchmark package from the matching code branch:

bash
git clone --branch naren/all https://github.com/IRVLUTD/RPX.git
cd RPX
python3 -m venv .venv
. .venv/bin/activate
python -m pip install -e './benchmark[hub,schemas]'
hf auth login

Download only the files needed for one task:

python
from rpx_benchmark.dataset_hub import download_for_task

result = download_for_task(
    task="segmentation",
    split="easy",
    repo_id="IRVLUTD/RPX",
    revision="naren/all",
)
print(result.local_dir, result.matched_scenes)

Equivalent CLI:

bash
python -m rpx_benchmark.dataset_hub.cli download \
  --task segmentation --split easy \
  --repo-id IRVLUTD/RPX --revision naren/all

Do not clone or download the complete 237 GB repository for a single benchmark. The toolkit reads the task manifest and fetches the required shards.

How RPX works

Each MOS scene is captured in three phases:

PhaseDirectoryMeaning
Clutter0 / phase0objects in a difficult, unorganized state
Interaction1 / phase1a person interacts with the scene
Clean2 / phase2the same scene after organization

The Effort-Stratified Difficulty (ESD) protocol assigns each of the 300 scene phases to easy, medium, or hard using the perception difficulty and annotation effort recorded in splits/scene_splits.json. Use the phase-level files in splits/ for MOS evaluation. Ego captures do not participate in ESD.

Task manifests under manifests/<task>/<split>.json identify samples and modalities. The benchmark downloads the corresponding archive shards, runs a reference model or user adapter, and reports task performance, robustness across phases, and compute cost. VQA uses its deterministic JSONL manifests and keeps answers inside the evaluator.

Tasks

TaskInputsGround truth or output target
Monocular and video depthRGB image or clipmetric depth
Stereo depthfisheye pairmetric depth
Instance segmentationRGB, optionally depthinstance mask
Object detection / open-vocabulary detectionRGB, optionally textboxes, labels and scores
Object trackingRGB clip, optionally a fixed text vocabularypersistent object tracks
Relative camera posetwo RGB or RGB-D framesrelative rotation and translation
Visual groundingRGB and textobject box
VQAone target image, or SOS reference crop plus target imagelabel and/or target-image box
SOS templatessingle-object RGB-D scanobject appearance, pose and mask library

The code package exposes ten generic task runners and a separate VQA evaluator. See the benchmark README for the supplied pretrained-model commands and environments.

Bring your own model or API

Custom models use the same loaders, splits and metrics as supplied models. Wrap a local model or remote inference service with a benchmark factory:

python
import rpx_benchmark as rpx
from my_model import predict_depth  # RGB ndarray -> metric-depth ndarray

model = rpx.make_numpy_depth_model(predict_depth, name="my-depth")
result, report, paths = rpx.run_monocular_depth(
    rpx.MonocularDepthRunConfig(
        model=model,
        split="easy",
        repo_id="IRVLUTD/RPX",
        revision="naren/all",
        output_dir="rpx_results/my-depth/easy",
    )
)
print(result.aggregated)

The package also provides factories and public runners for video depth, segmentation, detection, open-vocabulary detection, tracking, grounding, relative pose, sparse depth, and keypoint matching. Your wrapper owns authentication and service-specific configuration; the evaluator records predictions, errors, timing and provenance.

For VQA, provide a callable with this contract:

python
from rpx_benchmark.vqa import evaluate_vqa

# predict_vqa(image_paths, prompt, max_new_tokens, output_kind) -> raw text
report = evaluate_vqa(
    "vqa_manifest.jsonl",
    predict_vqa,
    model_name="my-vlm",
    model_revision="my-checkpoint-or-api-version",
    image_cache=".cache/rpx-vqa",
    output_dir="rpx_results/my-vlm",
)

Return one JSON object with label and bbox, where bbox is XYXY normalized to 0–1000; binary questions return yes or no. For two-image questions, image_paths is ordered (reference_crop, target), and the predicted box always refers to the target image. The evaluator never passes ground-truth answers or boxes to the model callable.

Identity and join rules

RPX uses separate identifiers because objects and masks have different scopes:

FieldScope and rule
global_object_idcanonical integer identity; unique and contiguous from 1 through 70
source_catalog_idoriginal catalog identity stored as a string; dotted values such as "18.2" must remain strings
object_idcanonical SOS folder key, for example boot.2
local_mask_id / mask_indexlocal to a scene condition; join with scene, view and phase before mapping to a global ID
sample_idstable identifier for a VQA record; never derive object identity from it

The source of truth is manifest/object_catalog_v1.json. Join MOS masks through manifest/mos_mask_object_map_v1.parquet; join tracking prompts through tracking/metadata/text_initialization_v1/scene_condition_vocab.parquet. Questionnaire paths and SOS paths in the object catalog resolve to the same canonical object.

Repository layout

text
assets/                         dataset-card media
manifest/                       canonical inventories, object catalog and checksums
manifests/<task>/<split>.json   executable benchmark sample manifests
objects/                        70 single-object scan shard trees
objects_meta/                   per-object metadata and questionnaires
preview/                        lightweight MOS and Ego previews
scenes/                         100 MOS phase trees and 100 Ego view trees
splits/                         ESD phase tables and scene-level provenance
tracking/metadata/              text-initialization vocabularies and checksums
vqa/                            full VQA Parquets and benchmark JSONL manifests

Large modalities are packed in tar shards. RGB and fisheye imagery use lossless WebP members; depth and masks use PNG; camera poses are (7,) float64 NPY vectors ordered [x, y, z, qx, qy, qz, qw]. Labels are versioned under labels/<name>/v<N>.tar.

VQA data

FileRowsPurpose
vqa/attribute.parquet3,241,564color, material, function, composition, count and related attribute questions
vqa/spatial_bbox.parquet543,017spatial questions with bbox answers
vqa/spatial_binary.parquet744,741left/right and above/below binary questions
vqa/incontext_mos_attribute_bbox.parquet317,873MOS two-image attribute transfer
vqa/incontext_ego_attribute_bbox.parquet113,193Ego two-image attribute transfer
vqa/incontext_mos_spatial_bbox.parquet318,017MOS two-image spatial reasoning

The runnable release manifest is vqa/metadata/benchmark_subset_v1/benchmark_available_31500.jsonl. benchmark_pending_4500.jsonl contains reserved descriptors, not runnable questions: Ego has no depth, so those spatial questions have not been fabricated. Published checksum and validation reports remain beside each VQA release.

Reproducibility and validation

  • Pin the resolved commit SHA for published results.
  • Verify downloaded files with the SHA-256 manifests under manifest/, vqa/metadata/, and tracking/metadata/.
  • Treat manifest/current.json as the active metadata index.
  • Preserve source_catalog_id as text when reading CSV; prefer JSON or Parquet when schema fidelity matters.
  • Use manifest/frames_v1.parquet for all frame discovery.

The consolidation preserves every file from main, then adds the complete VQA and tracking metadata trees from their source branches. manifest/release_naren_all_v1.json records source revisions, counts and the branch-level integrity audit.

Citation and license

If you use RPX, cite the accompanying paper. The final BibTeX entry will be added when the paper is released.

The RPX dataset is released under the Creative Commons Attribution 4.0 International (CC BY 4.0) license. You may share and adapt it with attribution. The benchmark code is distributed separately under the MIT license in the GitHub repository.