Skip to content

[feat] make M3ED-SPOT provisionable - #158

Merged
vikuznetsov-nvidia merged 2 commits into
mainfrom
vikuznetsov/provision-m3ed-spot
Sep 8, 2026
Merged

[feat] make M3ED-SPOT provisionable#158
vikuznetsov-nvidia merged 2 commits into
mainfrom
vikuznetsov/provision-m3ed-spot

Conversation

@vikuznetsov-nvidia

@vikuznetsov-nvidia vikuznetsov-nvidia commented Sep 8, 2026

Copy link
Copy Markdown
Collaborator

The converter merged in #144 but m3ed_spot was absent from DATASETS, so nothing could build or upload its tarball. Register it with no EvalSpec, the same shape tum and icl_nuim had between their converter landing and their evaluation records.

Registering alone was not enough. Provisioning runs the registry on PYTHONPATH only, which is right for a standard-library module, but a converter is not one: convert_m3ed_spot imports numpy and Pillow at module scope and prepare() imports h5py to read the processed HDF5 products. In ubuntu:24.04 with a bare venv, which is what cuvslam-ci:local is, importing prepare fails with
ModuleNotFoundError: No module named 'numpy'.

Install the tools package before conversion rather than restating those dependencies per dataset in an image. They are already declared in tools/python_tools/pyproject.toml, so an image list would be the same duplication the dataset registry removed from the shell. Measured at 72 seconds and a 1.4 GiB venv against conversions that run for tens of minutes. The registry keeps its standard-library-only guarantee: it validates in that container with nothing installed.

M3ED therefore needs no dataset-specific image, and exposing it in the provisioning workflow is a one-line protected change.

Note for the next TartanGround run: provisioning now also installs the package inside the TartanAir image. pyproject pins numpy and scipy to the versions Dockerfile.dataset-provision already installs, so pip should not move them, but confirm with dry_run=true before relying on it.

Also stop using m3ed_spot as the unknown-dataset fixture. Registering a real corpus should not fail a test about error messages.

Summary by CodeRabbit

  • New Features

    • Added support for provisioning the M3ED Spot dataset, enabling it to be prepared through the dataset workflow.
    • Dataset preparation now automatically makes required conversion tools and dependencies available in temporary storage without modifying the checkout.
  • Tests

    • Updated dataset validation coverage to use a guaranteed-invalid dataset identifier, improving reliability when checking unknown datasets.

The converter merged in #144 but m3ed_spot was absent from DATASETS, so
nothing could build or upload its tarball. Register it with no EvalSpec,
the same shape tum and icl_nuim had between their converter landing and
their evaluation records.

Registering alone was not enough. Provisioning runs the registry on
PYTHONPATH only, which is right for a standard-library module, but a
converter is not one: convert_m3ed_spot imports numpy and Pillow at
module scope and prepare() imports h5py to read the processed HDF5
products. In ubuntu:24.04 with a bare venv, which is what
cuvslam-ci:local is, importing prepare fails with
ModuleNotFoundError: No module named 'numpy'.

Install the tools package before conversion rather than restating those
dependencies per dataset in an image. They are already declared in
tools/python_tools/pyproject.toml, so an image list would be the same
duplication the dataset registry removed from the shell. Measured at 72
seconds and a 1.4 GiB venv against conversions that run for tens of
minutes. The registry keeps its standard-library-only guarantee: it
validates in that container with nothing installed.

M3ED therefore needs no dataset-specific image, and exposing it in the
provisioning workflow is a one-line protected change.

Note for the next TartanGround run: provisioning now also installs the
package inside the TartanAir image. pyproject pins numpy and scipy to
the versions Dockerfile.dataset-provision already installs, so pip
should not move them, but confirm with dry_run=true before relying on it.

Also stop using m3ed_spot as the unknown-dataset fixture. Registering a
real corpus should not fail a test about error messages.
@coderabbitai

coderabbitai Bot commented Sep 8, 2026

Copy link
Copy Markdown

Review Change StackReview Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: 963650f9-7a1a-4aaf-8767-d4382cd3866a

📥 Commits

Reviewing files that changed from the base of the PR and between 5294d0e and 2a84034.

📒 Files selected for processing (2)
  • tools/python_tools/cuvslam_tools/dataset_registry.py
  • tools/python_tools/cuvslam_tools/tests/test_dataset_registry.py

Included review availability: Your plan provides up to 12 included reviews per hour; 10 remain after this review.


📝 Walkthrough

Walkthrough

The provisioning script now installs local Python tools temporarily. The dataset registry now includes the provisionable m3ed_spot dataset. The registry test uses a guaranteed-invalid identifier for unknown-dataset validation.

Changes

Dataset provisioning

Layer / File(s) Summary
Temporary Python tool installation
scripts/provision_dataset.sh
The script installs tools/python_tools with pip into a temporary location and cleans up the temporary copy.
m3ed_spot registration and lookup validation
tools/python_tools/cuvslam_tools/dataset_registry.py, tools/python_tools/cuvslam_tools/tests/test_dataset_registry.py
The registry adds m3ed_spot as provisionable without evaluation records. The unknown-dataset test now uses no_such_dataset.

Priority: ⬇️ Low

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk: ⚪ Minimal · up to 2a840

This change enables M3ED-SPOT provisioning by installing its local conversion tools and registering the dataset without evaluation records. The current changes preserve dataset lookup behavior and have no identified merge-blocking risk.

Suggested reviewers: slepichev

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 3 functions across 3 files. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the primary change: making the M3ED-SPOT dataset provisionable.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch vikuznetsov/provision-m3ed-spot

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown

Test Results

Status Platform Language Total Passed Failed Errors Skipped
Orin C++ 17 17 0 0 0
Orin Python 74 73 0 0 1
Thor C++ 17 17 0 0 0
Thor Python 74 73 0 0 1
x86_64 C++ 17 17 0 0 0
x86_64 Python 74 73 0 0 1

cuVSLAM Evaluation KPIs

Config Dataset ATE, % ARE, º/m Kabsch Losts diff ATE, % diff ARE, º/m diff Kabsch diff Losts FPS, Hz
x86_64-cuda12.6.3-ubuntu24.04 EUROC-VIO_ODOM 1.6501 0.1495 0.0960 0 0.0002 0.0000 0.0001 0 119.8
x86_64-cuda12.6.3-ubuntu24.04 EUROC-VIO_SLAM 1.7785 0.1925 0.0590 0 -0.0064 -0.0003 -0.0005 0 98.4
x86_64-cuda12.6.3-ubuntu24.04 ICL_NUIM-RGBD_ODOM 2.0240 0.3931 0.0323 0 NA NA NA NA 70.8
x86_64-cuda12.6.3-ubuntu24.04 ICL_NUIM-RGBD_SLAM 1.7855 0.3371 0.0270 0 NA NA NA NA 70.2
x86_64-cuda12.6.3-ubuntu24.04 KITTI-STEREO_ODOM 0.8149 0.0023 2.8494 0 0.0034 0.0000 0.0440 0 246.0
x86_64-cuda12.6.3-ubuntu24.04 KITTI-STEREO_SLAM 0.7220 0.0020 1.8342 0 -0.0050 0.0000 -0.0646 0 175.3

Artifacts

@vikuznetsov-nvidia
vikuznetsov-nvidia enabled auto-merge (squash) September 8, 2026 17:34
@vikuznetsov-nvidia
vikuznetsov-nvidia merged commit 69e2f29 into main Sep 8, 2026
7 checks passed
@vikuznetsov-nvidia
vikuznetsov-nvidia deleted the vikuznetsov/provision-m3ed-spot branch September 8, 2026 18:25
vikuznetsov-nvidia added a commit that referenced this pull request Sep 9, 2026
m3ed_spot has been provisionable since #158 but was unreachable: the
dispatch input is a static choice list, so a registry entry alone does
not appear in the UI.

It needs no dataset-specific image. The TartanAir toolbox image and the
x86-only runner guard are selected by literal equality with 'tartan', so
M3ED runs on cuvslam-ci:local, and provision_dataset.sh installs the
tools package that carries its numpy, Pillow and h5py.

CODa stays unlisted. Its preparation converts archives fetched by hand,
so a dispatch would fail without a pre-seeded raw directory.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

- **New Features**
- Added `m3ed_spot` as a selectable dataset option when provisioning
datasets.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
vikuznetsov-nvidia added a commit that referenced this pull request Sep 10, 2026
The converter landed in #144 and provisioning in #158 and #161, but
m3ed_spot carried no EvalSpec, so it never ran. Add one on
m3ed_spot-vo_slam.cfg, the combined config, with the stereo flags KITTI
and EuRoC use and an unrectified camera, since the EDEX keeps the
published polynomial distortion.

Full only. At 56 GiB staged and 57k frames evaluated in both modes it is
the most expensive record in the suite by a wide margin, and KITTI
already covers stereo pre-merge, so a PR would pay hours for nothing.
Smoke therefore stays KITTI, EuRoC and ICL-NUIM.

The 10 KPI entries are uncalibrated placeholders, as KITTI, EuRoC, TUM
and ICL-NUIM were seeded: expected=null reports SKIPPED under a soft
check. Their names come from dataset_registry kpi-keys, so the committed
table covers exactly the 50 keys the full suite can produce.

Merge after the provisioning run uploads m3ed_spot.tar. Staging resolves
the tarball from the registry, so until the object exists every
eval-enabled config fails before it evaluates anything.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

- **New Features**
- Added M3ED-SPOT as a full-suite evaluation dataset for stereo odometry
and SLAM performance.
- Added KPI baseline ranges to support performance tracking across
M3ED-SPOT evaluation metrics.

- **Tests**
- Updated evaluation coverage and validation checks to include M3ED-SPOT
in active dataset records and command-line reporting.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants