Sk-2103/Cryo-Bench

Benchmarking Foundation Models for Cryosphere Applications

Python

11

81 commits

updated Oct 4, 2026

See the code

README

Cryo-Bench 🧊

A Benchmark for Evaluating Geospatial Foundation Models on Cryosphere Applications

PANGAEA Hugging Face Dataset License: MIT

Cryo-Bench Overview

Cryo-Bench Overview

Cryo-Bench is a community benchmark that evaluates geospatial foundation models (GFMs) on six cryosphere segmentation datasets spanning five components: supraglacial debris, glacial lakes (two sensing configurations), sea ice, calving fronts, and Antarctic ice-shelf extent. It is built on top of the PANGAEA evaluation protocol using multi-sensor satellite imagery from Sentinel-1/2, Landsat-8, WorldView-2, and historical SAR missions.


πŸ“‹ Tasks & Datasets

Cryo-Bench includes six benchmark tasks covering five components of the cryosphere:

DatasetComponentLocationSensorsClassesAncillary DataPaperDownload
GSDDSupraglacial DebrisGlobalSentinel-2BinarySlope, Elevation, VelocityArticleZenodo
GLIDGlacial LakesHimalayasWorldView-2, Sentinel-2, Landsat-8, Gaofen-2Binaryβ€”ArticleZenodo
GLBGlacial Lakes (multi-source)High Mountain AsiaSentinel-2, Sentinel-1, terrain (11 bands)BinarySlope, ElevationArticleZenodo
SICDSea IceCanadian & Greenlandic ArcticSentinel-1MulticlassIncidence AngleArticleHuggingFace
CaFFeCalving FrontsGreenland, Alaska, Antarctic PeninsulaERS-1/2, Envisat, RADARSAT-1, ALOS PALSAR, TSX, TDX, Sentinel-1Multiclassβ€”ArticlePANGAEA
Shelf-BenchIce-Shelf ExtentAntarcticaSAR, Sentinel-1BinaryArticleZenodo

πŸš€ Installation & Quick Start

git clone https://github.com/Sk-2103/Cryo-Bench.git
cd Cryo-Bench
conda env create -f environment.yml
conda activate pangaea-bench

Download the dataset(s) you need from the links in the table above and note the local path you extract them to (<data_root>). pangaea/run.py is the entry point and takes a Hydra config for every axis (dataset, encoder, decoder, ...), so a full run looks like this:

python -m torch.distributed.run --standalone --nproc_per_node=1 pangaea/run.py \
  task=segmentation preprocessing=seg_default criterion=cross_entropy \
  dataset=sicd_rgb encoder=unet_encoder decoder=seg_unet \
  dataset.root_path=<data_root>/SICD work_dir=./work_dir/unet_sicd \
  finetune=true limited_label_train=1

That reproduces the U-Net/SICD cell of the table below (27.17 mIoU). A few things to swap out:

  • encoder is any file under configs/encoder/: dofa, terramind_large, croma_joint, vit_scratch, unet_encoder, ... For anything other than the U-Net baseline, use decoder=seg_upernet.
  • dataset is any file under configs/dataset/: gssd, glid, glb_random, sicd_sar, sicd_rgb, zone_mapping_sar, zone_mapping_optical, shelf_bench.
  • finetune=false freezes the encoder, the default evaluation regime for every GFM (the two from-scratch baselines always need finetune=true, since they have no pretrained weights). limited_label_train=0.1 runs the few-shot regime instead of the full training set.

See the paper for the full protocol (crop sizes, learning-rate schedule, normalization per dataset, evaluation regimes).


πŸ“ Repository Structure

Cryo-Bench/
β”œβ”€β”€ pangaea/            # evaluation framework
β”‚   β”œβ”€β”€ datasets/       # one module per dataset (gssd, glid, glb, sicd_tiled, zone_mapping_*, shelf_bench)
β”‚   β”œβ”€β”€ encoders/       # GFM wrappers (CROMA, DOFA, TerraMind, Prithvi, SatlasNet, Scale-MAE, SpectralGPT, SSL4EO-S12, ...) and the U-Net/ViT baselines
β”‚   β”œβ”€β”€ decoders/       # UPerNet (GFMs) and U-Net (baseline) segmentation heads
β”‚   β”œβ”€β”€ engine/         # trainer / evaluator
β”‚   └── utils/
β”œβ”€β”€ configs/             # Hydra configs, one subdirectory per axis
β”‚   β”œβ”€β”€ dataset/         # 8 configs, one per dataset/modality variant
β”‚   β”œβ”€β”€ encoder/         # 20 configs: 13 GFMs plus dataset-specific modality variants, and 2 baselines
β”‚   β”œβ”€β”€ decoder/         # seg_unet.yaml, seg_upernet.yaml
β”‚   └── preprocessing/, task/, criterion/, optimizer/, lr_scheduler/
└── assets/              # README images

πŸ† Benchmark Results

The table reports mIoU (↑) with frozen encoders and 100% training data, using the UPerNet decoder across all six datasets. Rows are ordered by six-dataset average mIoU. U-Net and ViT are trained from scratch. Avg Rank is the mean of a model's rank (1-15) on each of the six datasets individually, and can read differently from the ordering by Avg mIoU (e.g. DOFA has a better Avg Rank than RemoteCLIP despite a lower Avg mIoU).

Bold = best performance Β· Italic = second best

ModelGSDDGLIDGLBSICDCaFFeShelf-BenchAvg. mIoU ↑Avg Rank ↓
U-Net73.8991.5880.4627.1759.8282.9769.312.67
TerraMind74.6388.2679.9133.2746.6484.4667.863.17
RemoteCLIP73.4290.8978.0924.2556.6483.5967.815.17
DOFA72.9692.6179.3920.4150.7187.0867.194.83
GFM-Swin73.0089.6978.4214.1758.1285.6366.506.33
Scale-MAE73.4790.9179.169.7458.1983.2865.796.33
CROMA74.1578.5277.6821.8142.0381.1562.566.17
ViT74.4178.1479.8115.5840.2581.8661.676.00
S12-MoCo73.0375.5175.4519.8636.2174.9759.1710.00
SatlasNet73.7077.0374.7419.6233.9673.0058.6710.17
S12-MAE73.5175.7175.4312.2836.9975.9358.319.67
S12-Data2Vec73.6875.1974.5911.4935.9675.7957.7811.33
S12-DINO71.1975.6975.1712.7435.5875.2857.6111.67
Prithvi70.5271.1174.9612.5832.0174.4155.9313.50
SpectralGPT73.2270.8772.8214.3932.7066.7555.1213.00

πŸ“œ License

This project is licensed under the MIT License.


πŸ™ Acknowledgements

Cryo-Bench builds on the PANGAEA benchmark. We thank the developers of DOFA, TerraMind, Prithvi, SatlasNet, and all other foundation models included in this benchmark. We also thank the dataset authors of GSDD, GLID, GLB, SICD, CaFFe, and Shelf-Bench for making their data publicly available.

Sk-2103/Cryo-Bench

Benchmarking Foundation Models for Cryosphere Applications

Python

11

81 commits

updated Oct 4, 2026

See the code

README

Cryo-Bench 🧊

A Benchmark for Evaluating Geospatial Foundation Models on Cryosphere Applications

PANGAEA Hugging Face Dataset License: MIT

Cryo-Bench Overview

Cryo-Bench Overview

Cryo-Bench is a community benchmark that evaluates geospatial foundation models (GFMs) on six cryosphere segmentation datasets spanning five components: supraglacial debris, glacial lakes (two sensing configurations), sea ice, calving fronts, and Antarctic ice-shelf extent. It is built on top of the PANGAEA evaluation protocol using multi-sensor satellite imagery from Sentinel-1/2, Landsat-8, WorldView-2, and historical SAR missions.


πŸ“‹ Tasks & Datasets

Cryo-Bench includes six benchmark tasks covering five components of the cryosphere:

DatasetComponentLocationSensorsClassesAncillary DataPaperDownload
GSDDSupraglacial DebrisGlobalSentinel-2BinarySlope, Elevation, VelocityArticleZenodo
GLIDGlacial LakesHimalayasWorldView-2, Sentinel-2, Landsat-8, Gaofen-2Binaryβ€”ArticleZenodo
GLBGlacial Lakes (multi-source)High Mountain AsiaSentinel-2, Sentinel-1, terrain (11 bands)BinarySlope, ElevationArticleZenodo
SICDSea IceCanadian & Greenlandic ArcticSentinel-1MulticlassIncidence AngleArticleHuggingFace
CaFFeCalving FrontsGreenland, Alaska, Antarctic PeninsulaERS-1/2, Envisat, RADARSAT-1, ALOS PALSAR, TSX, TDX, Sentinel-1Multiclassβ€”ArticlePANGAEA
Shelf-BenchIce-Shelf ExtentAntarcticaSAR, Sentinel-1BinaryArticleZenodo

πŸš€ Installation & Quick Start

git clone https://github.com/Sk-2103/Cryo-Bench.git
cd Cryo-Bench
conda env create -f environment.yml
conda activate pangaea-bench

Download the dataset(s) you need from the links in the table above and note the local path you extract them to (<data_root>). pangaea/run.py is the entry point and takes a Hydra config for every axis (dataset, encoder, decoder, ...), so a full run looks like this:

python -m torch.distributed.run --standalone --nproc_per_node=1 pangaea/run.py \
  task=segmentation preprocessing=seg_default criterion=cross_entropy \
  dataset=sicd_rgb encoder=unet_encoder decoder=seg_unet \
  dataset.root_path=<data_root>/SICD work_dir=./work_dir/unet_sicd \
  finetune=true limited_label_train=1

That reproduces the U-Net/SICD cell of the table below (27.17 mIoU). A few things to swap out:

  • encoder is any file under configs/encoder/: dofa, terramind_large, croma_joint, vit_scratch, unet_encoder, ... For anything other than the U-Net baseline, use decoder=seg_upernet.
  • dataset is any file under configs/dataset/: gssd, glid, glb_random, sicd_sar, sicd_rgb, zone_mapping_sar, zone_mapping_optical, shelf_bench.
  • finetune=false freezes the encoder, the default evaluation regime for every GFM (the two from-scratch baselines always need finetune=true, since they have no pretrained weights). limited_label_train=0.1 runs the few-shot regime instead of the full training set.

See the paper for the full protocol (crop sizes, learning-rate schedule, normalization per dataset, evaluation regimes).


πŸ“ Repository Structure

Cryo-Bench/
β”œβ”€β”€ pangaea/            # evaluation framework
β”‚   β”œβ”€β”€ datasets/       # one module per dataset (gssd, glid, glb, sicd_tiled, zone_mapping_*, shelf_bench)
β”‚   β”œβ”€β”€ encoders/       # GFM wrappers (CROMA, DOFA, TerraMind, Prithvi, SatlasNet, Scale-MAE, SpectralGPT, SSL4EO-S12, ...) and the U-Net/ViT baselines
β”‚   β”œβ”€β”€ decoders/       # UPerNet (GFMs) and U-Net (baseline) segmentation heads
β”‚   β”œβ”€β”€ engine/         # trainer / evaluator
β”‚   └── utils/
β”œβ”€β”€ configs/             # Hydra configs, one subdirectory per axis
β”‚   β”œβ”€β”€ dataset/         # 8 configs, one per dataset/modality variant
β”‚   β”œβ”€β”€ encoder/         # 20 configs: 13 GFMs plus dataset-specific modality variants, and 2 baselines
β”‚   β”œβ”€β”€ decoder/         # seg_unet.yaml, seg_upernet.yaml
β”‚   └── preprocessing/, task/, criterion/, optimizer/, lr_scheduler/
└── assets/              # README images

πŸ† Benchmark Results

The table reports mIoU (↑) with frozen encoders and 100% training data, using the UPerNet decoder across all six datasets. Rows are ordered by six-dataset average mIoU. U-Net and ViT are trained from scratch. Avg Rank is the mean of a model's rank (1-15) on each of the six datasets individually, and can read differently from the ordering by Avg mIoU (e.g. DOFA has a better Avg Rank than RemoteCLIP despite a lower Avg mIoU).

Bold = best performance Β· Italic = second best

ModelGSDDGLIDGLBSICDCaFFeShelf-BenchAvg. mIoU ↑Avg Rank ↓
U-Net73.8991.5880.4627.1759.8282.9769.312.67
TerraMind74.6388.2679.9133.2746.6484.4667.863.17
RemoteCLIP73.4290.8978.0924.2556.6483.5967.815.17
DOFA72.9692.6179.3920.4150.7187.0867.194.83
GFM-Swin73.0089.6978.4214.1758.1285.6366.506.33
Scale-MAE73.4790.9179.169.7458.1983.2865.796.33
CROMA74.1578.5277.6821.8142.0381.1562.566.17
ViT74.4178.1479.8115.5840.2581.8661.676.00
S12-MoCo73.0375.5175.4519.8636.2174.9759.1710.00
SatlasNet73.7077.0374.7419.6233.9673.0058.6710.17
S12-MAE73.5175.7175.4312.2836.9975.9358.319.67
S12-Data2Vec73.6875.1974.5911.4935.9675.7957.7811.33
S12-DINO71.1975.6975.1712.7435.5875.2857.6111.67
Prithvi70.5271.1174.9612.5832.0174.4155.9313.50
SpectralGPT73.2270.8772.8214.3932.7066.7555.1213.00

πŸ“œ License

This project is licensed under the MIT License.


πŸ™ Acknowledgements

Cryo-Bench builds on the PANGAEA benchmark. We thank the developers of DOFA, TerraMind, Prithvi, SatlasNet, and all other foundation models included in this benchmark. We also thank the dataset authors of GSDD, GLID, GLB, SICD, CaFFe, and Shelf-Bench for making their data publicly available.