Raikou OlmoEarth India LULC (5 classes)
A 10 m land-cover segmentation model for India. It reads one to three dates of Sentinel-2 L2A imagery and maps every pixel to one of five classes, with calibrated probabilities. It is OlmoEarth v1.2 Base fine-tuned on 100 Indian tiles, and it powers Raikou Optical, an extension feature of the Raikou platform.
| Value | Class | Colour |
|---|---|---|
| 1 | Built-up | #fa0000 |
| 2 | Agriculture | #f096ff |
| 3 | Forest & natural vegetation | #006400 |
| 4 | Barren / wasteland | #b4b4b4 |
| 5 | Water bodies & wetlands | #0064c8 |
All scores in this card are agreement with labels derived from ESA WorldCover 2021 on held-out Indian tiles. They are not field-verified accuracy.
Model Details
Model Description
The pre-trained OlmoEarth v1.2 Base encoder (a ViT that turns each 4 × 4 pixel patch of every date into a 768-dimensional token) is followed by a masked temporal attention pool that merges the available dates, a 10 m spectral stem fed by the clearest date, and a progressive U-Net decoder with GroupNorm. The whole network was fine-tuned with layer-wise learning-rate decay, and its outputs are calibrated by temperature scaling (T = 2.1018).
- Developed by: Parvathi Viswanath Munagapati (Raikou)
- Model type: Semantic segmentation (land use / land cover), about 117 M parameters
- Version: 0.1.0 (released 15 October 2026)
- Language(s) (NLP): Not applicable (satellite imagery)
- License: OlmoEarth Artifact License. These weights are a Derivative under that licence and carry its use restrictions (see Out-of-Scope Use).
- Finetuned from model: allenai/OlmoEarth-v1_2-Base (weights SHA-256
57f7b66faf206db1307670673839e639d3a19c305f6ad968c62392ad3e88deec)
Model Sources
- Repository: this repository: the weights,
model_card.json, the benchmark, the temperature, and the exact training and inference code inraikou_phase0/ - Base model papers: OlmoEarth (Herzog et al., 2025); OlmoEarth v1.2 (Tseng et al., 2026)
- Demo: used in Raikou Optical (https://www.raikou.site, sign-in required)
Uses
Direct Use
- 10 m land-cover maps of areas in India from Sentinel-2 L2A, from a single date or a stack of up to three dates.
- Per-pixel calibrated probabilities, to show where the map can be trusted.
- Intended for non-commercial research and teaching.
Downstream Use
- As a starting point for further fine-tuning on Indian Sentinel-2 tasks (the licence restrictions carry over).
- Its encoder features (768-d per 40 m token) for "looks similar" search between places.
- In GIS workflows: export the class map and the confidence as GeoTIFFs.
raikou_phase0/bundle.pywrites styled COGs for QGIS and ArcGIS.
Out-of-Scope Use
- Barred by the OlmoEarth Artifact License:
- military and defence uses, including intelligence gathering, human surveillance and policing;
- planning or facilitating extractive activities such as mining, drilling or deforestation.
- Outside the training domain: areas outside India, snow and ice, and other sensors or imagery not harmonised as described below.
- Not what the model does:
- detecting or counting objects (buildings, vehicles, ships);
- mapping ownership or legal boundaries;
- treating differences from WorldCover 2021 as change. A difference mixes real change with the errors of both maps.
Bias, Risks, and Limitations
- Agreement, not accuracy. The reference labels come from WorldCover 2021, which is itself 76.7 ± 0.5% accurate globally at 11 classes (ESA WorldCover validation report v2.0).
- Water is the weak class.
- From one date, the model finds 80% of the reference water, but only 13% of the pixels it calls water are water in WorldCover.
- Most of this comes from the Little Rann of Kutch, a salt flat that WorldCover labels bare but that is wet on some dates.
- On labels the spectra support, water IoU from three dates is 0.862.
- Dense cities are harder. Outside the Rann, the lowest-scoring test tile is in Chennai (0.752 agreement from one date), where buildings and trees mix within 10 m pixels.
- Training period and coverage.
- Trained on 2020–21 imagery from six zones.
- The north-east, the islands and snow-covered terrain are not represented.
- Single dates are less reliable than three-season stacks in seasonal farmland.
- Mid-range scores are optimistic. After calibration, scores between about 0.5 and 0.93 still overstate agreement by 3–10 points. Scores above 0.93 (70% of pixels) are well calibrated.
- Input scale matters. Imagery must be harmonised L2A digital numbers, with the processing-baseline 04.00 offset removed. Unharmonised data will shift every prediction.
Recommendations
- Check low-confidence areas against the imagery.
- Use three seasonal dates where farmland or seasonal water matter.
- Read single-date maps of seasonal wetlands as a picture of that date.
- Before reporting areas or accuracy, assess the map with an independent, statistically designed reference sample (Olofsson et al., 2014).
How to Get Started with the Model
# pip install torch "olmoearth-pretrain-minimal==0.1.2" numpy huggingface_hub
import sys
import numpy as np
from huggingface_hub import snapshot_download
repo = snapshot_download("<your-username>/<this-repo>")
sys.path.insert(0, repo)
from raikou_phase0 import infer
model = infer.load_model(f"{repo}/olmoearth_india_lulc_fp16.pt", f"{repo}/model_card.json", device="cuda")
# stack_dn: (T, 12, H, W) uint16, T = 1..3, harmonised Sentinel-2 L2A DN (10000 x reflectance)
# bands in this order: B02 B03 B04 B08 B05 B06 B07 B8A B11 B12 B01 B09, at 10 m
# valid_mask: (T, H, W) bool, False where SCL is 0, 1, 3, 8, 9, 10 or 11
# dates: one "YYYY-MM-DD" per date
# H and W must be multiples of 8 and at least 128.
probs, embeddings = infer.predict(model, stack_dn, valid_mask, dates, amp="fp16", device="cuda")
has_data = probs.sum(0) > 0
lulc = np.where(has_data, probs.argmax(0) + 1, 0).astype(np.uint8) # 1-5, 0 = no data
confidence = (100 * probs.max(0)).round().astype(np.uint8) # calibrated, 0-100
predict tiles the area into 128 px windows with a stride of 64, blends them with Gaussian weights, and applies the calibration temperature from model_card.json. On CPU, pass device="cpu", amp="fp32". The benchmark also applied a 4-pixel sieve to the class map, which removes regions smaller than 400 m².
Training Details
Training Data
- Tiles. 100 tiles of 10 × 10 km at 10 m (1,000 × 1,000 px), in native UTM zones 42N–45N.
- Splits. 70 train, 15 validation and 15 test tiles, split by whole place. Every validation and test tile is at least 20 km from any training tile.
| Zone | Train places | Validation | Test | Tiles (train/val/test) |
|---|---|---|---|---|
| Deccan plateau | Anantapur, Kadapa, Raichur, Solapur | Kurnool | Bellary | 16/3/3 |
| Coast | Godavari delta, Krishna delta, Sundarbans | Kochi | Visakhapatnam | 12/3/3 |
| Alluvial plains | Karnal, Ludhiana, Meerut | Bathinda | Thanjavur | 12/3/3 |
| Forest | Araku, Kodagu, Uttara Kannada | Satpura | Kanha | 12/2/2 |
| Arid | Great Rann of Kutch, Jaisalmer, Ladakh | Bikaner | Little Rann of Kutch | 8/2/2 |
| Urban | Bengaluru, Delhi NCR, Hyderabad | Mumbai | Chennai | 10/2/2 |
- Imagery. Sentinel-2 L2A from Microsoft Planetary Computer, hydrological year 2020–21.
- The clearest pass over each tile was taken in each of three windows: post-monsoon (15 Oct–30 Nov 2020), rabi (15 Jan–28 Feb 2021) and summer (1 Apr–20 May 2021).
- 2 of the 300 tile-seasons had no usable pass.
- Labels. ESA WorldCover 2021 v200, remapped to five classes:
- tree (10), shrub (20), grass (30) and mangrove (95) → Forest & natural vegetation;
- cropland (40) → Agriculture;
- built-up (50) → Built-up;
- bare / sparse (60) and moss / lichen (100) → Barren / wasteland;
- water (80) and herbaceous wetland (90) → Water bodies & wetlands;
- snow (70) → ignored.
Training Procedure
Preprocessing
- Consensus filter (training and validation tiles only). A WorldCover label was kept only if the pixel's own spectra supported it over all three dates. The rules are listed below; NDVI, MNDWI and BSI come from the L2A bands.
- Boundary band. A 1-pixel band along class boundaries was also ignored (label 255).
- Test labels were left unfiltered.
| WorldCover class | Kept if |
|---|---|
| Tree (10) | max NDVI ≥ 0.45, min NDVI ≥ 0.15 |
| Shrub (20) | max NDVI ≥ 0.25, min NDVI ≥ 0.10, max BSI < 0.25 |
| Grass (30) | max NDVI ≥ 0.25, min NDVI ≥ 0.05 |
| Mangrove (95) | max NDVI ≥ 0.40, min NDVI ≥ 0.20 |
| Cropland (40) | max NDVI ≥ 0.30, NDVI range ≥ 0.20 |
| Built-up (50) | max NDVI < 0.40, max MNDWI < 0 |
| Bare (60, 100) | max NDVI < 0.25, max MNDWI < −0.05 |
| Water / wetland (80, 90) | max MNDWI > −0.05, min NDVI < 0.20 |
How much of each label survived varies widely: 98.6% of forest-zone tree cover was kept, 87.5% of alluvial cropland and 26.1% of arid cropland.
- Inputs.
- The 12 bands in OlmoEarth's order, as DN = 10000 × reflectance.
- Pixels with invalid SCL (0, 1, 3, 8, 9, 10, 11) are masked.
- Bands are normalised with the OlmoEarth
Normalizer(std_multiplier=2.0). - Acquisition dates are passed as (day, month0, year).
Training Hyperparameters
- Training regime: bf16 mixed precision
| Setting | Value |
|---|---|
| Crops | 128 × 128 px, 100 random crops per training tile per epoch, batch 16 (437 steps/epoch) |
| Epochs | 35 (3 warm-up, then cosine decay); best checkpoint: epoch 7 |
| Learning rate | 2 × 10⁻⁴ for the decoder, layer-wise decay 0.65 into the encoder, minimum 1 × 10⁻⁶ |
| Optimiser settings | weight decay 0.02, gradient clipping 1.0, seed 1234 |
| Loss | 0.5 × class-weighted cross-entropy + 0.5 × Dice, ignore index 255 |
| Class weights | 1.8, 1.0, 1.0, 1.3, 1.6 (built-up, agriculture, forest, barren, water) |
| Date dropout | each crop gets 1, 2 or 3 dates with probability 0.4, 0.2, 0.4 |
| Model selection | best mean validation mIoU on cleaned labels from one and three dates |
At epoch 7, validation mIoU was 0.931 from one date and 0.959 from three on cleaned labels, and 0.784 and 0.809 on raw labels.
Speeds, Sizes, Times
- Training: about 3.5 min per epoch on an NVIDIA A100 80 GB, roughly 2 GPU-hours in total, peak memory 30.9 GB.
- Checkpoints:
olmoearth_india_lulc_fp32.pt: 469 MB;olmoearth_india_lulc_fp16.pt: 235 MB.
- Inference per 10 × 10 km tile (benchmark GPU):
| Precision | One date | Three dates | Peak GPU memory |
|---|---|---|---|
| fp32 | 20.9 s | 77.4 s | 2.46 GB |
| fp16 | 6.7 s | 23.8 s | 2.18 GB |
Evaluation
Testing Data, Factors & Metrics
Testing Data
- The 15 held-out test tiles: Bellary, Visakhapatnam, Thanjavur, Kanha, the Little Rann of Kutch and Chennai. That is about 15 million pixels.
- The reference is the unfiltered WorldCover-derived labels.
Factors
- Dates: one date (T1) or three seasons (T3).
- Labels: raw labels, or cleaned labels (the 74% of test pixels whose label passes its spectral rule).
- Precision: fp32 or fp16.
- Tile and zone.
Metrics
- Classification:
- overall agreement (pixel share matching the reference) and Cohen's κ;
- per-class recall, precision, F1 and IoU;
- mean IoU and macro F1.
- Calibration: expected calibration error (ECE, 15 bins) for the calibration step.
- Scoring: all metrics are computed after the 4-pixel sieve.
Results
| Labels | Dates | Overall agreement | κ | Mean IoU | Macro F1 |
|---|---|---|---|---|---|
| Raw | T1 | 85.9% | 0.799 | 0.639 | 0.738 |
| Raw | T3 | 87.2% | 0.818 | 0.656 | 0.752 |
| Cleaned | T1 | 92.3% | 0.885 | 0.720 | 0.787 |
| Cleaned | T3 | 97.0% | 0.955 | 0.937 | 0.967 |
Per class, against raw labels (T1 / T3):
| Class | Share of reference | Recall | Precision | F1 | IoU |
|---|---|---|---|---|---|
| Built-up | 14.5% | 0.850 / 0.871 | 0.905 / 0.903 | 0.876 / 0.887 | 0.780 / 0.797 |
| Agriculture | 27.2% | 0.884 / 0.900 | 0.871 / 0.895 | 0.877 / 0.898 | 0.781 / 0.814 |
| Forest & natural vegetation | 43.3% | 0.887 / 0.896 | 0.883 / 0.899 | 0.885 / 0.897 | 0.794 / 0.814 |
| Barren / wasteland | 14.3% | 0.741 / 0.750 | 0.951 / 0.936 | 0.833 / 0.833 | 0.714 / 0.713 |
| Water bodies & wetlands | 0.7% | 0.799 / 0.853 | 0.128 / 0.144 | 0.221 / 0.246 | 0.124 / 0.140 |
Overall agreement per test tile (raw labels, T1 / T3):
| Zone | Tiles |
|---|---|
| Deccan (Bellary) | 0.823 / 0.828 · 0.918 / 0.937 · 0.892 / 0.908 |
| Coast (Visakhapatnam) | 0.847 / 0.857 · 0.843 / 0.855 · 0.893 / 0.899 |
| Alluvial (Thanjavur) | 0.838 / 0.851 · 0.912 / 0.924 · 0.856 / 0.870 |
| Forest (Kanha) | 0.971 / 0.970 · 0.996 / 0.997 |
| Arid (Little Rann of Kutch) | 0.996 / 0.575 · 0.462 / 0.910 |
| Urban (Chennai) | 0.890 / 0.901 · 0.752 / 0.799 |
Calibration.
- The temperature (T = 2.1018) was fitted on 600,000 validation pixels, with one-date and three-date predictions pooled.
- It reduces ECE from 0.080 to 0.030.
Half precision. fp16 changes mean IoU by −0.0002 (T1) and −0.0001 (T3) compared with fp32.
Summary
- From a single date the model agrees with WorldCover-2021-derived labels on 85.9% of unseen pixels, and from three seasons on 87.2%.
- On pixels whose labels the spectra support, agreement is 92–97%.
- Four classes reach IoU 0.71–0.81.
- Water is limited mainly by a seasonally wet salt flat.
- Scores are calibrated, and fp16 inference loses nothing measurable.
Environmental Impact
Carbon emissions can be estimated using the Machine Learning Impact calculator presented in Lacoste et al. (2019).
- Hardware Type: NVIDIA A100-SXM4 80 GB
- Hours used: about 2 GPU-hours for fine-tuning (35 epochs); dataset building ran on CPU
- Cloud Provider: Google Colab
- Compute Region: not recorded
- Carbon Emitted: not measured. The GPU energy was at most about 0.85 kWh (400 W rated power × about 2.1 h).
Technical Specifications
Model Architecture and Objective
| Part | Detail |
|---|---|
| Encoder | OlmoEarth v1.2 Base: ViT, 12 blocks, embedding 768, patch size 4 (40 m tokens), one Sentinel-2 band set |
| Temporal pooling | masked attention over dates, hidden size 128; a token needs ≥ 50% valid pixels |
| Spectral stem | 64 channels from the clearest date at 10 m |
| Decoder | progressive U-Net, 128 channels (projection 256), GroupNorm |
| Head | 5 classes; softmax(logits / 2.1018) |
| Objective | 0.5 × class-weighted cross-entropy + 0.5 × Dice |
Compute Infrastructure
Hardware
- Training: NVIDIA A100 80 GB on Google Colab.
- Production: NVIDIA T4 (16 GB) running fp16, shared with other models. Loading takes 11.9 s, and peak memory in a run is about 1.3 GB.
Software
- Python 3.13, PyTorch 2.11 (CUDA 13.0) and
olmoearth-pretrain-minimal0.1.2. - Dataset building used
odc-stac,pystac-client,planetary-computerandrasterio.
Citation
If you use this model, please cite OlmoEarth and ESA WorldCover as well.
BibTeX:
@misc{munagapati2026raikouolmoearthindia,
author = {Munagapati, Parvathi Viswanath},
title = {Raikou OlmoEarth India LULC (5 classes)},
version = {0.1.0},
year = {2026},
publisher = {Hugging Face},
howpublished = {\url{https://huggingface.co/<your-username>/<this-repo>}}
}
@misc{herzog2025olmoearth,
author = {Herzog, Henry and Bastani, Favyen and Zhang, Yawen and Tseng, Gabriel and others},
title = {OlmoEarth: Stable Latent Image Modeling for Multimodal Earth Observation},
year = {2025},
eprint = {2511.13655},
archivePrefix = {arXiv},
doi = {10.48550/arXiv.2511.13655}
}
@misc{zanaga2022worldcover,
author = {Zanaga, Daniele and Van De Kerchove, Ruben and Daems, Dirk and others},
title = {ESA WorldCover 10 m 2021 v200},
year = {2022},
publisher = {Zenodo},
doi = {10.5281/zenodo.7254221}
}
APA:
- Munagapati, P. V. (2026). Raikou OlmoEarth India LULC (5 classes) (Version 0.1.0) [Computer software]. Hugging Face. https://huggingface.co//
- Herzog, H., Bastani, F., Zhang, Y., Tseng, G., et al. (2025). OlmoEarth: Stable latent image modeling for multimodal Earth observation (arXiv:2511.13655). https://doi.org/10.48550/arXiv.2511.13655
- Zanaga, D., Van De Kerchove, R., Daems, D., et al. (2022). ESA WorldCover 10 m 2021 v200 [Data set]. Zenodo. https://doi.org/10.5281/zenodo.7254221
Attribution:
- Contains modified Copernicus Sentinel data 2020–2021.
- ESA WorldCover 10 m 2021 v200, CC BY 4.0.
- Built on OlmoEarth v1.2 Base by Ai2, released under the OlmoEarth Artifact License.
Glossary
- Agreement: the share of pixels where the model and the WorldCover-derived label match. It is not accuracy, because the reference is itself a model-made map.
- T1 / T3: prediction from one date / from three seasonal dates.
- Cleaned labels: test pixels whose WorldCover label passes the spectral rule above.
- ECE: expected calibration error, the average gap between predicted confidence and observed agreement.
More Information
- This model is the land-cover engine of Raikou Optical, an extension feature of the Raikou platform.
- In Raikou Optical, a user draws an area in India, picks a Sentinel-2 date, and receives this model's map, its confidence and the WorldCover 2021 reference as GIS files.
- The model was built during an internship at the Department of Water Resources and Ocean Engineering, NITK Surathkal.
Model Card Authors
Parvathi Viswanath Munagapati
Model Card Contact
Please open a discussion on this repository.
Model tree for Trivo121/olmoearth_india_v1_2
Base model
allenai/OlmoEarth-v1_2-Base