Instructions to use BiliSakura/AnySat-transformers with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use BiliSakura/AnySat-transformers with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("feature-extraction", model="BiliSakura/AnySat-transformers")# Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("BiliSakura/AnySat-transformers", dtype="auto") - Notebooks
- Google Colab
- Kaggle
AnySat Transformers Models
Hugging Face–compatible checkpoints converted from the official AnySat GeoPlex-pretrained 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
AnySat is a scale-adaptive, multimodal Earth Observation foundation model supporting 11 sensor modalities (aerial, Sentinel-1/2, Landsat, MODIS, etc.) at variable resolutions. The anysat-base checkpoint is the published base encoder (768-dim, 6 layers, 12 heads).
All hyperparameters live in config.json and preprocessor_config.json — Python remote code does not embed global defaults.
Developed by: AnySat Authors
Converted for Hugging Face by: BiliSakura
License (weights): MIT
Original paper: AnySat: One Earth Observation Model for Many Resolutions, Scales, and Modalities (CVPR 2025 Highlight)
Available checkpoints
| Folder | Size | Embed dim | Depth | Heads | Modalities |
|---|---|---|---|---|---|
anysat-base |
base | 768 | 6 | 12 | 11 |
Legacy source: models/raw/AnySat_full.pth (see conversion_manifest.json).
Usage
Inputs must be normalized (data - mean) / std per modality when normalize=True in the processor. Set normalization_stats in preprocessor_config.json for your dataset statistics.
Custom pipeline (recommended)
from transformers import pipeline
import numpy as np
MODEL = "/path/to/AnySat-transformers/anysat-base"
pipe = pipeline(
task="anysat-feature-extraction",
model=MODEL,
trust_remote_code=True,
)
# Sentinel-2 time series: (B, T, C, H, W)
s2 = np.random.randn(1, 4, 10, 32, 32).astype(np.float32)
dates = np.array([[100, 120, 140, 160]])
# Tile features (CLS token)
features = pipe(s2=s2, s2_dates=dates, patch_size=10, pool=True, return_tensors=True)
print(features.shape) # torch.Size([1, 768])
# Patch features
patch_features = pipe(s2=s2, s2_dates=dates, patch_size=10, output="patch", return_tensors=True)
print(patch_features.shape) # torch.Size([1, 1024, 768])
Multimodal example
pipe = pipeline(task="anysat-feature-extraction", model=MODEL, trust_remote_code=True)
s2 = np.random.randn(1, 4, 10, 32, 32).astype(np.float32)
s1 = np.random.randn(1, 4, 3, 32, 32).astype(np.float32)
features = pipe(
s2=s2,
s2_dates=np.array([[100, 120, 140, 160]]),
s1=s1,
s1_dates=np.array([[100, 120, 140, 160]]),
patch_size=10,
pool=True,
return_tensors=True,
)
Built-in ImageFeatureExtractionPipeline
AnySatModel returns BaseModelOutputWithPooling, so the registered image-feature-extraction task also works:
pipe = pipeline(
task="image-feature-extraction",
model=MODEL,
trust_remote_code=True,
)
Supported modalities
| Key | Type | Channels | Resolution |
|---|---|---|---|
aerial |
image | 4 | 0.2 m |
aerial-flair |
image | 5 | 0.2 m |
spot |
image | 3 | 1 m |
naip |
image | 4 | 1.25 m |
s2 |
time series | 10 | 10 m |
s1-asc, s1 |
time series | 2–3 | 10 m |
l7, l8 |
time series | 6–11 | 10–30 m |
alos |
time series | 3 | 30 m |
modis |
time series | 7 | 250 m |
Time-series modalities require {modality}_dates (day-of-year, 0–364). Images must be square. patch_size is in meters (internally divided by 10).
Output modes
output |
Shape | Description |
|---|---|---|
tile |
[B, 768] |
CLS / global embedding (pool=True) |
patch |
[B, H*W, 768] |
Patch tokens |
dense |
high-res map | Dense features for segmentation |
all |
all tokens | Full token sequence |