Skip to content

Feature request: add IFWI / implicit neural representation FWI support #9

@liudonguuu-boop

Description

@liudonguuu-boop

Summary

Please consider adding IFWI (Implicit Full Waveform Inversion) support to SWEEP, where the inversion model is parameterized by an implicit neural representation (INR), such as an MLP/SIREN coordinate network, instead of directly optimizing a grid tensor.

Motivation

SWEEP already provides differentiable wave-equation propagators and FWI examples for Torch/JAX/C++/CUDA backends. An IFWI example would make it easier to use SWEEP as the physics engine while optimizing neural model parameters through autograd.

Potential use cases:

  • velocity-model parameterization with coordinate networks
  • implicit regularization for ill-posed FWI
  • compact model representation for 2D/3D inversion
  • comparison between grid-parameter FWI and neural-parameter IFWI

Proposed scope

A minimal implementation could include:

  1. A small INR model module, e.g. coordinate MLP or SIREN.
  2. A mapping from normalized spatial coordinates to model tensors, e.g. vp = f_theta(z, x) for 2D acoustic FWI.
  3. A Torch IFWI example based on the existing Marmousi acoustic FWI workflow.
  4. Clear parameter constraints, e.g. bounded velocity via sigmoid or clamp.
  5. A documented training loop showing gradients flowing through PropTorch into the INR parameters.
  6. Optional comparison plots against direct grid-tensor FWI.

Suggested example API

coords = make_normalized_grid(shape, device=device)
net = SirenVelocityModel(...).to(device)

raw = net(coords).reshape(shape)
vp = vmin + (vmax - vmin) * torch.sigmoid(raw)

syn = solver(wavelet, sources, receivers, models=[vp])
loss = torch.mean((syn - observed) ** 2)
loss.backward()
optimizer.step()

Acceptance criteria

  • A runnable 2D acoustic IFWI example.
  • Documentation explaining how IFWI differs from the existing grid-based FWI examples.
  • Works at least with PropTorch(..., backend="torch", impl="eager").
  • Notes on compatibility or limitations for impl="c", CUDA boundary saving, and JAX.

Related existing functionality

Current SWEEP examples cover conventional acoustic/elastic FWI, source-encoding FWI, and multi-GPU FWI, but there does not appear to be an IFWI/INR/SIREN-style model-parameterization example yet.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions