AdaSemSeg SimCLR Encoder β Seismic-Domain Pretrained ResNet-50
A ResNet-50 image encoder pretrained with SimCLR contrastive self-supervised learning on unlabeled 2D slices from three public seismic facies datasets (F3, Parihaka, Penobscot). It is the shared image-encoder initialization used by AdaSemSeg, ProtoSemSeg, and Baseline-2 in:
Saha, S. and Whitaker, R. AdaSemSeg: An Adaptive Few-shot Semantic Segmentation of Seismic Facies. IEEE Transactions on Geoscience and Remote Sensing, 2025. arXiv:2501.16760
Code: github.com/Surojit-Utah/AdaSemSeg β full pretraining details, augmentations, and hyperparameters (verified against the paper's Appendix B-A) are documented in pretraining/simclr/README.md.
Why use this
Fully annotated seismic volumes are expensive to produce, so there is no seismic equivalent of ImageNet to pretrain on with labels. This encoder learns seismic-domain representations from unlabeled data instead, and is intended as a drop-in initialization for any ResNet-based encoder-decoder segmentation architecture (U-Net, DeepLab, FPN, segmentation_models_pytorch, etc.) β not only for AdaSemSeg's own DGPNet.
Architecture
- Backbone: unmodified
torchvision.models.resnet50β no custom conv stem or channel modification - Input: single-channel seismic amplitude, min-max normalized to
[0, 255]and replicated to 3 channels (standard ImageNet-style input convention) - Resolution-agnostic (fully convolutional up to global average pooling); pretrained at 256Γ256 patches
Training data
35,648 patches extracted from the public F3 (Netherlands), Parihaka (New Zealand), and Penobscot (Canada) seismic facies datasets, along both inline and crossline directions. All data is publicly available β see the main repo's dataset section for Zenodo links.
Training details
| Hyperparameter | Value |
|---|---|
| Batch size | 32 |
| Optimizer | Adam |
| Learning rate | 3e-4 |
| Weight decay | 1e-4 |
| Temperature (Ο) | 0.07 |
| Epochs | 10 |
Augmentations (one sampled per view): RandomRotate (Β±20Β°), RandomHorizontalFlip, GaussianBlur (Ο β [0.1, 2.0]), GaussNoise (variance β [1e-4, 5e-2]), RandomResizedCrop, Brightness ([0.5, 1.5]), Contrast ([0.0, 2.0]).
Reaches 93.75% top-1 / 98.44% top-5 accuracy on the contrastive (instance-discrimination) pretraining task.
Usage
The checkpoint's state_dict is the full SimCLR wrapper (backbone + discarded projection head), so keys carry a backbone. prefix. Load only the encoder into a plain torchvision ResNet:
import torch, torchvision
from huggingface_hub import hf_hub_download
checkpoint_path = hf_hub_download(repo_id="Surojit-Utah/adasemseg-simclr-encoder", filename="simclr_resnet50_epoch10.pth.tar")
checkpoint = torch.load(checkpoint_path, map_location="cpu")
state_dict = checkpoint["state_dict"]
# Strip the SimCLR wrapper's "backbone." prefix and drop the projection head (backbone.fc.*)
encoder_state_dict = {
k.replace("backbone.", ""): v
for k, v in state_dict.items()
if k.startswith("backbone.") and not k.startswith("backbone.fc")
}
encoder = torchvision.models.resnet50(weights=None)
encoder.load_state_dict(encoder_state_dict, strict=False)
Citation
@article{saha2025adasemseg,
title={AdaSemSeg: An Adaptive Few-shot Semantic Segmentation of Seismic Facies},
author={Saha, Surojit and Whitaker, Ross},
journal={IEEE Transactions on Geoscience and Remote Sensing},
year={2025},
doi={10.1109/TGRS.2025.3595010}
}