--- 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.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 - **Attention UNet-Plus** (`atten_unet_plus`) — Wider Attention UNet variant. Base channels: 64, depth: 4. - **ResUNet-Plus** (`res_unet_plus`) — Wider ResUNet variant. Base channels: 64, depth: 4. - **UNet-Plus** (`unet_plus`) — Wider UNet variant. Base channels: 64, depth: 4. ### 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 Mean ± std over 3 seeds on the held-out test shot (FFID=9), evaluated on 2D-flattened data in the normalized domain. Raw (noisy) is the input before denoising. ### Noise Level 1.0 | Method | Params (M) | SNR (dB) | PSNR (dB) | SSIM | MAE | MSE | RMSE | | --- | :---: | :---: | :---: | :---: | :---: | :---: | :---: | | Raw (noisy) | — | 2.7129±0.0000 | 21.8322±0.0000 | 0.9527±0.0000 | 0.015312±0.000000 | 0.006558±0.000000 | 0.080982±0.000000 | | UNet | 7.76 | 28.3886±1.0929 | 47.5080±1.0930 | 0.9972±0.0004 | 0.000673±0.000129 | 0.000018±0.000004 | 0.004235±0.000524 | | ResUNet | 8.11 | 31.6226±0.5664 | 50.7420±0.5664 | 0.9980±0.0001 | 0.000659±0.000105 | 0.000008±0.000001 | 0.002907±0.000186 | | DnCNN | 0.14 | 19.7355±0.3250 | 38.8548±0.3250 | 0.9846±0.0014 | 0.004684±0.000236 | 0.000130±0.000010 | 0.011415±0.000425 | | Attention UNet | 7.85 | 29.4786±1.3513 | 48.5979±1.3514 | 0.9974±0.0007 | 0.000577±0.000109 | 0.000014±0.000004 | 0.003745±0.000557 | ### Noise Level 3.0 | Method | Params (M) | SNR (dB) | PSNR (dB) | SSIM | MAE | MSE | RMSE | | --- | :---: | :---: | :---: | :---: | :---: | :---: | :---: | | Raw (noisy) | — | -6.8295±0.0000 | 18.3104±0.0000 | 0.9477±0.0000 | 0.022968±0.000000 | 0.014756±0.000000 | 0.121473±0.000000 | | UNet | 7.76 | 23.0729±0.0993 | 48.2128±0.0994 | 0.9961±0.0001 | 0.000676±0.000022 | 0.000015±0.000000 | 0.003885±0.000044 | | ResUNet | 8.11 | 22.6469±0.9303 | 47.7869±0.9303 | 0.9924±0.0015 | 0.001194±0.000660 | 0.000017±0.000003 | 0.004095±0.000424 | | DnCNN | 0.14 | 17.2389±0.2322 | 42.3788±0.2322 | 0.9883±0.0008 | 0.002676±0.000161 | 0.000058±0.000003 | 0.007606±0.000205 | | Attention UNet | 7.85 | 24.3939±1.2177 | 49.5338±1.2177 | 0.9964±0.0011 | 0.000630±0.000141 | 0.000011±0.000003 | 0.003358±0.000453 | ### Noise Level 5.0 | Method | Params (M) | SNR (dB) | PSNR (dB) | SSIM | MAE | MSE | RMSE | | --- | :---: | :---: | :---: | :---: | :---: | :---: | :---: | | Raw (noisy) | — | -11.2665±0.0000 | 17.3952±0.0000 | 0.9466±0.0000 | 0.025520±0.000000 | 0.018217±0.000000 | 0.134970±0.000000 | | UNet | 7.76 | 20.2195±0.3210 | 48.8813±0.3210 | 0.9958±0.0001 | 0.000656±0.000033 | 0.000013±0.000001 | 0.003599±0.000133 | | ResUNet | 8.11 | 18.1078±2.1170 | 46.7695±2.1170 | 0.9898±0.0021 | 0.001265±0.000143 | 0.000023±0.000011 | 0.004679±0.001134 | | DnCNN | 0.14 | 15.5662±0.2235 | 44.2280±0.2236 | 0.9898±0.0006 | 0.002042±0.000221 | 0.000038±0.000002 | 0.006147±0.000159 | | Attention UNet | 7.85 | 21.9546±1.0678 | 50.6163±1.0678 | 0.9965±0.0011 | 0.000618±0.000068 | 0.000009±0.000002 | 0.002961±0.000359 | ### Noise Level 7.0 | Method | Params (M) | SNR (dB) | PSNR (dB) | SSIM | MAE | MSE | RMSE | | --- | :---: | :---: | :---: | :---: | :---: | :---: | :---: | | Raw (noisy) | — | -14.1891±0.0000 | 16.9715±0.0000 | 0.9461±0.0000 | 0.026796±0.000000 | 0.020084±0.000000 | 0.141719±0.000000 | | UNet | 7.76 | 17.8984±0.2809 | 49.0590±0.2809 | 0.9955±0.0003 | 0.000620±0.000054 | 0.000012±0.000001 | 0.003526±0.000114 | | ResUNet | 8.11 | 16.6023±1.4399 | 47.7628±1.4399 | 0.9895±0.0039 | 0.001264±0.000417 | 0.000017±0.000005 | 0.004128±0.000649 | | DnCNN | 0.14 | 15.1741±0.1268 | 46.3346±0.1268 | 0.9925±0.0003 | 0.001628±0.000134 | 0.000023±0.000001 | 0.004823±0.000071 | | Attention UNet | 7.85 | 17.9454±2.7925 | 49.1059±2.7925 | 0.9947±0.0031 | 0.000686±0.000241 | 0.000014±0.000008 | 0.003623±0.001098 | ### Noise Level 9.0 | Method | Params (M) | SNR (dB) | PSNR (dB) | SSIM | MAE | MSE | RMSE | | --- | :---: | :---: | :---: | :---: | :---: | :---: | :---: | | Raw (noisy) | — | -16.3720±0.0000 | 16.7268±0.0000 | 0.9458±0.0000 | 0.027561±0.000000 | 0.021248±0.000000 | 0.145768±0.000000 | | UNet | 7.76 | 16.5997±0.4636 | 49.6984±0.4636 | 0.9956±0.0005 | 0.000673±0.000096 | 0.000011±0.000001 | 0.003277±0.000177 | | ResUNet | 8.11 | 13.8944±1.2448 | 46.9932±1.2448 | 0.9873±0.0053 | 0.001799±0.000734 | 0.000021±0.000006 | 0.004502±0.000670 | | DnCNN | 0.14 | 14.8737±0.1844 | 47.9725±0.1845 | 0.9942±0.0003 | 0.001366±0.000120 | 0.000016±0.000001 | 0.003994±0.000085 | | Attention UNet | 7.85 | 15.7861±2.7603 | 48.8849±2.7604 | 0.9940±0.0033 | 0.000822±0.000303 | 0.000015±0.000008 | 0.003715±0.001128 | ## 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