Ground-Roll Attenuation Benchmark
Deep-learning-based ground-roll suppression on pre-stack seismic shot gathers, using the SEG C3 synthetic dataset.
Task
Given a noisy shot gather contaminated by dispersive ground-roll noise, the model predicts the additive noise component. The denoised signal is obtained by:
denoised = noisy_input - predicted_noise
This is a paired regression task trained with a noise-label objective (the ground-truth noise component). The supervision target is the residual between the noisy input and the clean reference.
Dataset
- Source: SEG C3 pre-stack synthetic data, 9 regular shot gathers
- Geometry: 201 traces Γ 625 time samples per shot, dt = 2 ms
- Noise modeling: Reflection signals modeled with the acoustic wave equation; ground roll modeled with the elastic wave equation to capture its dispersive, low-velocity character
- Split: Shot-level (FFID) sequential 7:1:1 β 7 training shots, 1 validation, 1 held-out test
Noise Intensity Levels
Five ground-roll intensity levels produce paired noisy / noise-label records:
| Level | SNR (dB) | PSNR (dB) | SSIM | MAE | MSE | RMSE |
|---|---|---|---|---|---|---|
| 1.0 | 2.7129 | 21.8322 | 0.9527 | 0.015312 | 0.006558 | 0.080982 |
| 3.0 | -6.8295 | 18.3104 | 0.9477 | 0.022968 | 0.014756 | 0.121473 |
| 5.0 | -11.2665 | 17.3952 | 0.9466 | 0.025520 | 0.018217 | 0.134970 |
| 7.0 | -14.1891 | 16.9715 | 0.9461 | 0.026796 | 0.020084 | 0.141719 |
| 9.0 | -16.3720 | 16.7268 | 0.9458 | 0.027561 | 0.021248 | 0.145768 |
Metrics computed on the test set (2D flattened shot gathers) in the normalized domain before denoising.
Model Architectures
- DFB-CNN (
dfb_cnn) β Dual-Filter-Bank CNN with two DnCNN-style subnetworks (5Γ5 kernel for low-freq, 3Γ3 for high-freq) operating in the radial-trace (RT) domain. Low-freq CNN: 9 layers, 100 feat; High-freq CNN: 5 layers, 64 feat.
Preprocessing
- Normalization:
max_abs, global scope β the entire dataset scaled to [-1, 1] - Patching: Overlapping 2D patches (128 Γ 256) with 50% overlap, channel-last format (1, H, W)
Repository Structure
models/
βββ unet/
β βββ level1.0_seed42/
β β βββ best.pt # Best checkpoint (minimum validation loss)
β β βββ config.yaml # Full training configuration
β βββ level1.0_seed43/
β βββ level1.0_seed44/
β βββ level3.0_seed42/
β βββ ...
βββ res_unet/
βββ ...
Each subdirectory corresponds to one experiment: a model architecture trained at a specific noise level with a specific random seed.
Training Details
| Hyperparameter | Value |
|---|---|
| Loss | MSE (noise-prediction models) / GAN+L1 (pix2pix) / L1 (DDPM) / hybrid MSE+AFM (enhanced) |
| Optimizer | Adam / AdamW (lr=1e-4β1e-3, varies per model) |
| Scheduler | Cosine annealing (min_lr=1e-6) |
| Epochs | 100β200 (varies per model) |
| Gradient clipping | 1.0 (max norm) |
| Seeds | 42, 43, 44 per experiment |
Usage
import torch
from huggingface_hub import hf_hub_download
# Download a checkpoint
repo = "GeoBrain/coherent-noise-attenuation"
model_key = "res_unet"
level = "3.0"
seed = "42"
ckpt_path = hf_hub_download(
repo_id=repo,
filename=f"models/{model_key}/level{level}_seed{seed}/best.pt",
)
# Load state dict
state_dict = torch.load(ckpt_path, map_location="cpu", weights_only=True)
# For full model loading, instantiate the corresponding architecture
# and load the state dict (see config.yaml for exact architecture params).
See the companion benchmark documentation for detailed experimental setup and full evaluation results.
Results
Results pending β run batch_evaluate.py to populate.
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 (DnCNN), 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