This is the python implementation (PyTorch) of the deep leraning model for velocity model building in a surpervised approach. The paper is published on Geophysics. The arxiv version of the paper is availabel here.
Note that the arxiv version is a litlle different from the publishion, please refer to the official version.
We investigate a novel method based on the supervised deep fully convolutional neural network (FCN) for velocity-model building (VMB) directly from raw seismograms. Unlike the conventional inversion method based on physical models, the supervised deep-learning methods are based on big-data training rather than prior-knowledge assumptions. One key characteristic of the deep-learning method is that it can automatically extract multi-layer useful features without the need for human-curated activities and initial velocity setup. The data-driven method usually requires more time during the training stage, and actual predictions take less time, with only seconds needed. Therefore, the computational time of geophysical inversions, including real-time inversions, can be dramatically reduced once a good generalized network is built.
With the goal of estimating velocity models using seismic data as inputs directly, the network needs to project seismic data from the data domain to the model domain. Our method contains two stages: the training process and the prediction process, as shown in the following figure:
We design the CNN based on the famous U-Net architecture. We extensively validate the proposed method on similate data and experimental data (i.e. SEG salt model). The following two figures show several visual resultes of our method compared with full waveform inversion (FWI). It denotes that our proposed method is generally feasible for velocity model building.
For the training process, we generate the simulated velocity models and their corresponding measurement by solving the acoustic wave equation. Since the storage of the data set is too large to share on website, please don't be hesitate to contact the corresponding author to obtain the shared data associated with this research.
The scripts FCNVMB_train.py and FCNVMB_test.py are implemented for training and testing. If you want to train your own network, please firstly checkout the files named ParamConfig.py and PathConfig.py, to be sure that all the parameters and the paths are consistent, e.g.
####################################################
#### MAIN PARAMETERS ####
####################################################
SimulateData = True # If False denotes training the CNN with SEGSaltData
ReUse = False # If False always re-train a network
DataDim = [2000,301] # Dimension of original one-shot seismic data
data_dsp_blk = (5,1) # Downsampling ratio of input
ModelDim = [201,301] # Dimension of one velocity model
label_dsp_blk = (1,1) # Downsampling ratio of output
dh = 10 # Space interval
####################################################
#### NETWORK PARAMETERS ####
####################################################
BatchSize = 10 # Number of batch size
LearnRate = 1e-3 # Learning rate
Nclasses = 1 # Number of output channels
Inchannels = 29 # Number of input channels, i.e. the number of shots
SaveEpoch = 20
DisplayStep = 2 # Number of steps till outputting stats
and
###################################################
#### PATHS #####
###################################################
main_dir = '/home/yfs1/Code/pytorch/FCNVMB/' # Replace your main path here
## Check the main directory
if len(main_dir) == 0:
raise Exception('Please specify path to correct directory!')
## Data path
if os.path.exists('./data/'):
data_dir = main_dir + 'data/' # Replace your data path here
else:
os.makedirs('./data/')
data_dir = main_dir + 'data/'
# Define training/testing data directory
train_data_dir = data_dir + 'train_data/' # Replace your training data path here
test_data_dir = data_dir + 'test_data/' # Replace your testing data path here
Then checkout these two main files to train/test the network, simply type
python FCNVMB_train.py
python FCNVMB_test.py
python = 3.7
pytorch = 1.0
numpy
scipy
matplotlib
scikit-image
math
All of them can be installed via conda (anaconda)
, e.g.
conda install pytorch torchvision cudatoolkit=9.2 -c pytorch
If you find the paper and the code useful in your research, please cite the paper:
@article{yang2019deep,
title={Deep-learning inversion: A next-generation seismic velocity model building method},
author={Yang, Fangshu and Ma, Jianwei},
journal={Geophysics},
volume={84},
number={4},
pages={R583--R599},
year={2019},
publisher={Society of Exploration Geophysicists}
}
If you have any questions about this paper, feel free to contract us: yfs2016@hit.edu.cn