Taylor Geospatial Research

MIND the Gap

A Geographic Implicit Neural Representation with Adjustable Spatial Scale

PCA colors of MIND storage chunk 0, showing broad geographic patterns.
MIND generates embeddings with spatially ordered chunks, from coarse to fine-grained.

Overview

Geographic embeddings with adjustable granularity.

MIND (Matryoshka Implicit Neural Distillation) maps latitude and longitude to an embedding divided into chunks. In our experiments, early chunks capture broad geographic variation, while later chunks add finer spatial granularity. A downstream predictor can retain only leading chunks or downweight later chunks without retraining the encoder or supplying imagery.

That choice matters when predicting beyond nearby observations. On CoordBench's 52 datasets and 78 targets, MIND with the Chunked Penalty has the highest aggregate regression and classification scores among tested geographic INRs under random folds and every reported regional holdout.

Random-fold R-squared against representation dimension for MIND and nine pretrained INRs. R-squared as held-out blocks grow from 0.25 to 40 degrees for MIND+CP, GeoCLIP, Coordinate IDW, and other INRs.
Representation dimension and geographic separation. MIND supports several truncation dimensions, each retaining a cumulative set of leading chunks. MIND+CP has the highest R2 among tested INRs at each regional holdout size and exceeds Coordinate IDW at block sizes of 2° and larger. Curves show means over five fold-assignment seeds; degrees specify latitude–longitude cell widths, not minimum train–test distances.

Get started

From coordinates to embeddings in a few lines.

Run MIND at any coordinate, or read precomputed pixel embeddings for an area of interest.

Load the model with Torch Hub

Pass latitude–longitude pairs and keep as many leading dimensions as you need.

import torch

model = torch.hub.load("taylor-geospatial/mind", "mind", trust_repo=True)
coords = torch.tensor([[37.77, -122.42], [51.51, -0.13]])  # latitude, longitude
with torch.inference_mode():
    full = model(coords, return_features=True)  # [2, 3072]
    features = full[:, :64]                    # [2, 64]

Requires torch, numpy, safetensors, and huggingface_hub.

Read pixel embeddings with rioxarray

Read the first 64 dimensions for a small San Francisco AOI from the global 0.01° grid. The result is a NumPy array with ocean pixels set to NaN.

import rioxarray
import xarray as xr

url = "https://data.source.coop/tge-labs/mind/mind.zarr"
params = xr.open_zarr(url, consolidated=True).isel(emb=slice(0, 64))
ds = xr.open_zarr(url, group="0", consolidated=True).isel(emb=slice(0, 64))

# A small San Francisco AOI, in longitude/latitude.
aoi = ds.rio.write_crs("EPSG:4326").rio.clip_box(
    minx=-122.50, miny=37.70, maxx=-122.30, maxy=37.90
)
# Decode stored values and mask ocean pixels.
features = aoi.embedding * params.emb_scale + params.emb_offset
features = features.where(aoi["mask"] == 1).to_numpy()  # [64, height, width]

Requires rioxarray, xarray, dask[array], zarr>=3, fsspec, and aiohttp. Change the bounds for your AOI and 64 for your embedding width.

Method

Distilling four teachers into one embedding.

A residual sinusoidal representation network (ReSIREN) maps Equal Earth coordinates to a 3072-d embedding. Nested supervision at 64, 128, 256, 512, 1024, 2048, and 3072 dimensions defines seven contiguous chunks. At each supervised dimension, linear heads reconstruct the embeddings of AlphaEarth Foundations (AEF), Climplicit, GeoCLIP, and SINR from all leading chunks. Training uses MINDSET's 12M land coordinates; the heads are discarded afterwards.

MIND training and deployment overview diagram.
MIND training and downstream prediction. (a) Linear heads reconstruct each teacher's embedding from the leading chunks. (b) Prediction uses the full embedding, truncates it, or applies the Chunked Penalty to penalize later chunks. The encoder stays frozen.

We observe coarser spatial granularity in early chunks and finer variation in later ones; nested supervision does not explicitly assign spatial granularity to any chunk. Truncation retains the leading chunks. The Chunked Penalty retains the full embedding but penalizes predictor coefficients for later chunks more strongly. We select the truncation dimension and regularization parameters using nested cross-validation, with regional folds for regional holdout and random folds otherwise.

PCA color of the first 64-d chunk on a global grid: smooth continental-scale structure. PCA color of the intermediate 256-d chunk (dimensions 256–511): coarser regional structure. PCA color of the last 1024-d chunk (dimensions 2048–3071): variation within regions. PCA color of the full 3072-d field.
Spatial granularity across chunks. Chunk 0 changes gradually across continents, chunk 3 adds coarser regional structure, and chunk 6 varies within regions. The full embedding combines broad gradients with local detail. Each panel maps its top three principal components to color. These seven training chunks have different widths.

Results

CoordBench results.

CoordBench contains 52 datasets and 78 prediction targets from nine sources. We fit linear predictors to frozen embeddings and report macro averages across datasets, using five folds and five fold-assignment seeds. Regional holdouts withhold whole latitude–longitude cells. Regression R2 is floored at −1 per target before averaging. MIND+CP leads the aggregate comparison; GeoCLIP has higher socioeconomic R2 at 20° and 40°.

Scroll the table to compare all regional holdouts.

R2 Accuracy (%)
Method Random10°20°40° Random10°20°40°
Coordinate IDW0.6750.4350.1870.093-0.05367.762.855.753.051.2
Cartesian 3D0.1370.090-0.087-0.220-0.45551.850.746.344.944.6
Wrap (Sin/Cos)0.2040.155-0.028-0.142-0.36753.452.648.647.145.4
SINR0.5220.346-0.413-0.577-0.66163.961.453.549.047.4
SatCLIP0.5040.3660.073-0.038-0.22863.760.754.251.750.9
Climplicit0.5890.3810.038-0.067-0.22766.362.156.553.551.3
GeoCLIP0.5420.4400.2670.2510.14763.159.955.153.254.0
CSP-iNat0.4290.3410.085-0.056-0.37161.459.253.850.347.4
CSP-fMoW0.4070.3380.098-0.076-0.39961.760.054.650.747.3
GAIR0.4270.279-0.096-0.163-0.34259.956.550.848.447.2
TTE0.5630.4180.119-0.059-0.21466.162.256.553.752.3
TaxaBind0.5110.3900.2030.1760.01663.760.555.854.253.5
SLED0.5570.371-0.061-0.301-0.55465.961.752.548.144.5
MIND640.5040.4490.2890.2500.09562.460.556.754.453.9
MIND1280.5330.4600.2910.2470.12163.961.357.655.654.5
MIND2560.5560.4690.2700.2010.09765.162.157.756.454.2
MIND3k0.6350.3540.031-0.050-0.21967.362.758.055.453.3
MIND+CP0.6430.5000.3350.2880.18267.863.959.857.655.7

Means across five fold-assignment seeds. Degrees indicate regional holdout block sizes. Bold and italics mark the best and second-best result across all methods, including the unlearned Coordinate IDW reference. MIND3k uses all 3072 dimensions. Each column uses the same datasets for every method: 36 regression and 16 classification datasets, reduced to 35 and 15 at the largest block sizes.

R-squared against representation dimension under random folds and with 10-degree regions held out. Characteristic distance against representation dimension for MIND.
Chunk performance and spatial granularity across truncations. Adding chunks raises random-fold R2 from 0.504 to 0.635 but lowers the 10° regional-holdout score beyond 128 dimensions. The characteristic distance decreases from about 790 km for the first 64 dimensions to 200 km for the full embedding. It is the separation at which the semivariogram reaches half its large-distance reference value.

Resources

Released artifacts.

  • Weights MIND encoder 3072-d trunk (fp16 safetensors, 227 MB; fp32, ONNX, and PyTorch ExportedProgram files) and MIND-small, an 18×-smaller distilled student.
  • Benchmark CoordBench Source tables for the paper's 52 datasets and 78 coordinate-to-label targets, with fold assignments generated from coordinates by the evaluation code.
  • Dataset MINDSET The four teachers' embeddings at the 12M training coordinates, Hilbert-sorted GeoParquet.
  • Global store tge-labs/mind on Source Coop All 3072 dimensions on a 0.01° grid as a dimension-chunked multiscale Zarr v3 (64-d slice 1.6 GB, 256-d 7.2 GB, full 100 GB), a PCA-RGB COG, and H3 r4/r5 GeoParquet overviews; every piece readable by HTTP range request.

Explore

From broad structure to finer detail.

Compare three 64-d storage chunks with the full 3072-d embedding. Early chunks show broad geographic variation, while later chunks add finer spatial granularity.

First 64-d storage chunk: broad geographic structure in PCA false color.

First chunk · dimensions 0–63.

The individual storage chunks are precomputed 0.64° overviews; All chunks uses the paper's 0.16° full-embedding PCA map, cropped to 58°S–84°N. Each view has its own PCA colors, so compare spatial patterns, not colors between views. Get the full-resolution data.

Data details

Inside the global store.

The global 0.01° embedding is stored as a Zarr v3 array of shape (3072, 18000, 36000), with 64 dimensions per storage chunk and 64×512×512 shards. These 48 equal-sized storage chunks divide the paper's seven training chunks into smaller pieces for reading. A predictor using 64 dimensions reads one set of shards; the full embedding reads 48. Ocean shards are omitted.

Shards read for leading chunks
Shard density, level 0, chunk 0 hover a shard

Each cell is one 512×512-pixel shard of the first 64-d chunk at 0.01°, colored by its compressed size on disk. Empty cells are open ocean and were never written.

The 48 storage chunks, grouped by dimension
Selected chunk rendered as PCA(3) color

Each thumbnail maps one 64-d storage chunk to color with its own PCA. Colors are only comparable within each thumbnail. The bar under each thumbnail is the chunk's roughness (mean squared spatial gradient per unit variance on the level-5 grid). The chart plots that roughness by storage chunk together with the paper's characteristic distance by truncation dimension, which contracts from about 790 km at 64 dimensions to 200 km at 3072.