Skip to main content

olmoearth_inferenceX

Checks an Earth-observation map after inference: where it is likely wrong, how wrong it is, which part you can trust, and which of two maps is better.

It reads only the per-class scores a model writes out. It never runs the model and needs no torch, so it works on OlmoEarth's outputs, on other models' maps and on published products with a confidence layer, whatever the imagery type: Sentinel-1, Sentinel-2, Landsat, or other satellites. (Tested so far on maps made from Sentinel-1, Sentinel-2 and Landsat.)

Structure of olmoearth-inferenceX. Left: Sentinel-2 imagery goes through a model's encoder and decoder to its outputs, a class map and a confidence map. Right: the outputs are pooled to windows. Without reference labels, ranking the windows by confidence gives the review set, and comparing two maps A and B gives the disagreement map. With a labelled sample, a sample of the windows where A and B differ names the more accurate map by an exact test and gives their accuracy difference with a 95% interval; a random sample with reference labels gives the error rate with an exact 95% interval and, by exact zone tests, the certified zone; a sample of each class's confident calls gives each class's error with a 95% interval and the classes not to trust

Documentation: https://olmoearth-inferencex.readthedocs.io/

Install

pip install "olmoearth-inferencex[geo]"    # Python 3.11 to 3.13; without [geo] it reads .npy only
oe-inferencex demo                          # a real Dynamic World tile; needs no data

What it answers

Question Commands Labels
Where do I look first? assess scores.tif --out audit none
How wrong is the map? sample scores.tif --budget 400 --design random --out to_label.csv, fill in wrong, then estimate to_label.csv about 400 random windows
Which part can I trust? certify to_label.csv --alpha 0.05 the same windows
Which class does the map draw wrong? add a reference_class column (the class you see), then estimate to_label.csv --per-class the same windows for a large class; about 900 for a 5% class drawn at half, thousands at 1% (plan --class-share)
Which of two maps is more accurate? sample a.tif --other b.tif --budget 100 --out pairs.csv, fill in reference_class, then estimate pairs.csv about 100, where the maps differ
Which class's confident calls can't I trust? sample scores.tif --design audit --per-class 20 --out audit.csv, fill in reference_class, then estimate audit.csv --alpha 0.05 about 20 per class
Where do two maps differ? compare a.tif b.tif --out diff none

Every command starts with oe-inferencex. The input is the model's per-class scores before the argmax, as a GeoTIFF or a .npy array of shape (C, H, W). plan says how many labels a question needs and --help lists each command's options. The quick start runs each one on a test map.

Examples

Where do I look first? Dynamic World, a land-cover map made from Sentinel-2, on one tile in southern Peru. No labels are used to pick the windows; the expert's labels only show how it did.

Southern Peru, 5 km across: the Sentinel-2 image of 9 June 2019, the Dynamic World map, the 5% of windows flagged first without labels, and the same windows over the map's real errors, 67% of them wrong

The 5% it flags first are wrong 67% of the time. A random 5% would be wrong 19% of the time.

Where do two maps differ? A flood at Lake Shkodër, Albania, in March 2018 (Copernicus EMS activation EMSR273), seen by Sentinel-2 and Sentinel-1.

Lake Shkoder, Albania, 8 km across: Sentinel-2 before the flood (2 April 2017), Sentinel-2 during it (28 March 2018) and Sentinel-1 radar during it (11 March 2018), with an orange box on the flooded shore

Inside the orange box, water mapped from each sensor before and after (imagery from GEOID-Flood and WorldFloods v2); orange squares are where two maps disagree:

The boxed patch: Sentinel-2 and Sentinel-1 images before and after the flood, the four water maps made from them, and orange squares where two of them disagree

Which of two maps is more accurate? Fields of the World's global field map (FTW, 2nd edition) beside a second model, PRUE B3, on a test chip of the FTW benchmark in Croatia.

One FTW benchmark test chip in Croatia, about 1.5 km by 1.1 km: the Sentinel-2 image, FTW's 2nd-edition field map, the PRUE B3 field map, and the windows where the two maps differ, found without labels

Across Croatia's 353 test chips the two maps differ at 13% of windows. There FTW agrees with the benchmark 74% of the time, and labelling 100 of those windows names FTW the better map 99.9% of the time. In Belgium and Sweden, B3 was the better one.

Imagery: contains modified Copernicus Sentinel data (2017 to 2023). Dynamic World map and expert labels: Brown et al., Scientific Data, 2022, CC BY 4.0. FTW map: Fields of the World, CC BY 4.0. How the figures were made is in docs/figures/examples.

Limits

  • Without labels it tells you where to look, not how wrong the map is.
  • In a new place or year the ranking can weaken. Check it with a few labels.
  • When two legends draw a class boundary differently (grass or shrub, say), only labels find those errors.
  • Intervals and certified zones assume the labels are right.
  • If parts of the map were made from different inputs (clouds, a missing sensor), use --condition.
  • Labelling more and rerunning counts as a new test, unless you use a sequential sample.

Use from an agent

oe-inferencex mcp is a local MCP server; nothing is hosted. Add it to any MCP client as the command uvx --from "olmoearth-inferencex[geo,mcp]" oe-inferencex mcp, for example in Claude Code:

claude mcp add --scope user oe-inferencex -- uvx --from "olmoearth-inferencex[geo,mcp]" oe-inferencex mcp

Use a capable model; smaller ones dropped the limits the tools state. To try it, write the demo tile into an empty folder, start the agent there and ask:

uvx --from olmoearth-inferencex oe-inferencex demo

Where should I look first in oe_inferencex_demo/sample_probabilities.npy? Use windows of 1 pixel, and grade the order against oe_inferencex_demo/sample_truth.npy.

More

Metadata

Release files for olmoearth-inferencex 1.14.0

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

Source distribution (sdist)

Source distribution for olmoearth-inferencex 1.14.0
File Size Uploaded Provenance
olmoearth_inferencex-1.14.0.tar.gz 534.4 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for olmoearth-inferencex 1.14.0
File Interpreter ABI Platform
olmoearth_inferencex-1.14.0-py3-none-any.whl Python 3 none any Details

Total release size: 1.1 MB

Release files / olmoearth_inferencex-1.14.0.tar.gz

Download URL olmoearth_inferencex-1.14.0.tar.gz
Size 534.4 kB
Tags Source
SHA-256 checksum
How to use checksums
e8901b904742cd4443bf43cb795776574429762ba2414ab732f60b6d62021a80
BLAKE2b-256 checksum
How to use checksums
a443e1a90004f45402e1ea9654abf97a9b5def94d8081bb9ac73ea106bb5bc57
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / olmoearth_inferencex-1.14.0-py3-none-any.whl

Download URL olmoearth_inferencex-1.14.0-py3-none-any.whl
Size 539.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c40238359d6297cd420269a514058fde0efb3c0d8f5f0002d14846f7df006d2a
BLAKE2b-256 checksum
How to use checksums
066c7113d22d9fbefc08534e5ab4fdb728a408e31a57a54cad20868bd532eae8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for olmoearth-inferencex 1.14.0

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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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