Skip to main content

Fast object-level (polygon) metrics for geospatial ML: precision, recall, F1, IoU, mAP, shape stats.

Project description

polymetrics

Fast object-level (polygon) accuracy metrics for geospatial ML. Compare two GeoJSONs and get precision, recall, F1, IoU, mAP, and polygon-shape statistics in one call.

uvx polymetrics truth.geojson pred.geojson
from polymetrics import evaluate

result = evaluate("truth.geojson", "pred.geojson", iou_threshold=0.5)
print(result.precision, result.recall, result.f1, result.mean_iou)
result.to_geojson("annotated.geojson")

What it computes

Metric Definition
precision, recall, f1 Standard object-level scores after one-to-one Hungarian matching on IoU
mean_iou Mean IoU across matched (TP) pairs
map_50 Mean Average Precision at IoU=0.5, 101-point AP integration (COCO-style)
map_50_95 Mean of mAP at IoU thresholds 0.5, 0.55, ..., 0.95
avg_vertices Mean exterior vertex count across predicted polygons
orthogonality Mean fraction of edges within 5° of each polygon's MBR dominant axis

How it differs from pixel metrics

Pixel IoU pools every pixel and asks "what fraction did you get right?". Object IoU asks "did you find each building, and how well-shaped is each one?" which is what users actually see on a map. Both are useful for different reasons; this library only does object-level.

CRS handling

Inputs are always reprojected to EPSG:3857 before any geometric computation. If the prediction and truth GeoJSONs declare different source CRSs, a warning is emitted and both are projected. A missing CRS is treated as EPSG:4326 (the GeoJSON 2008 default).

Matching algorithm

Hungarian bipartite assignment (scipy.optimize.linear_sum_assignment) on a -IoU cost matrix, with gdf.sindex (STRtree) pruning to skip non-overlapping pairs. Each prediction matches at most one truth; pairs below iou_threshold are dropped (the prediction becomes FP, the truth FN).

mAP

mAP requires each prediction feature to carry a score or confidence property in [0, 1]. If neither is present, mAP is reported as null and a warning is emitted; the other metrics still compute.

Install

uv pip install polymetrics

CLI

polymetrics truth.geojson pred.geojson [options]

positional arguments:
  truth                 ground-truth GeoJSON
  pred                  prediction GeoJSON

options:
  --iou FLOAT           IoU threshold for TP (default: 0.5)
  --no-map              skip mAP computation
  --out PATH            write annotated GeoJSON (TP/FP/FN per feature)
  --json                emit metrics as JSON on stdout

License

Apache-2.0.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

polymetrics-0.2.0.tar.gz (11.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

polymetrics-0.2.0-py3-none-any.whl (11.2 kB view details)

Uploaded Python 3

File details

Details for the file polymetrics-0.2.0.tar.gz.

File metadata

  • Download URL: polymetrics-0.2.0.tar.gz
  • Upload date:
  • Size: 11.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.17 {"installer":{"name":"uv","version":"0.11.17","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}

File hashes

Hashes for polymetrics-0.2.0.tar.gz
Algorithm Hash digest
SHA256 6716079625eac75e33ddfa25d1efa34372c6bf9821132f135ea2a2d6fab70e16
MD5 acb16712535a5d980fe1e5fcdb87c521
BLAKE2b-256 cf7e2ac983e62a54bacb8bf29ef5fe5d0021b3080cdc34686e8922f88d86cb50

See more details on using hashes here.

File details

Details for the file polymetrics-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: polymetrics-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 11.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.17 {"installer":{"name":"uv","version":"0.11.17","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}

File hashes

Hashes for polymetrics-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f253a1eb0bc635fcb27cc9c2722fb8e8f28f65afef222c8c9bea0432563183c7
MD5 95cfcba332e61e31c8b9ddf2d41922ca
BLAKE2b-256 51c1ba1ea756a96cf373d42a31e102ec7ea39df5e1c7e53c0ff6fc046b52c743

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page