Skip to content

GeoscienceML/SeismicPro

Repository files navigation


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 sophisticated EfficientNets defined in just a few lines of code
  • Evaluate the obtained results using interactive quality maps

Installation

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

Getting Started

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()

gather

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)

Tutorials

You can get more familiar with the framework and its functionality by reading SeismicPro tutorials.

Citing SeismicPro

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
}

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published