Skip to main content

OlmoEarth Pretrain Minimal

A minimal package for loading and initializing OlmoEarth models. This package contains only the code necessary to load models from Hugging Face or initialize them with random weights, without training or evaluation dependencies.

Installation

Option 1: Install from PyPI

pip install olmoearth-pretrain-minimal

Option 2: Install from source with uv

Install uv if you haven't already:

curl -LsSf https://astral.sh/uv/install.sh | sh

To install dependencies:

git clone git@github.com:allenai/olmoearth_pretrain_minimal.git
cd olmoearth_pretrain_minimal
uv sync

uv installs everything into a venv, so to keep using python commands you can activate uv's venv: source .venv/bin/activate. Otherwise, swap to uv run python.

Note: You must specify either --extra torch-cpu or --extra torch-cu128 to install PyTorch. This allows you to explicitly choose the CPU or GPU version regardless of your platform, which is especially useful for CI environments that need CPU-only builds on Linux.

Model Summary

Model Architecture Diagram

The OlmoEarth models are trained on three satellite modalities (Sentinel 2, Sentinel 1 and Landsat) and six derived maps (OpenStreetMap, WorldCover, USDA Cropland Data Layer, SRTM DEM, WRI Canopy Height Map, and WorldCereal).

Note: The model weights are released under the OlmoEarth Artifact License

Model Size v1 Weights v1.1 Weights Encoder Params (v1 / v1.1) Decoder Params
Nano link link 1.4M / 1.7M 800K
Tiny link link 6.2M / 12M 1.9M
Base link link 89M / 114M 30M
Large link 308M / — 53M

Usage

Loading Models from Hugging Face

The recommended way to load models is using the model loader, which downloads the model configuration from Hugging Face:

from olmoearth_pretrain_minimal import ModelID, load_model_from_id

# Load a model from Hugging Face with pre-trained weights
# - ModelID.OLMOEARTH_V1_NANO - 1.4M encoder params, 800K decoder params
# - ModelID.OLMOEARTH_V1_TINY - 6.2M encoder params, 1.9M decoder params
# - ModelID.OLMOEARTH_V1_BASE - 89M encoder params, 30M decoder params
# - ModelID.OLMOEARTH_V1_LARGE - 308M encoder params, 53M decoder params
# v1.1 models available at ModelID.{OLMOEARTH_V1_1_NANO, OLMOEARTH_V1_1_TINY, OLMOEARTH_V1_1_BASE}
model = load_model_from_id(ModelID.OLMOEARTH_V1_BASE, load_weights=True)

# Load with randomly initialized weights
model_with_weights = load_model_from_id(ModelID.OLMOEARTH_V1_NANO, load_weights=False)

Direct Model Initialization (Custom Configuration)

For custom configurations (e.g., custom modalities), you can directly instantiate the model class:

from olmoearth_pretrain_minimal import OlmoEarthPretrain_v1

# Initialize with custom modalities and settings
model = OlmoEarthPretrain_v1(
    model_size="nano",
    supported_modality_names=["sentinel2_l2a", "sentinel1", "landsat"],
    max_patch_size=8,
    max_sequence_length=12,
    drop_path=0.1,
)

Manual Weight Loading

If you have pre-trained weights in a separate file, you can load them manually:

from olmoearth_pretrain_minimal import ModelID, load_model_from_id
import torch

# Load model without weights
model = load_model_from_id(ModelID.OLMOEARTH_V1_NANO, load_weights=False)

# Load pre-trained weights from a separate file
weights = torch.load("path/to/weights.pth")
model.load_state_dict(weights)

Data Normalization

The model expects normalized input data. Use the Normalizer class to normalize your data before passing it to the model.

Note: Data must be provided with bands in the specific order expected by each modality. See the band order section below.

Sample Code

import torch
import numpy as np

from olmoearth_pretrain_minimal import load_model_from_id, ModelID, Normalizer
from olmoearth_pretrain_minimal.olmoearth_pretrain_v1.utils.constants import Modality
from olmoearth_pretrain_minimal.olmoearth_pretrain_v1.utils.datatypes import MaskedOlmoEarthSample

# Initialize normalizer
normalizer = Normalizer(std_multiplier=2.0)

# Prepare Sentinel-2 L2A data: (batch, height, width, time, bands)
# Bands must match Modality.SENTINEL2_L2A.band_order (12 bands)
sentinel2_data = np.random.rand(1, 128, 128, 12, 12).astype(np.float32)

# Normalize the data
normalized_sentinel2 = normalizer.normalize(Modality.SENTINEL2_L2A, sentinel2_data)

model = load_model_from_id(ModelID.OLMOEARTH_V1_BASE, load_weights=True)
model.eval()

# Create minimal sample (timestamps required, month must be long for embedding)
timestamps = torch.zeros(1, 12, 3, dtype=torch.long)
timestamps[:, :, 1] = torch.arange(12, dtype=torch.long)  # months 0-11

sample = MaskedOlmoEarthSample(
    timestamps=timestamps,
    sentinel2_l2a=torch.from_numpy(normalized_sentinel2).float(),
    sentinel2_l2a_mask=torch.zeros(1, 128, 128, 12, dtype=torch.long),
)

with torch.no_grad():
    output = model.encoder(sample, patch_size=8, input_res=10, fast_pass=True)

Expected Band Orders

The model expects data with bands in a specific order for each modality. Use Modality.<MODALITY_NAME>.band_order to get the correct order:

from olmoearth_pretrain_minimal.olmoearth_pretrain_v1.utils.constants import Modality

# Sentinel-2 L2A band order (12 bands)
print(Modality.SENTINEL2_L2A.band_order)
# ['B02', 'B03', 'B04', 'B08', 'B05', 'B06', 'B07', 'B8A', 'B11', 'B12', 'B01', 'B09']

# Sentinel-1 band order (2 bands)
print(Modality.SENTINEL1.band_order)
# ['vv', 'vh']

# Landsat band order (11 bands)
print(Modality.LANDSAT.band_order)
# ['B8', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B9', 'B10', 'B11']

# WorldCover band order (1 band)
print(Modality.WORLDCOVER.band_order)
# ['B1']

# SRTM band order (1 band)
print(Modality.SRTM.band_order)
# ['srtm']

Key points:

  • The last dimension of your data array must match the band order exactly
  • For multitemporal modalities (Sentinel-2, Sentinel-1, Landsat), data shape is (batch, height, width, time, bands)
  • For single-temporal modalities (WorldCover, SRTM, etc.), data shape is (batch, height, width, bands)

Note

For the full package with training and evaluation capabilities, see the main olmoearth_pretrain package.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

olmoearth_pretrain_minimal-0.0.6.tar.gz (76.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

olmoearth_pretrain_minimal-0.0.6-py3-none-any.whl (78.3 kB view details)

Uploaded Python 3

File details

Details for the file olmoearth_pretrain_minimal-0.0.6.tar.gz.

File metadata

File hashes

Hashes for olmoearth_pretrain_minimal-0.0.6.tar.gz
Algorithm Hash digest
SHA256 1eaaffd270749e2d614da4af405776d4e46d4c4e5760c7cf3b61104b8b00c43e
MD5 6e62c72d3ec6bdda2c7f380fe5bddee5
BLAKE2b-256 3bd10480b162b6c4bc7d1ce2f305dfc661b095acdef486e873a6f334ce442c5f

See more details on using hashes here.

Provenance

The following attestation bundles were made for olmoearth_pretrain_minimal-0.0.6.tar.gz:

Publisher: publish.yml on allenai/olmoearth_pretrain_minimal

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file olmoearth_pretrain_minimal-0.0.6-py3-none-any.whl.

File metadata

File hashes

Hashes for olmoearth_pretrain_minimal-0.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 57ff6566162eb152e6c4ef1ce1e1ca2dbff2a0a81f2a93d70416aef7cd2f5b2c
MD5 7005d88123e33f2138b93e7368fdc61d
BLAKE2b-256 3240a591f2f77fb580e18c58be070614b9e1f5a008f6f78297274a9b4e169fa4

See more details on using hashes here.

Provenance

The following attestation bundles were made for olmoearth_pretrain_minimal-0.0.6-py3-none-any.whl:

Publisher: publish.yml on allenai/olmoearth_pretrain_minimal

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page