Feature Extraction
Transformers
Safetensors
English
remote-sensing
earth-observation
self-supervised-learning
satellite
multispectral
multimodal
anysat
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
| license: mit | |
| language: | |
| - en | |
| tags: | |
| - remote-sensing | |
| - earth-observation | |
| - self-supervised-learning | |
| - satellite | |
| - multispectral | |
| - multimodal | |
| - feature-extraction | |
| - anysat | |
| - transformers | |
| library_name: transformers | |
| pipeline_tag: feature-extraction | |
| # AnySat Transformers Models | |
| Hugging Face–compatible checkpoints converted from the official [AnySat](https://arxiv.org/abs/2503.16990) 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](https://github.com/gastruc/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](https://github.com/gastruc/AnySat) | |
| **Converted for Hugging Face by:** BiliSakura | |
| **License (weights):** MIT | |
| **Original paper:** [AnySat: One Earth Observation Model for Many Resolutions, Scales, and Modalities](https://arxiv.org/abs/2503.16990) (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`](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) | |
| ```python | |
| 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 | |
| ```python | |
| 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: | |
| ```python | |
| 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 | | |