S5-transformers / README.md
BiliSakura's picture
Upload 13 files
96e3a14 verified
|
Raw
History Blame Contribute Delete
4.34 kB
---
license: apache-2.0
language:
- en
tags:
- remote-sensing
- earth-observation
- self-supervised-learning
- semantic-segmentation
- feature-extraction
- vision
- s5
- s4p
- vit
- transformers
library_name: transformers
pipeline_tag: feature-extraction
---
# S5 Transformers Models
Hugging Face–compatible checkpoints converted from the official [S5](https://arxiv.org/abs/2508.12409) S4P pretrain weights. Each subfolder is a standalone model repo layout (`config.json`, `model.safetensors`, preprocessor, and remote code) for **encoder feature extraction** on optical remote sensing imagery.
## Model Description
These are ViT encoders pretrained with **S4P** (Semi-supervised Semantic Segmentation Pre-training) on [RS4P-1M](https://huggingface.co/datasets/lianglyu/R4P-1M). This collection currently bundles **2 converted backbone checkpoints**:
- **ViT-B:** ViT-Base/16, hidden size 768, 12 layers
- **ViT-L:** ViT-Large/16, hidden size 1024, 24 layers
Both checkpoints use `architecture: s4p_backbone` and expose the `s5-feature-extraction` pipeline. They are **encoder-only** weights (not UPerNet segmentation or MoE-MDF heads).
All folders ship self-contained remote code (`modeling_s5.py`, processor, pipeline) and load with `trust_remote_code=True`.
**Developed by:** [lianglyu / S5](https://huggingface.co/lianglyu/S5)
**Converted for Hugging Face by:** BiliSakura
**License (weights):** Apache 2.0
**Original paper:** [S5: Scalable Semi-Supervised Semantic Segmentation in Remote Sensing](https://arxiv.org/abs/2508.12409) (AAAI 2026 Oral)
## Available checkpoints
| Folder | Backbone | Hidden size | Layers | Heads | Patch | Image size | Original file |
|--------|----------|-------------|--------|-------|-------|------------|---------------|
| `ViT-B` | ViT-Base | 768 | 12 | 12 | 16 | 512 | `vit_b_s4p.pth` |
| `ViT-L` | ViT-Large | 1024 | 24 | 16 | 16 | 512 | `vit_l_s4p.pth` |
Original singular `.pth` files were converted and removed from this directory.
## Usage
Processors default to **`do_resize: false`**. Pass RGB images at native resolution; ImageNet mean/std normalization is applied when enabled.
```python
from transformers import pipeline
import numpy as np
REPO = "/path/to/S5-transformers"
pipe = pipeline(
task="s5-feature-extraction",
model=f"{REPO}/ViT-B",
trust_remote_code=True,
)
image = np.random.randint(0, 255, (512, 512, 3), dtype=np.uint8)
# Global pooled features
features = pipe(image, pool=True, return_tensors=True)
print(features.shape) # [1, 768] for ViT-B, [1, 1024] for ViT-L
# Dense feature map
featmap = pipe(image, pool=False, return_tensors=True)
print(featmap.shape) # [1, 768, 32, 32] for ViT-B, [1, 1024, 32, 32] for ViT-L
```
ViT-L:
```python
pipe = pipeline(
task="s5-feature-extraction",
model=f"{REPO}/ViT-L",
trust_remote_code=True,
)
features = pipe(image, pool=True, return_tensors=True)
print(features.shape) # [1, 1024]
```
To force 512×512 resize:
```python
features = pipe(
image,
pool=True,
return_tensors=True,
image_processor_kwargs={"do_resize": True},
)
```
Load components directly:
```python
from transformers import AutoModel, AutoImageProcessor
model = AutoModel.from_pretrained(f"{REPO}/ViT-B", trust_remote_code=True)
processor = AutoImageProcessor.from_pretrained(f"{REPO}/ViT-B", trust_remote_code=True)
```
## Normalization
The bundled image processor applies ImageNet mean/std normalization by default (`do_normalize=True`, `rescale_factor=1/255`). Inputs should be RGB optical imagery.
## Conversion
Checkpoints were converted with [`scripts/convert_s5_checkpoint.py`](https://github.com/lianglyu/S5-transformers) from the official release:
```bash
python scripts/convert_s5_checkpoint.py \
--input-path /path/to/vit_b_s4p.pth \
--output-dir /path/to/ViT-B \
--clean-output
```
For semantic segmentation heads, convert `vit_*_s4p_upernet.pth` or `s5_vit_*_moe_mdf_seg.pth` instead (task: `s5-semantic-segmentation`).
## Dependencies
- `transformers>=4.45.0`
- `torch>=2.1.0`
- `safetensors`
- `Pillow`
- `numpy`
## Citation
```bibtex
@article{S5,
title={S5: Scalable Semi-Supervised Semantic Segmentation in Remote Sensing},
author={Liang Lv and Di Wang and Jing Zhang and Lefei Zhang},
journal={arXiv preprint arXiv:2508.12409},
year={2025}
}
```