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.5.tar.gz (174.2 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.5-py3-none-any.whl (134.7 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for phasenet-0.2.5.tar.gz
Algorithm Hash digest
SHA256 efaeb31b11d9416678d7b50da73b83182e90c8d125fffb99e7b696c86d31ad4f
MD5 364d0d667119a0dabd2b05803b7df202
BLAKE2b-256 d8e76f93f5f3390736d1ef6dc53892abda069fbe0f68479bf4f08dc9feaa4a85

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for phasenet-0.2.5-py3-none-any.whl
Algorithm Hash digest
SHA256 a053dcea952f40e96d9acbb9ea0f3592430192d8402e03c53d3dcdc452b8b3a5
MD5 4ca3217b8665151a1b8883a46b178f2a
BLAKE2b-256 884c363ff5f0d2dea4c358874d0a736f3e474f6e6a0c101b5100c791232db0eb

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