Skip to main content

A PyTorch implementation of PhaseNet for seismic and DAS phase picking

Project description

PhaseNet-PyTorch

PyTorch implementation of PhaseNet for seismic and DAS phase picking, event detection, and polarity classification.

Models

Model Features Data Type
phasenet Phase (P/S) picking Seismic 3-component
phasenet_tf Phase picking + STFT spectrogram Seismic 3-component
phasenet_plus Phase + polarity + event detection Seismic 3-component
phasenet_tf_plus Phase + polarity + event detection + STFT Seismic 3-component
phasenet_das Phase picking DAS single-channel
phasenet_das_plus Phase + event detection DAS single-channel

The _tf variants add a Short-Time Fourier Transform (STFT) branch that extracts frequency features alongside the temporal waveform, improving performance on noisy data.

Prediction

CEED (Seismic) Prediction

# Demo: process a few events with plots
python scripts/predict_ceed.py --n-events 5

# Process all days for a year (saves parquets to results/ceed/)
python scripts/predict_ceed.py --all --year 2025 --output-dir results/ceed

Output: one parquet per day file in results/ceed/{region}/, with columns: event_id, station_id, waveform_index, origin_id, origin_index, origin_time, phase_index, phase_time, phase_score, phase_type, phase_polarity

DAS Prediction

# Predict with base PhaseNet on a HuggingFace subset
python scripts/predict_das.py --subset arcata --plot

# Predict with a trained DAS model on local data
python scripts/predict_das.py \
    --data-dir data/quakeflow_das/arcata/data \
    --model-type phasenet_das_plus \
    --checkpoint output/train_das_arcata/checkpoint.pth \
    --output-dir results/das/train_das_arcata/arcata \
    --no-ema --plot

# Predict from a file list
python scripts/predict_das.py \
    --file-list file_list.txt \
    --model-type phasenet_das_plus \
    --checkpoint output/model.pth \
    --plot

# Multi-GPU prediction
bash scripts/predict_das.sh phasenet_das_plus arcata 8 output/model.pth

Output: one parquet per event in results/das/{model_name}/{subset}/, with columns: event_id, channel_index, origin_id, origin_index, origin_time, phase_index, phase_time, phase_score, phase_type, dt_s, ps_center, ps_interval

By default, picks are associated using P-S pairing. Use --use-event-head to associate via the model's event detection head instead.

Training

CEED (Seismic) Training

python train.py \
    --model phasenet_plus \
    --dataset-type ceed \
    --label-path results/ceed \
    --nx 16 \
    --max-iters 100000 \
    --batch-size 8 \
    --workers 4 \
    --lr 3e-4 \
    --eval-interval 5000 \
    --output-dir output/train_ceed

DAS Training

# Using the training script
bash scripts/train_das.sh 0 arcata v26

# Or directly
python train.py \
    --model phasenet_das_plus \
    --dataset-type das \
    --data-path data/quakeflow_das/arcata/data \
    --label-path results/das/phasenet/arcata/picks \
    --label-list results/das/phasenet/arcata/labels.txt \
    --nx 2048 --nt 4096 \
    --num-patch 16 \
    --max-iters 50000 \
    --batch-size 2 --workers 8 \
    --lr 1e-4 --weight-decay 0.01 \
    --model-ema --model-ema-decay 0.999 \
    --eval-interval 1000 --save-interval 1000 \
    --output-dir output/train_das_arcata_v26

Key Training Options

Option Description Default
--num-patch N Random crops per DAS sample (amortizes IO) 2
--model-ema Enable exponential moving average off
--gradient-accumulation-steps N Accumulate gradients for larger effective batch 1
--clip-grad-norm V Gradient clipping 1.0
--compile Enable torch.compile off
--resume --checkpoint PATH Resume from checkpoint -
--reset-lr Reset LR schedule when resuming off

Semi-supervised Training

Iterative self-training pipeline for DAS: predict → train on predictions → predict with new model → repeat.

# Start from PhaseNet (train DAS model from scratch)
bash scripts/semisupervised_das.sh arcata 5 0

# Start from a pretrained DAS model
bash scripts/semisupervised_das.sh arcata 5 0 phasenet_das output/train_das_v26/checkpoint.pth

Arguments: [subset] [num_iterations] [gpu] [start_from] [checkpoint]

  • From phasenet: iteration 0 predicts with PhaseNet, iteration 1 trains from scratch (10k steps, warmup), iterations 2+ continue (1k steps, no warmup)
  • From phasenet_das: iteration 0 predicts with pretrained DAS model, iterations 1+ continue (1k steps, no warmup)

Results are saved to results/semisupervised_das/ and checkpoints to output/semisupervised_das_v{N}/.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

phasenet-0.2.2.tar.gz (174.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

phasenet-0.2.2-py3-none-any.whl (134.8 kB view details)

Uploaded Python 3

File details

Details for the file phasenet-0.2.2.tar.gz.

File metadata

  • Download URL: phasenet-0.2.2.tar.gz
  • Upload date:
  • Size: 174.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.8

File hashes

Hashes for phasenet-0.2.2.tar.gz
Algorithm Hash digest
SHA256 5264bd0f93853946da4aa28122c2d4b5d85115e6f73c28b6fc8c8b5aee8aa317
MD5 ce460249a5e4f7809287e1fc511b9d6e
BLAKE2b-256 328caa4640b42ec44b2cab2f457a1bc2a98c3588d85e489cd6d287d895d956d2

See more details on using hashes here.

File details

Details for the file phasenet-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: phasenet-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 134.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.8

File hashes

Hashes for phasenet-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 87467df491a15cfbdab84f691d270f8f1c04ec67347e60d64a2241889cb946e8
MD5 6512c298a96cab58a878094fbdc6a413
BLAKE2b-256 01c99b99e29062cd407665e031cfa5aa1b2c7dff406d6740cbeed0affee921ad

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page