| --- |
| 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 |
|
|
| ```python |
| 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 |
|
|