tags:
- seismic
- ground-roll
- denoising
- unet
- resunet
- dncnn
- attention-unet
- pytorch
library_name: pytorch
Ground-Roll Attenuation Benchmark
Deep-learning-based coherent noise (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.71 | 15.81 | 0.9480 | 0.030624 | 0.026232 | 0.161964 |
| 3.0 | -6.83 | 6.27 | 0.9418 | 0.091871 | 0.236091 | 0.485892 |
| 5.0 | -11.27 | 1.83 | 0.9402 | 0.153118 | 0.655809 | 0.809820 |
| 7.0 | -14.19 | -1.09 | 0.9395 | 0.214366 | 1.285386 | 1.133749 |
| 9.0 | -16.37 | -3.27 | 0.9390 | 0.275613 | 2.124822 | 1.457677 |
Metrics computed on the full dataset in the original amplitude domain before normalization.
Model Architectures
- Attention UNet (
atten_unet) β U-Net with additive attention gates on skip connections (Oktay et al., 2018, MIDL). Base channels: 32, depth: 4. - DnCNN (
dncnn) β Flat 17-layer Conv-BN-ReLU stack with residual learning (Zhang et al., 2017, IEEE TIP). Base channels: 64.
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 (predicted noise vs. label noise) |
| Optimizer | AdamW (lr=1e-3, weight_decay=1e-4) |
| Scheduler | Cosine annealing (min_lr=1e-6) |
| Epochs | 200 |
| Gradient clipping | 1.0 (max norm) |
| Batch size | 196 |
| Distributed training | 2 Γ NVIDIA RTX 4090, DDP |
| 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 (SNR dB)
| Model | Params (M) | Level 1.0 | Level 3.0 | Level 5.0 | Level 7.0 | Level 9.0 |
|---|---|---|---|---|---|---|
| Raw (noisy) | β | 2.71 | β6.83 | β11.27 | β14.19 | β16.37 |
| UNet | 7.76 | 28.39Β±1.09 | 23.07Β±0.10 | 20.22Β±0.32 | 17.90Β±0.28 | 16.60Β±0.46 |
| ResUNet | 8.11 | 31.62Β±0.56 | 22.65Β±0.93 | 18.11Β±2.12 | 16.60Β±1.44 | 14.61Β±0.01 |
| DnCNN | 0.56 | 31.67Β±0.11 | 30.02Β±0.43 | 22.91Β±3.74 | β | β |
| Attention UNet | 7.85 | 28.79Β±0.46 | 23.10Β±1.00 | 19.66Β±0.22 | 17.57Β±0.11 | 16.61Β±0.19 |
Mean Β± std over 3 seeds. All models achieve 15β31 dB SNR improvement. DnCNN delivers the best performance at low-to-mid noise levels with the smallest footprint (0.56 M parameters). See the benchmark documentation for per-level detailed metrics (PSNR, SSIM, MAE, MSE, RMSE).
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