Co-registered Sentinel-1 / Sentinel-2 pairs for self-supervised pre-training in Earth observation. Generated 2026-08-09.
Dataset Card
By Christian Sanchez-Leon, published under cc-by-4.0, revision 657e6ee2c9fb.
STRATA-S12 — full corpus
Upload in progress. This repository is being populated. Downloads are gated for now, and access will be opened once the upload is complete. Star / watch this repo to be notified when it goes live.
Co-registered Sentinel-1 / Sentinel-2 pairs for self-supervised pre-training in Earth observation.
Generated 2026-08-09.
What this is
Every entry is a pair: one Sentinel-2 optical tile and one Sentinel-1 radar tile over the same ground, written to the same grid — identical bounding box, identical CRS (the tile's local UTM zone) and 10 m pixels — so the two rasters correspond pixel for pixel with no resampling on your side. The two acquisitions are at most three days apart; the realised gap is recorded per pair.
Each tile is 512 × 512 pixels at 10 m, so it covers 5.12 × 5.12 km.
- Sentinel-2: bands B4, B3, B2 (true colour),
float32. - Sentinel-1: VV, VH and a precomputed VV−VH difference,
float32.
The remaining Sentinel bands are not shipped, to keep the corpus trainable on ordinary hardware. They remain recoverable: every sidecar records the exact source-scene identifiers, so any additional band can be pulled for any tile from the same archive.
Contents
| Pairs | 740,746 |
| Distinct geographic tiles | 473,786 |
| Non-empty strata | 192 |
| Land-cover classes | 8 |
| Seasons | 4 |
| Regions | 6 |
Classes: bare_sparse_vegetation, built_up, cropland, grassland, herbaceous_wetland, permanent_water_bodies, shrubland, tree_cover
Seasons: autumn, spring, summer, winter
Regions: AFRICA, ASIA, AUSTRALIA_OCEANIA, EUROPE, NORTH_AMERICA, SOUTH_AMERICA
Folder layout
The corpus is distributed as one .tar per stratum
(<sensor>_<class>_<season>_<region>.tar). Unpack a stratum archive and you get
the tree below; unpack several into the same directory to merge them.
<sensor>/class_<class>/season_<season>/region_<region>/<file>.tif
For example s2/class_built_up/season_summer/region_AFRICA/.
The path is the index. Selecting a class, a season or a region is a directory walk and needs no metadata parsing:
cp -r s2/class_cropland/ /somewhere/ # one class, optical only
find . -path '*/season_winter/*' -name '*.tif'
The two members of a pair sit at matching s1/ and s2/ paths and share both identifiers in their filenames.
File names
<sensor>_<class>_<season>_<region>_<tile_id>_<timestamp>_<pair_id>.tif
| Field | Meaning |
|---|---|
sensor |
S2 or S1 |
class |
first four letters of the dominant land-cover class |
season |
WIN, SPR, SUM, AUT |
region |
first three letters of the continental region |
tile_id |
the geographic cell — same for every sampling of that ground |
timestamp |
when the download batch ran (not the acquisition) |
pair_id |
this specific S1–S2 pairing |
A pair is identified by tile_id together with pair_id. Both are in the filename, so matching an optical tile to its radar counterpart is a string comparison — no index, no metadata read.
tile_id repeats across files on purpose: the same ground sampled in a different month or season is a different pair over the same cell. That is the temporal sampling, not duplication.
The sidecar
Every .tif has a .json beside it with the same stem, aligned with STAC 1.0.0 and informed by the NASA PDS4 information model. Nine blocks:
integrity — checksum, algorithm. See Verifying a file below; the checksum is not a hash of the file's bytes.
coordinates — centroid lat/lon (WGS84), geographic bbox, and crs, the tile's native projected CRS. Both frames are recorded so downstream tooling can use either.
dimensions — width, height, pixel_resolution_m, the list of bands, dtype and the nodata sentinel.
classification — season, hemisphere, season_raw; the dominant land_cover_class and its class_id; geographic_region; label_purity, the fraction of the tile covered by the dominant class; and label_composition, the full list of classes present with their ratios. Mixed tiles are described, not discarded — filter on purity for homogeneous ones, or on the composition for any class present.
data_source — provider, mission, source collection and processing level.
acquisition — download_timestamp, satellite_acquisition_time (when the satellite captured the scene), spacecraft, the cloud threshold applied and the pairing tolerance.
license — terms, source, attribution and citation.
provenance — sentinel2_image_id and sentinel1_image_id, the exact source scenes; plus the producing script, its version, the dataset version and the processing environment. The two scene identifiers are what let any tile be traced back to the archive it came from.
quality_metrics — temporal_gap_days, the realised gap between the two acquisitions.
A complete example is in examples/.
Three things to get right
Seasons span two calendar years
Seasons are the three-month meteorological windows (DJF, MAM, JJA, SON), each named after the year it closes. Winter of year Y runs from December of Y−1 to February of Y, so part of the corpus carries a December date from the previous calendar year while belonging to the following season.
Group by the season field, not by the year of satellite_acquisition_time. Grouping by calendar year splits one winter across two buckets.
Seasons are local to the hemisphere
June–August is summer in the north and winter in the south; December is the reverse. The same acquisition month therefore carries either label depending on latitude, and both appear in the corpus. hemisphere and season_raw in the sidecar record which correction was applied.
The checksum hashes the pixels, not the file
integrity.checksum is the xxHash64 of the decoded pixel array, not of the bytes on disk. Hashing the file gives a different value. See below for the code that reproduces it.
Verifying a file
import json, xxhash, rasterio
tif = 's2/class_cropland/season_summer/region_EUROPE/S2_CROP_SUM_EUR_....tif'
arr = rasterio.open(tif).read() # (bands, H, W)
here = xxhash.xxh64(arr.tobytes()).hexdigest()
meta = json.load(open(tif[:-4] + '.json'))
assert here == meta['integrity']['checksum']
The array must be read whole and in band order — that is the buffer the checksum was computed over when the tile was written.
The manifest
manifest.parquet is one row per pair, with the identifiers, the stratum axes, latitude and longitude, the label purity and composition, the source scene identifiers, the temporal gap, and the paths of both files relative to this folder. Anything the folder tree cannot express — a purity threshold, a bounding box, a specific source scene — is a query over this file.
import pandas as pd
rows = pd.read_parquet('manifest.parquet')
pure = rows[rows['label_purity'] > 0.9]
About the labels
Land-cover labels come from ESA WorldCover 2021, product version v200, at 10 m. They exist to stratify the acquisition — to spread the sampling evenly over land-cover classes — and are not ground truth for a supervised task.
There is roughly a four-year gap between the label product and the imagery, so a tile in an area of real land-cover change may carry a stale class. That affects which stratum it was assigned to, not the validity of the pair or its usefulness for self-supervised pre-training. If you need supervised labels, bring them from an external benchmark.
Licence and attribution
Contains modified Copernicus Sentinel data. Released under CC BY 4.0. Per-file terms and the citation string are in each sidecar's license block.
Citation
If you use STRATA-S12, please cite the accompanying paper and this record:
@article{sanchezleon2026strata,
title = {Deficit-Driven Stratified Acquisition for Building STRATA-S12:
An Open SAR--Optical Corpus for Self-Supervised Learning},
author = {Sanchez-Leon, Christian and Chen, Dongming and Wang, Dongqi},
journal = {ISPRS Journal of Photogrammetry and Remote Sensing},
year = {2026}
}
@dataset{strata_s12_corpus_2026,
title = {STRATA-S12: A Stratified, Quality-Controlled Corpus of
Co-Registered Sentinel-1/Sentinel-2 Pairs},
author = {Sanchez-Leon, Christian},
year = {2026},
publisher = {Zenodo},
doi = {10.5281/zenodo.22699047}
}
The dataset DOI above is the version DOI; the concept (all-versions) DOI will be added once the record is published.
Files in this folder
manifest.parquet— the index described above (one row per pair)README.md— this filerequirements.txt— the pinned environment the tiles were produced innorm_stats.json— per-band normalisation statistics (corpus band order)load_example.py— opens and verifies a pair (see Verifying a file)examples.zip— three complete pairs and their sidecars, to try the toolingSHA256SUMS.txt— SHA-256 of each archive, for download integrity*.tar— the tiles and their sidecars, one archive per stratum (<sensor>_<class>_<season>_<region>.tar); unpack to obtain thes1//s2/tree
Details
- Repository
- chsanleo/strata-s12
- Publisher
- Christian Sanchez-Leon
- Task category
- Image feature extraction
- Tags
- remote-sensing, earth-observation, sentinel-1
- Size category
- 100K<n<1M
- Languages
- sar
- Revision
- 657e6ee2c9fb05ba1940a0bdfa9d204e675db941
- Last updated
- 2026-09-18
Files
137 files, 138.3 GB in total.
Every file
| File | Type | Size | SHA-256 |
|---|---|---|---|
| SHA256SUMS.txt | Data | 552 B | — |
| examples.zip | Data | 11.8 MB | — |
| manifest.parquet | Data | 107.7 MB | — |
| norm_stats.json | Data | 574 B | — |
| requirements.txt | Data | 248 B | — |
| s1_bare_sparse_vegetation_autumn_EUROPE.tar | Data | 135.4 MB | — |
| s1_bare_sparse_vegetation_spring_EUROPE.tar | Data | 19.3 MB | — |
| s1_bare_sparse_vegetation_summer_AUSTRALIA_OCEANIA.tar | Data | 1.7 GB | — |
| s1_bare_sparse_vegetation_summer_EUROPE.tar | Data | 165.9 MB | — |
| s1_bare_sparse_vegetation_winter_AUSTRALIA_OCEANIA.tar | Data | 1.9 GB | — |
| s1_bare_sparse_vegetation_winter_EUROPE.tar | Data | 35.8 MB | — |
| s1_built_up_autumn_AFRICA.tar | Data | 744.0 MB | — |
| s1_built_up_autumn_AUSTRALIA_OCEANIA.tar | Data | 166.8 MB | — |
| s1_built_up_autumn_NORTH_AMERICA.tar | Data | 1.5 GB | — |
| s1_built_up_autumn_SOUTH_AMERICA.tar | Data | 983.8 MB | — |
| s1_built_up_spring_AFRICA.tar | Data | 790.0 MB | — |
| s1_built_up_spring_AUSTRALIA_OCEANIA.tar | Data | 118.4 MB | — |
| s1_built_up_spring_NORTH_AMERICA.tar | Data | 1.2 GB | — |
| s1_built_up_spring_SOUTH_AMERICA.tar | Data | 879.5 MB | — |
| s1_built_up_summer_AFRICA.tar | Data | 424.3 MB | — |
| s1_built_up_summer_ASIA.tar | Data | 1.3 GB | — |
| s1_built_up_summer_AUSTRALIA_OCEANIA.tar | Data | 122.1 MB | — |
| s1_built_up_summer_NORTH_AMERICA.tar | Data | 977.7 MB | — |
| s1_built_up_summer_SOUTH_AMERICA.tar | Data | 347.1 MB | — |
| s1_built_up_winter_AFRICA.tar | Data | 801.9 MB | — |
| s1_built_up_winter_AUSTRALIA_OCEANIA.tar | Data | 88.4 MB | — |
| s1_built_up_winter_EUROPE.tar | Data | 1.7 GB | — |
| s1_built_up_winter_NORTH_AMERICA.tar | Data | 1.0 GB | — |
| s1_built_up_winter_SOUTH_AMERICA.tar | Data | 889.8 MB | — |
| s1_herbaceous_wetland_autumn_AUSTRALIA_OCEANIA.tar | Data | 531.9 MB | — |
| s1_herbaceous_wetland_autumn_NORTH_AMERICA.tar | Data | 2.1 GB | — |
| s1_herbaceous_wetland_spring_ASIA.tar | Data | 2.0 GB | — |
| s1_herbaceous_wetland_spring_AUSTRALIA_OCEANIA.tar | Data | 489.8 MB | — |
| s1_herbaceous_wetland_spring_EUROPE.tar | Data | 2.4 GB | — |
| s1_herbaceous_wetland_spring_NORTH_AMERICA.tar | Data | 1.8 GB | — |
| s1_herbaceous_wetland_summer_AUSTRALIA_OCEANIA.tar | Data | 322.8 MB | — |
| s1_herbaceous_wetland_summer_NORTH_AMERICA.tar | Data | 863.1 MB | — |
| s1_herbaceous_wetland_winter_ASIA.tar | Data | 490.3 MB | — |
| s1_herbaceous_wetland_winter_AUSTRALIA_OCEANIA.tar | Data | 308.6 MB | — |
| s1_herbaceous_wetland_winter_EUROPE.tar | Data | 1.3 GB | — |
| s1_herbaceous_wetland_winter_NORTH_AMERICA.tar | Data | 961.9 MB | — |
| s1_shrubland_autumn_EUROPE.tar | Data | 1.1 GB | — |
| s1_shrubland_spring_EUROPE.tar | Data | 982.7 MB | — |
| s1_shrubland_summer_EUROPE.tar | Data | 1.4 GB | — |
| s1_shrubland_winter_EUROPE.tar | Data | 872.0 MB | — |
| s2_bare_sparse_vegetation_autumn_AUSTRALIA_OCEANIA.tar | Data | 2.0 GB | — |
| s2_bare_sparse_vegetation_autumn_EUROPE.tar | Data | 60.9 MB | — |
| s2_bare_sparse_vegetation_autumn_NORTH_AMERICA.tar | Data | 1.6 GB | — |
| s2_bare_sparse_vegetation_spring_EUROPE.tar | Data | 8.6 MB | — |
| s2_bare_sparse_vegetation_summer_AUSTRALIA_OCEANIA.tar | Data | 716.7 MB | — |
| s2_bare_sparse_vegetation_summer_EUROPE.tar | Data | 73.6 MB | — |
| s2_bare_sparse_vegetation_winter_AUSTRALIA_OCEANIA.tar | Data | 822.3 MB | — |
| s2_bare_sparse_vegetation_winter_EUROPE.tar | Data | 16.0 MB | — |
| s2_built_up_autumn_AFRICA.tar | Data | 357.1 MB | — |
| s2_built_up_autumn_ASIA.tar | Data | 2.5 GB | — |
| s2_built_up_autumn_AUSTRALIA_OCEANIA.tar | Data | 83.5 MB | — |
| s2_built_up_autumn_EUROPE.tar | Data | 1.4 GB | — |
| s2_built_up_autumn_NORTH_AMERICA.tar | Data | 746.0 MB | — |
| s2_built_up_autumn_SOUTH_AMERICA.tar | Data | 482.5 MB | — |
| s2_built_up_spring_AFRICA.tar | Data | 370.9 MB | — |
| s2_built_up_spring_ASIA.tar | Data | 2.2 GB | — |
| s2_built_up_spring_AUSTRALIA_OCEANIA.tar | Data | 57.4 MB | — |
| s2_built_up_spring_EUROPE.tar | Data | 1.3 GB | — |
| s2_built_up_spring_NORTH_AMERICA.tar | Data | 556.9 MB | — |
| s2_built_up_spring_SOUTH_AMERICA.tar | Data | 421.6 MB | — |
| s2_built_up_summer_AFRICA.tar | Data | 201.4 MB | — |
| s2_built_up_summer_ASIA.tar | Data | 644.2 MB | — |
| s2_built_up_summer_AUSTRALIA_OCEANIA.tar | Data | 59.1 MB | — |
| s2_built_up_summer_EUROPE.tar | Data | 1.2 GB | — |
| s2_built_up_summer_NORTH_AMERICA.tar | Data | 469.9 MB | — |
| s2_built_up_summer_SOUTH_AMERICA.tar | Data | 167.3 MB | — |
| s2_built_up_winter_AFRICA.tar | Data | 380.0 MB | — |
| s2_built_up_winter_ASIA.tar | Data | 2.1 GB | — |
| s2_built_up_winter_AUSTRALIA_OCEANIA.tar | Data | 43.8 MB | — |
| s2_built_up_winter_EUROPE.tar | Data | 831.7 MB | — |
| s2_built_up_winter_NORTH_AMERICA.tar | Data | 511.9 MB | — |
| s2_built_up_winter_SOUTH_AMERICA.tar | Data | 438.3 MB | — |
| s2_cropland_autumn_AUSTRALIA_OCEANIA.tar | Data | 1.9 GB | — |
| s2_cropland_spring_AUSTRALIA_OCEANIA.tar | Data | 1.5 GB | — |
| s2_cropland_summer_AUSTRALIA_OCEANIA.tar | Data | 1.4 GB | — |
| s2_cropland_winter_AUSTRALIA_OCEANIA.tar | Data | 1.3 GB | — |
| s2_cropland_winter_NORTH_AMERICA.tar | Data | 1.5 GB | — |
| s2_herbaceous_wetland_autumn_AFRICA.tar | Data | 1.6 GB | — |
| s2_herbaceous_wetland_autumn_ASIA.tar | Data | 2.0 GB | — |
| s2_herbaceous_wetland_autumn_AUSTRALIA_OCEANIA.tar | Data | 219.3 MB | — |
| s2_herbaceous_wetland_autumn_EUROPE.tar | Data | 1.2 GB | — |
| s2_herbaceous_wetland_autumn_NORTH_AMERICA.tar | Data | 887.1 MB | — |
| s2_herbaceous_wetland_autumn_SOUTH_AMERICA.tar | Data | 1.6 GB | — |
| s2_herbaceous_wetland_spring_AFRICA.tar | Data | 2.4 GB | — |
| s2_herbaceous_wetland_spring_ASIA.tar | Data | 827.0 MB | — |
| s2_herbaceous_wetland_spring_AUSTRALIA_OCEANIA.tar | Data | 208.3 MB | — |
| s2_herbaceous_wetland_spring_EUROPE.tar | Data | 966.0 MB | — |
| s2_herbaceous_wetland_spring_NORTH_AMERICA.tar | Data | 741.5 MB | — |
| s2_herbaceous_wetland_spring_SOUTH_AMERICA.tar | Data | 1.8 GB | — |
| s2_herbaceous_wetland_summer_AFRICA.tar | Data | 1.1 GB | — |
| s2_herbaceous_wetland_summer_ASIA.tar | Data | 1.6 GB | — |
| s2_herbaceous_wetland_summer_AUSTRALIA_OCEANIA.tar | Data | 131.9 MB | — |
| s2_herbaceous_wetland_summer_EUROPE.tar | Data | 1.3 GB | — |
| s2_herbaceous_wetland_summer_NORTH_AMERICA.tar | Data | 354.2 MB | — |
| s2_herbaceous_wetland_summer_SOUTH_AMERICA.tar | Data | 1.7 GB | — |
| s2_herbaceous_wetland_winter_AFRICA.tar | Data | 2.4 GB | — |
| s2_herbaceous_wetland_winter_ASIA.tar | Data | 206.4 MB | — |
| s2_herbaceous_wetland_winter_AUSTRALIA_OCEANIA.tar | Data | 131.0 MB | — |
| s2_herbaceous_wetland_winter_EUROPE.tar | Data | 567.9 MB | — |
| s2_herbaceous_wetland_winter_NORTH_AMERICA.tar | Data | 399.5 MB | — |
| s2_herbaceous_wetland_winter_SOUTH_AMERICA.tar | Data | 1.6 GB | — |
| s2_permanent_water_bodies_autumn_AUSTRALIA_OCEANIA.tar | Data | 1.5 GB | — |
| s2_permanent_water_bodies_autumn_NORTH_AMERICA.tar | Data | 2.1 GB | — |
| s2_permanent_water_bodies_autumn_SOUTH_AMERICA.tar | Data | 1.3 GB | — |
| s2_permanent_water_bodies_spring_AUSTRALIA_OCEANIA.tar | Data | 1.9 GB | — |
| s2_permanent_water_bodies_spring_SOUTH_AMERICA.tar | Data | 1.8 GB | — |
| s2_permanent_water_bodies_summer_SOUTH_AMERICA.tar | Data | 1.6 GB | — |
| s2_permanent_water_bodies_winter_AUSTRALIA_OCEANIA.tar | Data | 1.9 GB | — |
| s2_permanent_water_bodies_winter_NORTH_AMERICA.tar | Data | 1.9 GB | — |
| s2_permanent_water_bodies_winter_SOUTH_AMERICA.tar | Data | 1.2 GB | — |
| s2_shrubland_autumn_AUSTRALIA_OCEANIA.tar | Data | 2.4 GB | — |
| s2_shrubland_autumn_EUROPE.tar | Data | 507.1 MB | — |
| s2_shrubland_autumn_NORTH_AMERICA.tar | Data | 2.4 GB | — |
| s2_shrubland_autumn_SOUTH_AMERICA.tar | Data | 1.9 GB | — |
| s2_shrubland_spring_AUSTRALIA_OCEANIA.tar | Data | 1.8 GB | — |
| s2_shrubland_spring_EUROPE.tar | Data | 445.2 MB | — |
| s2_shrubland_spring_SOUTH_AMERICA.tar | Data | 2.4 GB | — |
| s2_shrubland_summer_AUSTRALIA_OCEANIA.tar | Data | 2.4 GB | — |
| s2_shrubland_summer_EUROPE.tar | Data | 619.5 MB | — |
| s2_shrubland_summer_NORTH_AMERICA.tar | Data | 1.5 GB | — |
| s2_shrubland_summer_SOUTH_AMERICA.tar | Data | 1.9 GB | — |
| s2_shrubland_winter_AUSTRALIA_OCEANIA.tar | Data | 1.4 GB | — |
| s2_shrubland_winter_EUROPE.tar | Data | 401.0 MB | — |
| s2_shrubland_winter_NORTH_AMERICA.tar | Data | 1.5 GB | — |
| s2_shrubland_winter_SOUTH_AMERICA.tar | Data | 1.9 GB | — |
| s2_tree_cover_autumn_AUSTRALIA_OCEANIA.tar | Data | 1.6 GB | — |
| s2_tree_cover_summer_AUSTRALIA_OCEANIA.tar | Data | 1.5 GB | — |
| s2_tree_cover_winter_AUSTRALIA_OCEANIA.tar | Data | 2.2 GB | — |
| s2_tree_cover_winter_SOUTH_AMERICA.tar | Data | 2.2 GB | — |
| README.md | Documentation | 9.7 KB | — |
| load_example.py | Other | 8.4 KB | — |
| .gitattributes | Repository | 2.5 KB | — |
License and Download
- License
- cc-by-4.0
- Access
- Access requested at publisher
Christian Sanchez-Leon grants access through its official repository on Hugging Face. Read the license.