Skip to main content

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.

PyPI Python 3.10–3.12 Tests Docs Dataset Docker MIT license

Score any perception model on the same real scenes, before, during and after manipulation.
Six tasks, one evaluator, and the paper's robustness diagnosis, in a few lines of Python.


Why RPX?

The usual way With RPX
Each task is benchmarked on its own static images Six tasks are scored on the same 100 real scenes
A scene is recorded once, in one state Every scene is recorded before, during and after manipulation, plus an egocentric view
One accuracy number hides where a model breaks Φ (phase robustness) and 𝒥min (worst-phase quality) show it
Comparing a new model means re-implementing protocols Wrap your function or API; RPX applies the paper's data, splits and metrics

Quick start

pip install 'rpx-benchmark[hub,schemas]'
python -m rpx_benchmark.examples.benchmark_tasks --task all --smoke --output rpx-check

Runs all six evaluators on tiny synthetic inputs in about a second, on CPU:

RPX smoke check: synthetic inputs, CPU, real evaluators
  T1  Image depth              1 samples   AbsRel 0.050 · δ1 1.000            → rpx-check/T1/results
  T2  Video depth              1 samples   AbsRel 0.026 · TGM 0.000           → rpx-check/T2/results
  T3  Object tracking          1 samples   MOTA 1.000 · IDSW 0.000            → rpx-check/T3/results
  T4  Relative camera pose     1 samples   Rot° 0.000 · Transl° 0.000         → rpx-check/T4/results
  T5  VQA grounding            1 samples   Acc@0.5 1.000 · GIoU 1.000         → rpx-check/T5/results
  T6  In-context VQA           1 samples   Acc@0.5 1.000 · GIoU 1.000         → rpx-check/T6/results
Done: 6 task(s) ran end to end; full results under rpx-check/.

Score your own model on real RPX scenes

import numpy as np
import rpx_benchmark as rpx

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

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",
    max_samples=6, output_dir="rpx_results/my-depth",
))
print(result.aggregated["absrel"], result.aggregated["delta1"])

The first run downloads about 160 MB and takes under a minute. Only the files this task needs are fetched, never the whole 237 GB dataset. Remove max_samples to score the full Easy tier (33 scenes × 3 phases).

Get the paper's diagnosis

Run a full tier, then turn its per-sample results into Φ and 𝒥min:

python -m rpx_benchmark.examples.summarize_metrics \
  --input rpx_results/my-depth/result.json \
  --metrics absrel rmse silog delta1 --output rpx_results/my-depth/phi.json
# prints:  my-depth / monocular_depth: Φ …   Jmin …
#          (33 scenes; J per phase: clutter …  interaction …  clean …)

Φ needs all three phases of many scenes, so it is not available from a 6-frame trial run.


Six tasks

Task Wrap your model with Run it with Paper metrics
T1 Image depth make_numpy_depth_model run_monocular_depth AbsRel · RMSE · SILog · δ1
T2 Video depth make_numpy_video_depth_model run_video_depth T1 metrics + TGM · TGSE
T3 Object tracking make_numpy_tracking_model run_object_tracking HOTA · MOTA · IDSW
T4 Relative camera pose make_numpy_pose_model run_relative_pose AUC@5° · @10° · @20°
T5 VQA grounding a predict_vqa callable rpx_benchmark.vqa.evaluate_vqa Acc@0.5 · GIoU · Center-in-GT
T6 In-context VQA the same callable, two images rpx_benchmark.vqa.evaluate_vqa Acc@0.5 · GIoU · Center-in-GT

Everything is under rpx unless named in full. The generic T3 and T4 runners report per-sample tracking and pose errors; the paper's HOTA and pooled AUC come from the clip- and pair-level reference runners in the repository. Each task has an illustrated walkthrough in the benchmark samples.

Reference models

Every model in the paper except GemDepth (build recipe only) ships in a ready-to-pull Docker image. Pull the final image for your task; it already contains every earlier model of that task.

Task Image Models
T1, T2 irvlutd/rpx:depth-zipdepth-latest all 10 image-depth and 8 video-depth models
T2 irvlutd/rpx:depth-dvd-latest DVD
T3 irvlutd/rpx:tracking-dam4sam-rpx-latest 8 mask-initialized trackers (box- and text-prompted runs use their own images)
T4 irvlutd/rpx:rcpe-monst3r-rpx-latest all 10 pose models
T5, T6 irvlutd/rpx:vqa-vllm all 12 vision-language models

The Docker guide lists every image and model, and how to run each one.

Bring your own model

A model is any Python function, local or a call to an inference API. Wrap it with the task's factory (table above); RPX loads the inputs, calls your function, and scores the outputs exactly as in the paper. Shapes and units are in each factory's docstring and in the model guide. The toolkit also includes segmentation, detection, open-vocabulary detection, grounding, sparse-depth and keypoint-matching runners: rpx_benchmark.tasks.available_tasks() lists them.

Custom VQA model or API

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"])

Return one JSON object with label and bbox (XYXY, normalized to 0–1000). The evaluator never shows your model the answers; parse failures count as misses. The VQA guide explains manifest preparation.

More tools

Testing

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
python -m pip install --no-deps \
  'git+https://github.com/JonathonLuiten/TrackEval.git@12c8791b303e0a0b50f753af204249e622d0281a'
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}}
}

Toolkit code: MIT. Dataset: CC BY 4.0. Pretrained models keep their own licenses.

Metadata

Release files for rpx-benchmark 0.3.5

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.5
File Size Uploaded
rpx_benchmark-0.3.5.tar.gz 10.5 MB Details

Built distribution (wheel)

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

Total release size: 20.9 MB

Release files / rpx_benchmark-0.3.5.tar.gz

Download URL rpx_benchmark-0.3.5.tar.gz
Size 10.5 MB
Tags Source
SHA-256 checksum
How to use checksums
3816aa80162f829da67b9aa400d78eb0c26d1fb8be3208117b8fe6e05e50c644
BLAKE2b-256 checksum
How to use checksums
b021591203afd0f98ff6bc00ca474975ac24daf358155b9f4151d54f28998b24
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 9, 2026.

Transparency log

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

Download URL rpx_benchmark-0.3.5-py3-none-any.whl
Size 10.4 MB
Tags Python 3
SHA-256 checksum
How to use checksums
5af66f837622cb97a0cea097d43a63cdd30e9c3130a7a4eda51e2baad2e0a096
BLAKE2b-256 checksum
How to use checksums
9d4500f917362c5f8631b418164f1bc016056455894fa4bc47032daf9d0ba97c
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 9, 2026.

Transparency log

Release history Release notifications | RSS feed

0.3.7

2 release files

0.3.6

2 release files

This release

0.3.5 This release

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