Skip to main content

RPX

Same Scene, Different Story:
Evaluating Robot Perception Across Scene Phases in the Wild

Score a perception model on 100 real scenes recorded before, during and after manipulation,
and see where it breaks with phase robustness Φ and worst-phase quality 𝒥min.

PyPI version Python 3.10 to 3.12 Tests Toolkit docs Dataset on Hugging Face Docker images Source on GitHub

RPX overview: today each perception task is benchmarked on its own data; RPX captures every real-world scene four ways (Clutter, Interaction, Clean and an egocentric view) and scores six tasks on them (image depth, video depth, tracking, relative camera pose, general VQA, in-context VQA) with two diagnostics, phase robustness and worst-phase quality; 100 multi-object scenes, 70 single objects scanned in 360 degrees, and a D435 RGB-D, T265 stereo and pose, and GoPro egocentric rig with masks and object questionnaires.

Getting started

The rpx-benchmark package provides the data, an adapter per task, the paper's benchmark protocol, and the Φ and 𝒥min calculator. You write one function that runs your model.

pip install 'rpx-benchmark[hub,schemas]'

The example below scores an image-depth model on a 6-frame trial. The download fetches only this task's files (about 160 MB) and needs no login.

import numpy as np
import rpx_benchmark as rpx

# 1. Download the task's data
manifest = rpx.download_split("monocular_depth", "easy", max_samples=6)

# 2. Your model: RGB image (H, W, 3) in, depth (H, W) in metres out
def predict(rgb):
    return np.ones(rgb.shape[:2], np.float32)

# 3. Wrap it in the task's adapter and run the benchmark
model = rpx.make_numpy_depth_model(predict, name="my-model")
result, report, paths = rpx.run_monocular_depth(rpx.MonocularDepthRunConfig(
    model=model, manifest_path=str(manifest), output_dir="rpx_results/my-model",
))
print(result.aggregated["absrel"], result.aggregated["delta1"])

Φ and 𝒥min compare phases, so they need all three phases of many scenes. Drop max_samples to download the full tier, run the benchmark again, then:

from rpx_benchmark.examples.summarize_metrics import calculate, read_records

metrics = ["absrel", "rmse", "silog", "delta1"]
summary = calculate(read_records(paths["json"]), metrics)

To try any task before writing code, rpx.benchmark("T2", rpx.download("T2", max_samples=2)) runs it with a placeholder model.

Tasks

Every task follows the steps above with its own download name, adapter and runner.

Task Download Adapter and runner Paper metrics
T1 Image depth "monocular_depth" make_numpy_depth_model
run_monocular_depth
AbsRel, RMSE, SILog, δ1
T2 Video depth "video_depth" make_numpy_video_depth_model
run_video_depth
T1's, plus TGM, TGSE
T3 Object tracking "object_tracking" make_numpy_tracking_model
run_object_tracking
HOTA, MOTA, IDSW
T4 Relative camera pose "relative_camera_pose"* make_numpy_pose_model
run_relative_pose
AUC at 5°, 10°, 20°
T5 VQA rpx.download("T5") vqa.evaluate_vqa Acc@0.5, GIoU, center-in-GT
T6 In-context VQA rpx.download("T6") vqa.evaluate_vqa Acc@0.5, GIoU, center-in-GT

* Pass manifest_name="relative_pose" as well. Functions are under rpx; vqa is rpx_benchmark.vqa, and its models return text, so they need no adapter. dummy_models.py shows the inputs and outputs of every task.

Prefer the command line?
python -m rpx_benchmark.examples.benchmark_tasks \
    --task T1 --split easy --max-samples 6 --model my_model:predict

# Check the install without downloading anything
python -m rpx_benchmark.examples.benchmark_tasks --task all --smoke

To add a task or a metric, see the toolkit docs on tasks and metrics.

Model contracts and paper models

The table lists what your function receives and returns for each task, and the Docker image that contains every model the paper evaluated on it.

Task Input → output Paper's models, irvlutd/rpx:
T1 Image depth RGB (H, W, 3) → depth (H, W) in metres depth-zipdepth-latest (10)
T2 Video depth clip (T, H, W, 3) → depth (T, H, W) depth-zipdepth-latest (8)
depth-dvd-latest (DVD)
T3 Object tracking frame (H, W, 3) → [{"track_id", "boxes"}] tracking-dam4sam-rpx-latest (8)
T4 Relative camera pose (rgb_a, rgb_b) → {"rotation", "translation"} rcpe-monst3r-rpx-latest (10)
T5 VQA image path + question → JSON {"label", "bbox"} vqa-vllm (12)
T6 In-context VQA reference crop + image + question → same vqa-vllm (12)

dummy_models.py has a runnable placeholder for each row. Models that predict relative depth pass depth_output_kind="relative" to the adapter. The model guide documents the full input contracts, and the benchmark pages walk through each task with figures.

For T5 and T6, rpx.download("T5") returns a 58-question quick start and rpx.download("T5", full=True) the paper's full list (21,000 questions; 10,500 for T6). Pass either, or your own list, to evaluate_vqa; the next section covers models behind an API.

Always pull a specific tag: the bare irvlutd/rpx image is an unrelated legacy image. The Docker guide also covers the box- and text-prompted trackers and GemDepth, which ships as a build recipe only.

The generic T3 and T4 runners report per-sample errors. The paper's HOTA and pooled pose AUC come from the clip- and pair-level reference runners in benchmark/scripts.

Custom VQA model or API

Any local model or hosted API works as long as it returns text:

from rpx_benchmark.vqa import evaluate_vqa

def predict_vqa(image_paths, prompt, max_new_tokens, output_kind):
    # image_paths is (target,) or (reference_crop, target).
    # Return your model's raw text.
    ...

report = evaluate_vqa(
    "vqa_manifest.jsonl", predict_vqa,
    model_name="my-vlm", model_revision="v1",
    image_cache=".cache/rpx-vqa", output_dir="rpx_results/my-vlm",
)
print(report["metrics"]["bbox_accuracy_at_0_5"])

The reply should be one JSON object with label and bbox (XYXY, normalized to 0–1000). The model never sees the answers, and replies that fail to parse count as misses. The VQA guide explains how to prepare the manifest.

Results

In the paper, quality drops once hands enter the scene, and none of the 65 evaluations is both accurate and robust across phases.

RPX: the same real scene before, during and after manipulation and from an egocentric view; mean quality per view for video depth, tracking and VQA drops when hands enter the scene; none of the 65 evaluations in the paper reaches both worst-phase quality 0.75 and phase robustness 0.86; three steps: pip install rpx-benchmark, run your model, get phi and J-min.

Further reading

Testing

Run the test suite from a source checkout

From benchmark/ in a source checkout:

python -m pip install -e '.[dev,hub,schemas,hf-datasets,analysis,ar-pose-audit]' \
    imageio imageio-ffmpeg av transformers build
python -m pip install torch torchvision \
    --index-url https://download.pytorch.org/whl/cpu
TRACKEVAL=12c8791b303e0a0b50f753af204249e622d0281a
python -m pip install --no-deps \
    "git+https://github.com/JonathonLuiten/TrackEval.git@$TRACKEVAL"

pytest tests -q
ruff check rpx_benchmark tests scripts
mypy rpx_benchmark
python -m build

The tests never download checkpoints. Real-model checks run through the per-image GPU gates in the Docker guide.

Citation

@misc{rpx2026,
  title  = {Same Scene, Different Story: Evaluating Robot Perception Across
            Scene Phases in the Wild},
  author = {{Jishnu Jaykumar P} and Kadosh, Itay and Vijayakumar, Narendhiran and
            Kamath, Srinanditha and Allu, Sai Haneesh and Rangappa, Govind Tyagi and
            Maheshwari, Animesh and Wang, Jikai and Xiang, Yu},
  year   = {2026},
  note   = {Dataset: \url{https://huggingface.co/datasets/IRVLUTD/RPX}}
}

The toolkit is MIT-licensed and the dataset is CC BY 4.0. Pretrained models keep their own licenses.

Metadata

Release files for rpx-benchmark 0.3.7

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for rpx-benchmark 0.3.7
File Size Uploaded
rpx_benchmark-0.3.7.tar.gz 12.6 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for rpx-benchmark 0.3.7
File Interpreter ABI Platform
rpx_benchmark-0.3.7-py3-none-any.whl Python 3 none any Details

Total release size: 25.1 MB

Release files / rpx_benchmark-0.3.7.tar.gz

Download URL rpx_benchmark-0.3.7.tar.gz
Size 12.6 MB
Tags Source
SHA-256 checksum
How to use checksums
4d1d842853eb4d57b9fb0c815ef1270891ab2cca5f5d33cc010a99600900c0b9
BLAKE2b-256 checksum
How to use checksums
aba140316a3fc1e26347d7feb293c2c19f3d62813f664d03875c4bc983e92932
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

Release files / rpx_benchmark-0.3.7-py3-none-any.whl

Download URL rpx_benchmark-0.3.7-py3-none-any.whl
Size 12.5 MB
Tags Python 3
SHA-256 checksum
How to use checksums
36b08c1cb5074c01f245a13ee5bb2dd90466f0ef7dd7d9d258731ec55c762867
BLAKE2b-256 checksum
How to use checksums
174f2a2e888c9458e5420c6b1269dcfeabaa7634e34f9ff047f9052bd24ec2c3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.3.7 This release

2 release files

0.3.6

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page