MAESTRO Transformers Models

Hugging Face–compatible checkpoints converted from the official MAESTRO Lightning pretraining weights. Each subfolder is a standalone model repo (config.json, model.safetensors, processor, pipeline, and remote code) for multimodal Earth observation feature extraction.

Model Description

MAESTRO is a masked autoencoder for multimodal, multitemporal, and multispectral Earth Observation data. These checkpoints are the published base (medium) encoders pretrained on FLAIR-HUB and S2-NAIP-urban.

Developed by: IGNF / MAESTRO Authors
Converted for Hugging Face by: BiliSakura
License (weights): Apache 2.0
Original paper: Masked Autoencoders for Multimodal, Multitemporal, and Multispectral Earth Observation Data (WACV 2026)

Available checkpoints

Folder Pretraining dataset Embed dim Depth Heads Modalities
maestro-flair-hub-base FLAIR-HUB 768 12 12 aerial, spot, dem, s2, s1_asc, s1_des
maestro-s2-naip-urban-base S2-NAIP-urban 768 12 12 aerial, spot, s2, s1

Legacy source: models/raw/MAESTRO_*_base/pretrain-epoch=*.ckpt (see each folder's conversion_manifest.json).

Usage

Inputs are normalized by the processor using each modality's norm_fac from preprocessor_config.json. Time-series modalities require {modality}_dates with shape (batch, dates, 3) as [year, day_of_year, hour].

Image feature extraction pipeline

from transformers import pipeline
import numpy as np

MODEL = "/path/to/MAESTRO-transformers/maestro-flair-hub-base"

pipe = pipeline(
    task="image-feature-extraction",
    model=MODEL,
    trust_remote_code=True,
)

# Aerial image: (B, T, C, H, W)
aerial = np.random.rand(1, 1, 4, 512, 512).astype(np.float32)

features = pipe(
    aerial=aerial,
    ref_date=[2020.0, 180.0, 12.0],
    pool=True,
    return_tensors=True,
)
print(features.shape)  # torch.Size([1, 768])

Multimodal example (FLAIR-HUB)

pipe = pipeline(
    task="image-feature-extraction",
    model="/path/to/maestro-flair-hub-base",
    trust_remote_code=True,
)

aerial = np.random.rand(1, 1, 4, 512, 512).astype(np.float32)
s2 = np.random.rand(1, 16, 10, 10, 10).astype(np.float32)
s2_dates = np.tile(np.array([[2020, 120, 10]], dtype=np.float32), (1, 16, 1))

features = pipe(
    aerial=aerial,
    s2=s2,
    s2_dates=s2_dates,
    ref_date=[2020.0, 180.0, 12.0],
    pool=True,
    return_tensors=True,
)
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

Paper for BiliSakura/MAESTRO-transformers