SeismicPro
is a framework for acceleration of pre-stack seismic data processing with deep learning models.
Main features:
- Read pre-stack data in
SEG-Y
format at any exploration stage in a highly efficient manner - Load and utilize stacking velocities, times of first breaks, and other types of auxiliary data from multiple geological frameworks
- Transform seismic data with both general and complex task-specific methods in a massively parallel way
- Combine processing routines into concise and readable pipelines
- Solve applied tasks with a wide range of neural network architectures from a vanilla
UNet
to sophisticatedEfficientNet
s defined in just a few lines of code - Evaluate the obtained results using interactive quality maps
SeismicPro
module is in the beta stage. Your suggestions and improvements via issues are very welcome.
Note that the Benchmark module may not work on Windows due to dependency issues. Use it with caution.
SeismicPro
is compatible with Python 3.8+ and is tested on Ubuntu 20.04 and Windows Server 2022.
- Installation as a python package using pip:
pip3 install git+https://github.com/GeoscienceML/SeismicPro.git
- Installation as a python package using pipenv:
pipenv install git+https://github.com/GeoscienceML/SeismicPro.git#egg=SeismicPro
- Cloning the project repository:
git clone https://github.com/GeoscienceML/SeismicPro.git
SeismicPro
provides a simple interface to work with pre-stack data.
import seismicpro as spr
A single SEG-Y
file can be represented by a Survey
instance that stores a requested subset of trace headers and allows for gather loading:
survey = spr.Survey(path_to_file, header_index='FieldRecord', header_cols='offset')
header_index
argument specifies how individual traces are combined into gathers: in this example, we consider common source gathers. Both header_index
and header_cols
correspond to names of trace headers in segyio.
All loaded headers are stored in headers
attribute as a pd.DataFrame
indexed by passed header_index
:
survey.headers.head()
offset | TRACE_SEQUENCE_FILE | |
---|---|---|
FieldRecord | ||
175 | 326 | 1 |
175 | 326 | 2 |
175 | 333 | 3 |
175 | 334 | 4 |
175 | 348 | 5 |
A randomly selected gather can be obtained by calling sample_gather
method:
gather = survey.sample_gather()
Let's take a look at it being sorted by offset:
gather.sort(by='offset').plot()
Moreover, processing methods can be combined into compact pipelines like the one below which performs automatic stacking velocity picking and gather stacking:
stacking_pipeline = (dataset
.pipeline()
.load(src="raw")
.mute(src="raw", dst="muted_raw", muter=muter)
.calculate_vertical_velocity_spectrum(src="muted_raw", dst="spectrum")
.calculate_stacking_velocity(src="spectrum", dst="velocity")
.get_central_gather(src="raw")
.apply_nmo(src="raw", stacking_velocity="velocity", max_stretch_factor=0.65)
.stack(src="raw", amplify_factor=0.2)
.dump(src="raw", path=STACK_TRACE_PATH)
)
stacking_pipeline.run(BATCH_SIZE, n_epochs=1)
You can get more familiar with the framework and its functionality by reading SeismicPro tutorials.
Please cite SeismicPro
in your publications if it helps your research.
Khudorozhkov R., Kuvaev A., Broilovskiy A., Kalashnikov N., Podvyaznikov D., Altynova A. SeismicPro: bringing AI solutions to Seismic Processing. 2021.
@misc{seismicpro_2021,
author = {R. Khudorozhkov and A. Kuvaev and A. Broilovskiy and N. Kalashnikov and D. Podvyaznikov and A. Altynova},
title = {SeismicPro: bringing AI solutions to Seismic Processing},
year = 2021
}