Land-cover model (OpenEarthMap classes, SatlasPretrain Swin-B)

A semantic-segmentation model that labels every pixel of an RGB image as one of the 8 OpenEarthMap classes. It was trained on real high-resolution aerial and satellite images. In the ADB super-resolution project we use it to test whether super-resolved Sentinel-2 images (2.5 m) can stand in for real high-resolution images. It is used in the SSTA workshop notebook demo2_use_cases.ipynb.

Model

Architecture satlaspretrain_models Model(num_channels=3, backbone=Backbone.SWINB, fpn=True, head=Head.SEGMENT, num_categories=8)
Initialisation SatlasPretrain Aerial_SwinB_SI backbone and FPN (Allen Institute for AI)
Training synthetic images (SyntheWorld), then fine-tuned on OpenEarthMap; the encoder was not frozen
Input red, green, blue surface reflectance (0–1), not rescaled or normalised; height and width multiples of 32
Output model(x)[0]: logits (B, 8, H, W); take the argmax
File landcover_oem_satlas_swinb_fp16.pth: {"model_state_dict": ...} with fp16 weights (cast to float32 before loading); 180 MB
sha256 d2d7b11f5d0ec892a9305b60f793ebe9362d72875bc6721de4b4472ef5ef0528

The fp16 file is the original fp32 checkpoint with the optimiser state removed and the weights stored in half precision. On a 2.5 m test image, 99.94 % of the pixels get the same class as with the original.

Classes (output index β†’ class): 0 bare land, 1 rangeland, 2 developed space, 3 road, 4 tree, 5 water, 6 agriculture, 7 building.

Usage

import torch
from satlaspretrain_models.model import Model
from satlaspretrain_models.utils import Backbone, Head

state = torch.load("landcover_oem_satlas_swinb_fp16.pth", map_location="cpu")["model_state_dict"]
model = Model(num_channels=3, multi_image=False, backbone=Backbone.SWINB, fpn=True,
              head=Head.SEGMENT, num_categories=8, weights=None)
model.load_state_dict({k: v.float() for k, v in state.items()})
model.eval()

x = torch.rand(1, 3, 384, 384) * 0.3          # RGB reflectance, 0-1
classes = model(x)[0].argmax(1)               # (1, 384, 384)

How well it works on super-resolved Sentinel-2

These are measured on two 2 km areas in the Philippines: Cebu City (images around 20 March 2026) and Nueva Ecija (around 15 March 2026). The scores are pixel F1 against public maps: Open Buildings footprints and OpenStreetMap roads, widened to typical road widths. They are lower than scores against expert labels would be.

F1 Sentinel-2 enlarged to 2.5 m Stage 1 Stage 2 (full model)
building, Cebu City 0.21 0.42 0.53
building, Nueva Ecija 0.15 0.36 0.55
road, Cebu City 0.01 0.14 0.20
road, Nueva Ecija 0.01 0.23 0.40

Limitations

  • It was trained on real high-resolution images, not on Sentinel-2. On plain 10 m Sentinel-2 it finds few buildings and roads, and it often labels flooded rice fields as water.
  • Results depend on the region. OpenEarthMap covers 97 regions in 44 countries.
  • Single buildings are not resolved at 2.5 m. Use the maps for questions about areas, such as screening or building density, and check them before acting on them.

Licence

OpenEarthMap labels carry the licence of their source images. Where the source is public domain or its licence is not stated, the labels are under CC BY-NC-SA 4.0 (see the dataset record). Because the model is derived from these labels, the weights are released under CC BY-NC-SA 4.0, for non-commercial use only. Please cite OpenEarthMap (Xia et al., WACV 2023) and SatlasPretrain (Bastani et al., ICCV 2023).

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