Skip to main content

olmoearth_inferenceX

olmoearth_inferenceX is a post-inference check for Earth-observation maps: where a model's map is likely wrong, how wrong it is, which part you can trust, and which of two maps is better. It reads the scores the model wrote out; it never runs the model and needs no torch.

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 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

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

Four questions

Question Commands Labels
Where do I look first? assess scores.tif --out audit none
How wrong is the map? sample scores.tif --budget 300 --design random --out to_label.csv, fill in wrong, then estimate to_label.csv about 300 random windows
Which part can I trust? certify to_label.csv --alpha 0.05 the same windows
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
Where do two maps differ? compare a.tif b.tif --out diff none

Every command starts with oe-inferencex, and --help lists its options. decide turns a result into a typed answer: decide to_label_estimate.json --ask error_rate_below=0.1 prints yes, no or undetermined. Quick start runs each one on a test map and shows what it prints.

Input: the model's per-class scores, taken before the argmax, as a GeoTIFF or .npy array of shape (C, H, W): probabilities between 0 and 1, or logits with --logits. A published product's class map with its confidence band works with --confidence. A class map alone cannot be ranked. The package works on windows of 4 x 4 pixels (--patch).

Labels: for each window sample drew, write 1 or 0 in wrong (or the class you see in reference_class), and ? where a window cannot be judged.

Before you trust it

  1. Without labels it says where to look, not how wrong the map is. A review set is not a sample, and estimate and certify refuse it.
  2. A model run on inputs it was not trained on can be sure and wrong, and those errors are checked last. On PASTIS, a probe trained on radar plus optical and run on radar alone was 74% wrong, and 60% of its errors were as confident as a typical correct window. Give --condition a raster of each pixel's input condition, such as a cloud flag, to treat each condition on its own.
  3. Every interval assumes the labels are right. For reviewer error rates you can state, estimate --reviewer-false-alarm and --reviewer-miss widen it.
  4. certify can return nothing, and then says why.

Use from an agent

oe-inferencex mcp is a local MCP server; nothing is hosted. With uv installed, one line connects it to Claude Code:

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

Use a strong model. In a pilot, Claude Sonnet kept the tools' numbers and their limits; Claude Haiku often dropped the limits. To try it, write the demo tile into an empty folder, start the agent there and ask the question below:

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.

Usage gives the configuration for other agents and more questions.

What has been measured

  • On the 24 tasks of Ai2's embedding suite, read through linear probes on OlmoEarth Base, a review of the least confident 10% found a median 0.214 of the errors, about twice a random 10%.

  • On sixteen encoders under ten probe seeds, confidence ranked the errors better than a random order in all 3,560 cells, though the lowest AUROC, 0.503, is close to chance.

  • It also beat informative baselines on ground survey labels (LUCAS), Dynamic World's expert tiles and farmers' crop declarations (EuroCrops).

  • Over 2,514 pairs of probe maps, 100 labels drawn where two maps differ named the more accurate one on 60% of draws, against 13% for 100 labels from the whole map (exp90, not preregistered).

  • On two published land-cover products (LCMAP and Esri, 2018) graded against LCMAP's 25,000 random reference plots, the error-rate interval held its coverage, and labels drawn where the maps differ never named the wrong one; at 50 to 200 labels they named LCMAP on 6% to 29% of draws (exp92, preregistered).

  • On LCMAP's own confidence layer, certified zones met their guarantee in every graded cell. At 300 labels and an allowed error of 8.9%, the default rule returned no zone on 87% of draws: the first zone it tests, a tenth of the plots, is 6% wrong and holds about 30 labels (exp93, preregistered).

  • On five more reference samples, in the United States, East Africa, Europe and worldwide, and seven published products from 2001 to 2020, the intervals held their coverage, labels drawn where two products differ named the worse-agreeing one on at most 0.35% of draws, and three products' own confidences ranked their errors (exp94, preregistered).

Most of this evidence is linear probes on frozen embeddings; on published products, seven products against six reference samples have been graded, with the points standing in for the map. The technical report and the documentation give the full record and its limits.

Development and license

To work on the repository, clone it, then run uv sync and uv run pytest. The experiments also need uv sync --extra encoder --extra geo.

Metadata

Release files for olmoearth-inferencex 1.7.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.7.0
File Size Uploaded
olmoearth_inferencex-1.7.0.tar.gz 447.1 kB Details

Built distribution (wheel)

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

Total release size: 899.1 kB

Release files / olmoearth_inferencex-1.7.0.tar.gz

Download URL olmoearth_inferencex-1.7.0.tar.gz
Size 447.1 kB
Tags Source
SHA-256 checksum
How to use checksums
d501283d2aaa1cc5141fc5da273def7d886e26c56e70c111de1f8f06806b2a60
BLAKE2b-256 checksum
How to use checksums
db5ce4217d80a8ea9d52cb5c37297aaadbc6c760d64cc21b955e7a994cebe4e0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","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.7.0-py3-none-any.whl

Download URL olmoearth_inferencex-1.7.0-py3-none-any.whl
Size 452.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
20c242cbc22346ac33bc3767a0c7de31e78dd1eb11c466deacab6bc66f526fcb
BLAKE2b-256 checksum
How to use checksums
a7fc5a7add10b9c902c4cdd6703ea2c7b2376a7a569bb954f9b2720af91eb59f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","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 history Release notifications | RSS feed

1.12.2

2 release files

1.12.1

2 release files

1.12.0

2 release files

1.11.0

2 release files

1.10.0

2 release files

1.9.0

2 release files

1.8.0

2 release files

1.7.1

2 release files

This release

1.7.0 This release

2 release files

1.6.0

2 release files

1.5.0

2 release files

1.4.1

2 release files

1.4.0

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.0

2 release files

1.1.3

2 release files

1.1.2

2 release files

1.1.1

2 release files

1.1.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