探索深度学习的地震波传播:Deepwave
项目地址:https://gitcode.com/gh_mirrors/de/deepwave
项目简介
Deepwave是一款基于PyTorch的开源库,专为地震成像与反演设计,提供了波动力学模型的前向建模和后向传播功能。这个工具能够模拟波的传播以生成合成数据,进行反射波层析成像(RTM/LSRTM)、其他模型参数估计(全波形反演FWI)以及初始波场或源波let的计算。通过集成到更复杂的操作链中,Deepwave使得端到端的前向和后向传播变得轻而易举,让PyTorch的自动微分机制轻松处理复杂的梯度计算。
安装Deepwave非常简单,首先在PyTorch官网安装PyTorch,然后执行pip install deepwave
即可。详细的使用方法和示例可以在官方文档中找到,也可以观看有关Deepwave的视频概览来快速上手。
技术解析
Deepwave支持二维常密度声学/标量波方程(常规和Born建模)以及二维弹性波方程(P-SV)。它可以运行在CPU和适当的GPU上,不仅能够计算最终波场和接收器数据相对于模型参数(如速度、散射势等)、初始波场和源振幅的梯度,而且使用了Pasalic和McGarry的PML方法实现准确的吸收边界,保证了在标量波传播器中的模拟精度。对于弹性波传播器,则采用了C-PML结合W-AFDA自由表面方法,使边界条件更加真实。
用户可以自定义有限差分的精度,独立设置每条边界的PML宽度,甚至在任意侧实现无PML的自由表面。此外,它还实现了局部提取功能,仅对当前需要传播的源和接收器附近的区域进行运算,避免不必要的计算。
应用场景
Deepwave的应用广泛,尤其适合以下领域:
- 地震成像:使用Deepwave生成的合成数据,可以帮助研究人员进行地震图像重建。
- 反演研究:其强大的后向传播功能,可用于全波形反演(FWI),以确定地下结构的详细特征。
- 教育培训:作为教学工具,帮助学生和研究者理解波动力学模拟和自动微分原理。
项目特点
- 灵活且易于扩展的API,允许用户自定义目标函数或输入生成函数。
- 支持多平台和硬件加速,兼顾CPU和GPU性能。
- 自动化的局部模型提取,提高计算效率。
- 提供Hessian矩阵计算,用于高级优化策略。
- 示例代码简洁明了,便于快速上手和实践。
以下是一个简单的示例,展示了如何创建一个速度模型,从左上角的源传播波到右上方的接收器,计算目标函数,并进行梯度反传:
import torch
import deepwave
import matplotlib.pyplot as plt
v = 1500 * torch.ones(100, 100)
v[50:] = 2000
v.requires_grad_()
out = deepwave.scalar(
v, grid_spacing=4, dt=0.004,
source_amplitudes=deepwave.wavelets.ricker(25, 200, 0.004, 0.06).reshape(1, 1, -1),
source_locations=torch.tensor([[[0, 0]]]),
receiver_locations=torch.tensor([[[0, 99]]])
)
(out[-1]**2).sum().backward()
_, ax = plt.subplots(1, 3, figsize=(9, 3))
ax[0].imshow(v.detach())
ax[0].set_title("速度模型")
ax[1].plot(out[-1].detach().flatten())
ax[1].set_title("接收器数据")
ax[2].imshow(v.grad.detach(), vmin=-1e-5, vmax=1e-5)
ax[2].set_title("梯度")
加入Deepwave的世界,用深度学习的力量推动你的地震成像与反演研究进入新的篇章!
引用 如果你使用了Deepwave,请考虑引用以下文献:
@software{richardson_alan_2023,
author = {Richardson, Alan},
title = {Deepwave},
month = sep,
year = 2023,
publisher = {Zenodo},
version = {v0.0.20},
doi = {10.5281/zenodo.8381177},
url = {https://doi.org/10.5281/zenodo.8381177}
}
这将有助于我们持续改进和维护该项目。
deepwave Wave propagation modules for PyTorch. 项目地址: https://gitcode.com/gh_mirrors/de/deepwave