| --- |
| tags: |
| - seismic |
| - ground-roll |
| - denoising |
| - unet |
| - resunet |
| - dncnn |
| - attention-unet |
| - pytorch |
| library_name: pytorch |
| --- |
| |
| # 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 |
| |
| ```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 |
| |
| *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 |
| |