File size: 6,381 Bytes
cf86dd0
aaad78d
cf86dd0
 
 
 
aaad78d
cf86dd0
 
 
 
aaad78d
cf86dd0
2cc93ff
 
aaad78d
 
 
 
2cc93ff
cf86dd0
 
 
 
aaad78d
cf86dd0
aaad78d
cf86dd0
aaad78d
cf86dd0
aaad78d
cf86dd0
aaad78d
cf86dd0
aaad78d
 
 
cf86dd0
aaad78d
cf86dd0
aaad78d
2cc93ff
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
eebaa98
 
 
2cc93ff
 
 
 
 
 
eebaa98
 
2cc93ff
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
---
license: mit
tags:
- seismic
- interpolation
- trace-interpolation
- reconstruction
- unet
- resunet
- attention-unet
- pytorch
- geophysics
library_name: pytorch
#datasets:
#- SEG C3 synthetic seismic dataset
metrics:
- mse
- snr
- psnr
- ssim
---

# Seismic Trace Interpolation Benchmark

This repository provides pretrained PyTorch checkpoints for deep-learning-based seismic trace interpolation on pre-stack shot gathers. The models are trained on the SEG C3 synthetic seismic dataset to reconstruct complete shot gathers from inputs with missing traces.

The task is formulated as a supervised reconstruction problem: given a masked shot gather, the network predicts the corresponding fully sampled gather and is trained using mean squared error against the original complete data.

## Task Description

Seismic trace interpolation aims to recover missing receiver traces caused by sparse, irregular, or incomplete acquisition. In this benchmark, missing traces are simulated by applying binary trace masks to complete shot gathers.

Given:

- a complete shot gather `x`
- a binary trace mask `m`
- a masked input `x_masked = x * m`

the model learns:

```text
f(x_masked) -> x
```

where `x` is the original fully sampled shot gather.

## Dataset

- **Source**: SEG C3 pre-stack synthetic seismic data
- **Number of shot gathers**: 9 regular shot gathers
- **Geometry**: 201 traces x 625 time samples per shot
- **Sampling interval**: `dt = 2 ms`
- **Split**: random patch-level 90:10 train/validation split

### Preprocessing

The data are preprocessed using:

1. Spherical divergence correction with power `1.2`
2. Global max-absolute normalization to `[-1, 1]`
3. Overlapping 2D patch extraction
4. Patch size: `128 traces x 256 time samples`
5. Patch overlap: `50%`

## Masking Modes

Two masking strategies are used to simulate different acquisition scenarios.

| Mode | Description |
|---|---|
| `uniform` | Keeps traces at a fixed stride, simulating regular decimation |
| `random` | Randomly removes traces according to the specified missing ratio, simulating irregular acquisition gaps |

## Missing Ratios and Checkpoint Counts

The following table shows the number of available trained checkpoints for each model and missing-ratio setting. Counts include available seed and mask-mode combinations.

| Missing Ratio | Attention UNet | UNet Base | ResUNet |
|---|---:|---:|---:|
| 30% | 6 | 6 | 6 |
| 50% | 6 | 6 | 6 |
| 70% | 6 | 6 | 6 |

Total checkpoint inventory:

| Model | Directory | Checkpoints |
|---|---|---:|
| Attention UNet | `unet_atten` | 18 |
| UNet Base | `unet_base` | 18 |
| ResUNet | `unet_res` | 18 |

## Model Architectures

All models use a U-Net-style encoder-decoder architecture with base channel width 32 and depth 4.

| Model | Key | Description |
|---|---|---|
| UNet Base | `unet_base` | Standard U-Net with encoder-decoder skip connections |
| ResUNet | `unet_res` | U-Net variant using residual convolutional blocks |
| Attention UNet | `unet_atten` | U-Net with additive attention gates on skip connections |

## Repository Structure

Each leaf directory corresponds to one trained experiment:

```text
models/
β”œβ”€β”€ unet_base/
β”‚   └── uniform/
β”‚       └── miss50/
β”‚           β”œβ”€β”€ seed42/
β”‚           β”‚   β”œβ”€β”€ best.pt
β”‚           β”‚   └── config.yaml
β”‚           β”œβ”€β”€ seed43/
β”‚           └── seed44/
β”œβ”€β”€ unet_res/
β”‚   └── ...
└── unet_atten/
    └── ...
```

Each `best.pt` file contains the checkpoint with the lowest validation loss for that experiment. The corresponding `config.yaml` stores the training and architecture configuration.

## Training Details

| Hyperparameter | Value |
|---|---|
| Loss | Mean squared error |
| Optimizer | AdamW |
| Learning rate | `1e-3` |
| Weight decay | `1e-4` |
| Scheduler | Cosine annealing |
| Minimum learning rate | `1e-6` |
| Epochs | 200 |
| Gradient clipping | 1.0 max norm |
| Batch size | 192 |
| Distributed training | 2 x NVIDIA RTX 4090, DDP |
| Masking modes | `uniform`, `random` |
| Missing ratios | 30%, 50%, 70% |
| Seeds | 42, 43, 44 |

## Usage

```python
import torch
from huggingface_hub import hf_hub_download

repo_id = "GeoBrain/seismic-interpolation"

model_key = "unet_res"      # one of: unet_base, unet_res, unet_atten
mask_mode = "uniform"       # one of: uniform, random
ratio = "50"                # one of: 30, 50, 70
seed = "42"

ckpt_path = hf_hub_download(
    repo_id=repo_id,
    filename=f"models/{model_key}/{mask_mode}/miss{ratio}/seed{seed}/best.pt",
)

state_dict = torch.load(
    ckpt_path,
    map_location="cpu",
    weights_only=True,
)

print(state_dict.keys())
```

Download the corresponding configuration file:

```python
config_path = hf_hub_download(
    repo_id=repo_id,
    filename=f"models/{model_key}/{mask_mode}/miss{ratio}/seed{seed}/config.yaml",
)
```

The `config.yaml` file should be used to reconstruct the exact model architecture before loading the checkpoint.

## Intended Use

These checkpoints are intended for:

- seismic trace interpolation research
- benchmarking deep-learning reconstruction models
- comparing U-Net, ResUNet, and Attention U-Net architectures
- studying regular versus irregular trace-missing patterns
- transfer learning or fine-tuning on related seismic interpolation tasks

## Limitations

- The models are trained on synthetic SEG C3 data and may not generalize directly to field data without fine-tuning.
- The benchmark uses patch-level random train/validation splitting, not a shot-level holdout split.
- The checkpoints are optimized for MSE reconstruction quality and may not preserve all geophysical attributes equally well.
- Performance may vary for acquisition geometries, frequency content, noise levels, or missing-trace patterns that differ from the training setup.

## Citation

If you use these checkpoints or the benchmark setup, please cite the relevant architecture papers and the SEG C3 dataset source.

## References

- Ronneberger et al., U-Net: Convolutional Networks for Biomedical Image Segmentation, MICCAI 2015
- He et al., Deep Residual Learning for Image Recognition, CVPR 2016
- Zhang et al., Image Denoising via Deep CNN, IEEE TIP 2017
- Oktay et al., Attention U-Net: Learning Where to Look for the Pancreas, MIDL 2018
- SEG C3 Velocity Model: https://wiki.seg.org/wiki/C3