HuggingFace Transformers version of RSBuilding ViT-Base model (ViTSAM_Normal), converted from MMCV format to SamVisionModel format.
When loading this model, you may see messages about missing neck module keys (typically ~6 keys). This is expected and normal.
You may also see messages about missing buffer keys. These are buffers computed dynamically:
1from transformers import SamVisionModel, AutoImageProcessor
2from PIL import Image
3import torch
4
5# Load model and processor
6model = SamVisionModel.from_pretrained("BiliSakura/RSBuilding-ViT-B")
7processor = AutoImageProcessor.from_pretrained("BiliSakura/RSBuilding-ViT-B")
8
9# Load and process image
10image = Image.open("your_image.jpg")
11inputs = processor(image, return_tensors="pt")
12
13# Forward pass
14with torch.no_grad():
15 outputs = model(**inputs)
16
17# Get features
18# outputs.last_hidden_state: (batch_size, num_patches, hidden_size)
19# outputs.pooler_output: (batch_size, hidden_size) - pooled representation
20features = outputs.last_hidden_state
21pooled_features = outputs.pooler_output
22
23print(f"Feature shape: {features.shape}")
24print(f"Pooled feature shape: {pooled_features.shape}")
1from transformers import SamVisionModel, AutoImageProcessor
2import torch
3
4model = SamVisionModel.from_pretrained("BiliSakura/RSBuilding-ViT-B")
5processor = AutoImageProcessor.from_pretrained("BiliSakura/RSBuilding-ViT-B")
6
7# Process image
8image = Image.open("your_image.jpg")
9inputs = processor(image, return_tensors="pt")
10
11# Extract features
12with torch.no_grad():
13 outputs = model(**inputs)
14
15# Use pooled features for classification/regression
16features = outputs.pooler_output # Shape: (1, 768)
17
18# Or use last hidden state for dense prediction tasks
19spatial_features = outputs.last_hidden_state # Shape: (1, num_patches, 768)
20
21# Access neck output (after channel reduction to 256)
22# Note: This requires accessing model internals
23neck_output = model.vision_encoder.neck(outputs.last_hidden_state) # Shape: (1, 256, H, W)
1from transformers import SamVisionModel
2import torch
3
4model = SamVisionModel.from_pretrained("BiliSakura/RSBuilding-ViT-B")
5
6# Option 1: Freeze backbone, train only neck
7for param in model.vision_encoder.encoder.parameters():
8 param.requires_grad = False
9for param in model.vision_encoder.neck.parameters():
10 param.requires_grad = True
11
12# Option 2: Initialize neck from pretrained SAM
13from transformers import SamVisionModel as PretrainedSAM
14pretrained_sam = PretrainedSAM.from_pretrained("facebook/sam-vit-base")
15model.vision_encoder.neck.load_state_dict(pretrained_sam.vision_encoder.neck.state_dict())
1@article{wangRSBuildingGeneralRemote2024a,
2 title = {{{RSBuilding}}: {{Toward General Remote Sensing Image Building Extraction}} and {{Change Detection With Foundation Model}}},
3 shorttitle = {{{RSBuilding}}},
4 author = {Wang, Mingze and Su, Lili and Yan, Cilin and Xu, Sheng and Yuan, Pengcheng and Jiang, Xiaolong and Zhang, Baochang},
5 year = {2024},
6 journal = {IEEE Transactions on Geoscience and Remote Sensing},
7 volume = {62},
8 pages = {1--17},
9 issn = {1558-0644},
10 doi = {10.1109/TGRS.2024.3439395},
11 keywords = {Building extraction,Buildings,change detection (CD),Data mining,Feature extraction,federated training,foundation model,Image segmentation,Remote sensing,remote sensing images,Task analysis,Training}
12}