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

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.py writes 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-minimal 0.1.2.
  • Dataset building used odc-stac, pystac-client, planetary-computer and rasterio.

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:

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.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for Trivo121/olmoearth_india_v1_2

Finetuned
(5)
this model

Papers for Trivo121/olmoearth_india_v1_2