MajorTOM:Elliot Pretrain, A Multi-Sensor, Multi-Temporal Pretraining Dataset for Earth Observation
Organizations: Image and Signal Processing (ISP) Group, Universitat de València, Valencia, Spain · Asterisk Labs, London, United Kingdom
Abstract
Pretraining generalist Earth observation foundation models requires data that combine several sensors, varied temporal sampling and, increasingly, text, yet open datasets rarely provide all three in one consistent, easily accessible form. We introduce MajorTOM:Elliot Pretrain, a collection of 279,166 tiles of 10 km drawn from the Major-TOM grid by clustering AlphaEarth embeddings. Each tile stacks Sentinel-2 L1C, Landsat-8/9, Sentinel-1 RTC, Copernicus DEM and ESA WorldCover on a shared 1056x1056-pixel, 10 m grid, complemented by cloud masks, OpenStreetMap entities and ERA5 weather. The tiles are partitioned into three temporal regimes, Monotemporal (250,000 tiles, one acquisition), Monthly (12,500 tiles, twelve acquisitions spread over the annual cycle) and Burst (16,666 tiles, six acquisitions within 30 days), and are released as 6.3 TB of Cloud Optimized GeoTIFFs indexed by TACO v3 Parquet metadata, a standard that allows cloud streaming, efficient data access, and filtering before any pixel is read. A companion library derives sensor-tagged fact sheets, captions and 16 families of vision-language tasks from these layers at load time. We test our design choices in short pretraining runs of OlmoEarth-Base. First, a 25% subset of Major-TOM Core-S2L2A curated with AlphaEarth embeddings matches or exceeds the full corpus on 8 of 9 benchmarks. Second, on Elliot-Pretrain, adding Landsat-8/9 improves or matches Sentinel-2 only pretraining on every benchmark. Third, using DEM and WorldCover as prediction targets during pretraining further improves 8 of 9 benchmarks, while giving the same maps to the encoder as inputs degrades 5 of 9. Fourth, Sentinel-1 helps on 7 of 9 benchmarks, particularly on benchmarks with radar inputs. Fifth, rule-based captions match a small language model at no cost. The dataset is openly available at https://source.coop/major-tom/elliot-pretrain.
Figures & tables
| Major-TOM | SSL4EO-S12 | Satlas Pretrain | Terra Mesh | Elliot-Pretrain (ours) | |
| Modalities | |||||
| S2 L2A | ✓ | ✓ | ✗ | ✓ | ✗ |
| S2 L1C | ✓ | ✓ | ✓ | ✓ | ✓ |
| S1 GRD | ✗ | ✓ | ✓ | ✓ | ✗ |
| S1 RTC | ✓ ⋆ | ✗ | ✗ | ✓ | ✓ |
| Landsat (L8/9) | ✗ | ✗ | ✓ | ✗ | ✓ |
| Regime | Tiles | Share | Acquisitions per tile | Selection of dates |
|---|---|---|---|---|
| Monotemporal | 250,000 | 89.6% | 1 | least cloudy available |
| Monthly | 12,500 | 4.5% | 12 | greedy, maximal circular day-of-year spread |
| Burst | 16,666 | 6.0% | 6 | greedy spread within the best 30-day window |
| Total | 279,166 | 100% |
| Path | Monotemporal | Monthly / Burst | Content |
| <regime>/ | |||
| COLLECTION.json | TACO collection description, column descriptions, band and radiometry contract | ||
| METADATA/ | |||
| sample.parquet | One row per tile: grid codes, tile-level context, geometry, OSM counts, WorldCover and DEM statistics, cloud and Sentinel-1 summaries | ||
| children.parquet | One row per top-level entry of a tile (layer folders, osm.parquet , admin.parquet ) | ||
| children__<layer>.parquet | One row per file (s2, l8, s1, cloud_s2, cloud_l8, dem, lc): dates, product, scores, geometry, ERA5, mask class fractions, Sentinel-1 pass | ||
| Monotemporal | Monthly | Burst | |
| Tiles | 250,000 | 12,500 | 16,666 |
| Images per sensor | 250,000 | 150,000 | 99,996 |
| Sentinel-2 acquisition years | 2015–2026 | 2015–2026 | 2017–2025 |
| Cloud fraction (masks), median | 0.00 | 0.19 | 0.07 |
| Sentinel-2 cloudiness bins (%) | 100 / 0 / 0 / 0 / 0 | 74 / 6 / 8 / 3 / 10 | 85 / 5 / 5 / 1 / 3 |
| Landsat-8 cloudiness bins (%) | 94 / 3 / 3 / 0 / 0 | 69 / 8 / 10 / 4 / 9 | 75 / 11 / 11 / 3 / 0 |
| Rule-based template (no LLM) | Small LLM (GPT-6-luna) fact sheet | Large LLM (GPT-6.1-sol) fact sheet | Large LLM (GPT-6.1-sol) fact sheet + image | |
|---|---|---|---|---|
| Accuracy | 8.74 [8.51, 8.95] | 8.73 [8.54, 8.92] | 9.39 [9.27, 9.51] | 9.32 [9.19, 9.45] |
| Coverage | 8.11 [7.91, 8.29] | 6.81 [6.65, 6.96] | 8.73 [8.60, 8.86] | 8.45 [8.31, 8.59] |
| Salience | 6.66 [6.51, 6.80] | 6.92 [6.77, 7.06] | 7.84 [7.71, 7.97] | 7.96 [7.84, 8.07] |
| Spatial | 6.92 [6.54, 7.30] | 6.45 [6.09, 6.78] | 7.42 [7.03, 7.81] | 7.45 [7.09, 7.82] |
| Fluency | 5.86 [5.72, 6.01] | 7.38 [7.24, 7.51] | 7.87 [7.80, 7.94] | 8.02 [7.95, 8.09] |
| Mean of 5 | 7.26 [7.10, 7.41] | 7.26 [7.13, 7.39] | 8.25 [8.12, 8.38] | 8.24 [8.12, 8.35] |
Appendix figures & tables15 assets
Supplementary material from the paper’s appendix.
Appendix
| Major-TOM | MajorTOM:Elliot Pretrain | |
|---|---|---|
| Storage format | GeoTIFFs embedded in Parquet columns | Cloud-Optimised GeoTIFF via TACO |
| Row groups | One row per row group | Up to 10,000 rows per row group |
| Band handling | One column per band, mixed resolutions | All bands at 10 m in a single COG |
| Pixel dimensions | Variable, not aligned to 32 | 1056 1056 |
| Georeferencing | Per-band, mixed grids | Single MGRS-aligned CRS + affine |
| Compression | LZW (CPU only) | ZSTD + PREDICTOR=2 (3 for float layers) + INTERLEAVE=BAND |
| Sensor | Bands | Dtype | Predictor | DISCARD_LSB |
|---|---|---|---|---|
| Sentinel-2 L1C | 13 | UInt16 | 2 | 3 (all bands) |
| Landsat-8/9 OLI-TIRS | 11 | UInt32 | 2 | 3 9 (OLI), 10 2 (TIRS) |
| Copernicus DEM GLO-30 | 1 | Int16 / Float32 | 2 / 3 | 2 / none |
| ESA WorldCover v200 | 1 | UInt8 | 1 | none (categorical) |
| Sentinel-1 RTC | 2 | Float32 | 3 | mantissa truncated to 12 bits |
| Level | Temporal tolerance | Score requirement |
|---|---|---|
| N1 | days | |
| N2 | days | |
| N3 | days | |
| N4 | any date | none |
| Family | Answer shape | Requires |
|---|---|---|
| caption | prose | – |
| dominant_cover | word | WorldCover |
| which_present | choice | – |
| locate_point , locate_bbox | point, box | – |
| features_all | several points | – |
| ndvi_grid | grid | S2 |
| Table | Columns | Content |
|---|---|---|
| tile ( sample ) | majortom:code_10km , code_100km , code_1000km | hierarchical grid codes of the tile |
| terrain:elevation | mean elevation (m), Copernicus GLO-30 | |
| climate:precipitation , climate:temperature | mean annual precipitation (GPM, m/year), mean annual land surface temperature (MODIS, K) | |
| soil:clay , sand , carbon , bulk_density , ph | surface soil properties as encoded by OpenLandMap: carbon in units of 5 g/kg, bulk density in units of 10 kg/m 3 , pH ; null where no soil data exist (sea, Antarctica, Greenland) | |
| socio:gdp , population , human_modification , cisi | GDP (PPP, 2022; not per capita, aggregation undocumented), people per cell (Meta HRSL), Global Human Modification index, Critical Infrastructure Spatial Index | |
| admin:country , state , district | administrative names |
| Check | Scope | Result |
|---|---|---|
| Sentinel-1 pairing date equals Sentinel-2 date | 499,996 images | 100% |
| Same CRS, geotransform and shape for all five rasters | 300 tiles | 100% |
| Stored geotransform equals file header | 300 tiles | 100% |
| Metadata nodata equals measured (Sentinel-2, Sentinel-1) | 300 tiles | max. diff. 0 |
| Valid WorldCover codes (Monotemporal; 0 = no data in Monthly, Burst) | 300 tiles | 100% |
| Sentinel-2/Landsat-8/9 shift within 1 / 3 px | 300 tiles | 81% / 89% |
| Experiment 1 (data volume, curation) | Experiment 2 (modalities, partitions) | |
|---|---|---|
| Pretraining data | Core-S2L2A: all 2,184,259 tiles; random 25% (546,064 tiles, seed 0, no replacement); curated 25% (the first 546,064 tiles of the AlphaEarth ordering, see below); 512 random tiles (seed 0) | Elliot-Pretrain: 250,000 Monotemporal tiles (modality ladder); monthly+burst (29,166 tiles), mono+monthly (262,500), mono+monthly+burst (279,166) |
| Encoder input | Sentinel-2 L2A, 12 bands | Sentinel-2 L1C, 12 bands, plus Landsat-8/9 and Sentinel-1 as stated per run (Table 18 ) |
| Normalization | z-score, Core-S2L2A band statistics | z-score, Elliot-Pretrain band statistics (Sentinel-1: dB statistics) |
| Steps | 42,660 (10 epochs of 4,266), in two parts of 21,330; the 25% subsets are repeated within an epoch | 488 (Monotemporal and monthly+burst), 512 (mono+monthly), 545 (mono+monthly+burst) |
| Learning-rate schedule | Cosine, warmup 1.2% of the run; part two resumes from step 21,330 with the schedule recomputed over 42,660 steps (the rate jumps back to the cosine midpoint) | Cosine, warmup 1.2% of the run |
| Hardware, microbatch | one A100-80GB, 64, 16 dataloader workers (2 for the 512-tile run) | four GPUs (A30-24GB, or RTX PRO 6000 Blackwell for the Sentinel-1 runs), 32 per GPU, 8 workers per GPU |
| Model | |
| Architecture | Latent masked image modelling, OlmoEarth Base encoder (88.8M parameters with Sentinel-2 only; 92.0M with Landsat-8, 95.1M with DEM or Sentinel-1 added, 98.3M with DEM and WorldCover, 101.4M with Sentinel-1, DEM and WorldCover) with a shallow predictor (decoder depth 4) |
| Patch size | 1–8 (sampled per batch), stochastic depth 0.1 |
| Position encoding | Mixed 3D RoPE (base 10,000, temporal coordinate scale , time in calendar days since 2000) |
| Band dropout | Random, maximum rate 0.2, on Sentinel-2 and Landsat |
| Tokenization | One band group for Sentinel-2 (12 bands, B10 dropped) and for Landsat (11 bands) |
| Optimization | |
| Input | Role | Preparation | Missing data |
|---|---|---|---|
| Sentinel-2 | encoder | Elliot-Pretrain: L1C top-of-atmosphere, Core-S2L2A: L2A; both go through the same Sentinel-2 slot, with B10 dropped (12 bands) and no conversion between levels; per-band z-score | none |
| Landsat-8/9 | encoder | 11 bands (9 reflectance, 2 brightness temperature), per-band z-score | an image with no data is treated as absent |
| Sentinel-1 | encoder | VV and VH, linear power to dB ( , floor ), per-band z-score with the dB statistics | no-data pixels are set to the band mean (zero after z-scoring); the 6.6% of tiles without a pass keep an image that is entirely mean-filled, no image is borrowed from another tile |
| DEM | decoder target (encoder input in the enc run) | Copernicus GLO-30 in the elevation slot, per-band z-score | none |
| WorldCover | decoder target (encoder input in the enc run) | ESA WorldCover v200 class codes, normalized as in OlmoEarth (categorical) | none |
| Time | all | timestamps give a month embedding and the calendar-day coordinate of the 3D RoPE | padded steps masked |
| Benchmark (classes) | Input | Bands imputed | Time steps | Probe | Metric |
|---|---|---|---|---|---|
| So2Sat (17) | S2, 10 bands | B01 from B02, B09 from B8A, B10 from B11 | 1 | KNN, | accuracy |
| EuroSAT (10) | S2, 13 bands (L1C) | none (B10 dropped) | 1 | KNN, | accuracy |
| BrickKiln (2) | S2, 13 bands (L1C) | none (B10 dropped) | 1 | KNN, | accuracy |
| BigEarthNet (43) | S2, 12 bands (L2A) | none | 1 | KNN, | micro-F1 |
| TreeSatAI (15, multi-label) | S2 12 bands; S1 VV, VH | none; S1 ratio band dropped | 1 | KNN, | macro-F1; 10000/2000/5044 |
| PASTIS (19) | S2 (and S1) time series | as in the OlmoEarth loader | 12 | linear, lr 0.1 | mIoU |
| Benchmark | Random 25% 100% | 512 tiles 100% | Curated 25% 100% | Curated random 25% |
|---|---|---|---|---|
| So2Sat (Acc.) | +0.49 [-0.02, +0.99] ( =0.056) | -1.30 [-1.77, -0.83]** ( =0.000) | +0.59 [+0.02, +1.17]* ( =0.043) | +0.11 [-0.58, +0.79] ( =0.729) |
| PASTIS (mIoU) | -1.17 [-1.75, -0.59]** ( =0.001) | +0.04 [-0.29, +0.38] ( =0.789) | -3.15 [-4.46, -1.83]** ( =0.000) | -1.98 [-3.46, -0.49]* ( =0.015) |
| EuroSAT (Acc.) | +0.24 [-0.16, +0.64] ( =0.208) | -1.38 [-1.97, -0.79]** ( =0.000) | +0.47 [-0.16, +1.10] ( =0.126) | +0.23 [-0.08, +0.54] ( =0.129) |
| MADOS (mIoU) | -0.77 [-1.19, -0.34]** ( =0.003) | -3.93 [-5.20, -2.67]** ( =0.000) | +2.32 [+1.78, +2.87]** ( =0.000) | +3.09 [+2.35, +3.83]** ( =0.000) |
| BrickKiln (Acc.) | -0.56 [-0.92, -0.20]** ( =0.006) | +0.89 [-0.04, +1.83] ( =0.059) | +0.06 [-0.40, +0.52] ( =0.773) | +0.62 [+0.28, +0.96]** ( =0.003) |
| BigEarthNet ( F1) | +0.32 [+0.02, +0.62]* ( =0.041) | -0.02 [-0.49, +0.46] ( =0.941) | +0.99 [+0.71, +1.28]** ( =0.000) | +0.68 [+0.41, +0.94]** ( =0.000) |
| Benchmark | 100% | Random 25% | 512 tiles | Curated 25% |
|---|---|---|---|---|
| So2Sat (Acc.) | 37.73 0.00 [37.73, 37.73] | 38.74 0.00 [38.74, 38.74] | 37.53 0.00 [37.53, 37.53] | 38.74 0.00 [38.74, 38.74] |
| PASTIS (mIoU) | 31.22 0.10 [30.98, 31.46] | 29.89 0.10 [29.65, 30.14] | 31.97 0.07 [31.79, 32.16] | 30.21 0.08 [30.02, 30.40] |
| EuroSAT (Acc.) | 79.60 0.00 [79.60, 79.60] | 79.60 0.00 [79.60, 79.60] | 77.40 0.00 [77.40, 77.40] | 79.90 0.00 [79.90, 79.90] |
| MADOS (mIoU) | 51.81 0.19 [51.33, 52.28] | 50.55 0.20 [50.07, 51.04] | 45.23 0.07 [45.05, 45.42] | 53.74 0.10 [53.49, 53.98] |
| BrickKiln (Acc.) | 85.79 0.00 [85.79, 85.79] | 85.69 0.00 [85.69, 85.69] | 86.79 0.00 [86.79, 86.79] | 86.49 0.00 [86.49, 86.49] |
| BigEarthNet ( F1) | 49.22 0.00 [49.21, 49.23] | 49.57 0.00 [49.57, 49.57] | 49.15 0.00 [49.15, 49.15] | 50.48 0.00 [50.48, 50.48] |
| Model | Other encoder inputs | Decoder targets | Pool | Steps |
|---|---|---|---|---|
| S2 only | — | — | Mono | 488 |
| S2+L8 | L8 | — | Mono | 488 |
| S2+L8+DEM (dec) | L8 | DEM | Mono | 488 |
| S2+L8+DEM (dec)+WC (dec) | L8 | DEM, WC | Mono | 488 |
| S2+L8+DEM (enc)+WC (enc) | L8, DEM, WC | — | Mono | 488 |
| S2+L8+S1 | L8, S1 | — | Mono | 488 |
| Pretraining run | Step | So2Sat | PASTIS | EuroSAT | MADOS | BrickKiln | BigEarthNet | TreeSatAI | Canopy | BioM |
|---|---|---|---|---|---|---|---|---|---|---|
| S2 only | 488 | 30.4 | 26.0 | 69.0 | 37.6 | 81.6 | 41.1 | 17.1 | 6.22 | 55.13 |
| S2+L8 | 488 | 31.2 | 28.5 | 70.7 | 39.5 | 86.5 | 42.5 | 17.1 | 6.23 | 54.22 |
| S2+L8+DEM (dec) | 488 | 29.3 | 25.2 | 69.4 | 36.6 | 83.9 | 41.0 | 17.1 | 6.31 | 55.20 |
| S2+L8+DEM (dec)+WC (dec) | 488 | 29.9 | 29.9 | 71.6 | 40.2 | 86.9 | 43.4 | 17.7 | 6.10 | 52.81 |
| S2+L8+DEM (enc)+WC (enc) | 488 | 26.1 | 23.0 | 69.6 | 33.6 | 81.2 | 40.6 | 17.3 | 6.43 | 54.95 |
| S2+L8+S1 | 488 | 29.4 | 23.9 | 67.1 | 36.2 | 82.9 | 41.3 | 17.0 | 6.33 | 54.59 |
| Pretraining run | Step | PASTIS | TreeSatAI | BioM |
|---|---|---|---|---|
| S2+L8+S1 | 488 | 26.1 | 18.7 | 52.02 |
| S2+L8+S1+DEM (dec) | 488 | 25.8 | 18.4 | 52.17 |
| S2+L8+S1+DEM (dec)+WC (dec) | 488 | 27.1 | 19.0 | 51.32 |
Remote Sensing
Remote sensing uses satellite, aerial, and ground-based observations to measure and map Earth and other planetary surfaces.
See all 513 papers