--- library_name: diffusers pipeline_tag: image-to-image tags: - seismic-inversion - impedance-inversion - diffusion - ddpm - overthrust --- # Seismic-LDDPM Seismic-LDDPM is a latent DDPM pipeline for seismic impedance inversion. The pipeline takes a low-frequency impedance image (`dipin`) and a synthetic seismic record (`record`) and predicts the impedance image. This repository includes: - Diffusers-format model components: `vq_model`, `unet`, `scheduler`, and `condition_encoder`. - `SeismicImpInvLDDPMPipeline` in `codes/pipeline.py`. - A complete Overthrust benchmark sample at `data/Overthrust_trueimp.mat`. - Root `infer.py` and supporting inference code under `codes/`. ## Installation ```bash git clone https://huggingface.co/mally-2000/saii-cldm-synthetic cd saii-cldm-synthetic pip install -r requirements.txt ``` ## Overthrust Evaluation The Overthrust evaluation script is intentionally fixed to the bundled `data/Overthrust_trueimp.mat`. It cuts the full model into six `256 x 256` patches, synthesizes the seismic records and low-frequency impedance inputs, runs inference, stitches the six predictions back together, and computes the metrics. ```bash python codes/eval_overthrust.py \ --model . \ --output outputs/overthrust \ --num-inference-steps 1000 ``` Outputs: - `outputs/overthrust/full_target.npy` - `outputs/overthrust/full_prediction.npy` - `outputs/overthrust/full_reconstruction.npy` - `outputs/overthrust/comparison_impedance.png` - `outputs/overthrust/metrics_summary.json` ## Benchmark Result Evaluated locally on the bundled Overthrust benchmark with 1000 DDPM steps, `noise_snr=15`, `dipin_v=0.012`, `f0=30`, `phase=0`, `seed=1234`, and patch indices `[0, 1, 2, 3, 4, 5]`. | Space | PSNR | SSIM | PCC | RRE | NMSE | |---|---:|---:|---:|---:|---:| | Normalized | 30.7698 | 0.9339 | 0.9963 | 0.0435 | 0.001894 | | Impedance | 33.4413 | 0.9554 | 0.9957 | 0.0324 | 0.001050 | | VQ reconstruction | 37.7954 | 0.9677 | 0.9983 | 0.0209 | 0.000435 | ![Overthrust evaluation](assets/demo.png) ## Single-Sample Inference For a single default Overthrust patch: ```bash python infer.py ``` The script builds one Overthrust test sample internally, synthesizes the low-frequency impedance and seismic record, and saves `prediction.npy`, `target.npy`, and `comparison.png` under `outputs/infer_LDDPM`. For SAII-CLDM model-driven sampling: ```bash python infer.py CLDM ``` ## Python Usage ```python import torch from codes.pipeline import SeismicImpInvLDDPMPipeline pipe = SeismicImpInvLDDPMPipeline.from_pretrained( "mally-2000/saii-cldm-synthetic", torch_dtype=torch.float32, trust_remote_code=True, ).to("cuda") result = pipe( dipin=dipin, # torch.Tensor, BCHW record=record, # torch.Tensor, BCHW num_inference_steps=1000, seed=1234, ) prediction = result.impedance_samples ``` ## Notes - `codes/dataset.py` contains a lightweight `SeismicBase` and `OverthrustTrueimpDataset`; it does not depend on the original training repository's `ldm.data.seisimic`. - Synthetic record generation is seeded through the benchmark configuration so the published Overthrust evaluation is reproducible. - The bundled Overthrust file is used only as a compact benchmark input for reproducing this model's inference pipeline.