Welcome to SeisPolarity
SeisPolarity is a comprehensive seismic first-motion polarity picking framework.
SeisPolarity provides a unified API for applying deep learning models to seismic waveforms for polarity classification, supporting multiple datasets and models.
Features
Unified Data Interface: Support for SCSN, Txed, DiTing, Instance, PNW datasets with automatic downloading
Multiple Models: Ross, Eqpolarity, APP, DiTingMotion, CFM, RPNet, PolarCAP with pretrained weights
Flexible Data Loading: RAM/disk streaming support for datasets of any scale
Advanced Inference:
Predictorclass with automatic pretrained model downloading from Hugging Face/ModelScopeData Augmentation: Balanced sampling with various augmentation techniques
Unified Training: Checkpoint saving and early stopping mechanisms
Cross-platform Support: Linux, macOS, and Windows
Quick Start
Installation
pip install seispolarity
git clone https://github.com/Chuan1937/SeisPolarity.git
cd SeisPolarity
pip install -e .
Inference
1from seispolarity.inference import Predictor
2import numpy as np
3
4predictor = Predictor("ROSS_SCSN")
5waveforms = np.random.randn(10, 400) # (Batch, Length)
6predictions = predictor.predict(waveforms)
Data Loading
1from seispolarity.data import WaveformDataset
2
3# Use disk streaming for large datasets
4dataset = WaveformDataset(path="data.hdf5", name="SCSN", preload=False)
5loader = dataset.get_dataloader(batch_size=1024, num_workers=4)
6
7# Use RAM preloading for small datasets
8dataset_ram = WaveformDataset(path="data.hdf5", name="SCSN", preload=True)
Automatic Dataset Download
1from seispolarity.data import PNW
2from pathlib import Path
3
4output_dir = Path('datasets/PNW')
5processor = PNW(
6 csv_path=str(output_dir / 'PNW.csv'),
7 hdf5_path=str(output_dir / 'PNW.hdf5'),
8 output_polarity=str(output_dir),
9 auto_download=True, # Automatically download missing data
10 use_hf=False, # Use ModelScope instead of Hugging Face
11 component='Z', # Extract vertical component
12 sampling_rate=100 # Target sampling rate (Hz)
13)
14processor.process()
Training
1from seispolarity.models.scsn import SCSN
2from seispolarity.training import Trainer, TrainingConfig
3
4model = SCSN(num_fm_classes=3)
5config = TrainingConfig(
6 batch_size=256,
7 epochs=50,
8 learning_rate=1e-4,
9 device='cuda' # or 'cpu'
10)
11trainer = Trainer(model=model, dataset=dataset, config=config)
12trainer.train()
Data Augmentation
1from seispolarity.generate import GenericGenerator
2from seispolarity.generate.augmentation import (
3 Demean, Normalize, RandomTimeShift,
4 BandpassFilter, PolarityInversion
5)
6
7generator = GenericGenerator(dataset)
8generator.add_augmentations([
9 Demean(),
10 Normalize(amp_norm_type="peak"),
11 RandomTimeShift(max_shift=10),
12 BandpassFilter(freqmin=1, freqmax=20),
13 PolarityInversion(prob=0.5)
14])
15loader = generator.get_dataloader(batch_size=256)
Supported Datasets
Dataset |
Description |
Samples |
Auto Download |
|---|---|---|---|
SCSN |
Southern California Seismic Network |
100k+ |
Yes |
Txed |
Texas Earthquake Dataset |
50k+ |
Yes |
DiTing |
China Earthquake Networks Center |
80k+ |
No (request required) |
Instance |
Instance-based Dataset |
30k+ |
Yes |
PNW |
Pacific Northwest |
20k+ |
Yes |
Supported Models
Model |
Input Length |
Classes |
|---|---|---|
Ross (SCSN) |
400 |
3 (U/D/N) |
Eqpolarity |
600 |
2 (U/D) |
DiTingMotion |
128 |
3 (U/D/N) |
CFM |
160 |
2 (U/D) |
RPNet |
400 |
2 (U/D) |
PolarCAP |
64 |
2 (U/D) |
APP |
400 |
3 (U/D/N) |
Documentation
Examples
See complete examples in the examples/ directory:
Dataset API Usage - Dataset loading and usage examples
Prediction API Usage - Model inference examples
Model API Usage - Model architecture and initialization
Training API Usage - Training workflow examples
Citation
The paper will be published subsequently, please stay tuned.
Contact
For questions and support, please submit an issue on GitHub or contact: [chuanjun1978@gmail.com]