Downloads · 30 days
0
BiliSakura/AnySat-transformers
AnySat-transformers is a feature extraction model from BiliSakura. Use it when you need embeddings to search or compare text. It is set up for transformers. The card lists the license as mit.
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 m…
Downloads · 30 days
0
Access
Public
Updated Jul 8, 2026
Repo size
504 MB
Likes
0
Public
Click a slice to open those files.
.safetensors504 MB · 100%
From the Hugging Face model README
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.
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)
| 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).
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.
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])
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,
)
AnySatModel returns BaseModelOutputWithPooling, so the registered image-feature-extraction task also works:
pipe = pipeline(
task="image-feature-extraction",
model=MODEL,
trust_remote_code=True,
)
| 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 | 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 |