# 欢迎使用 SeisPolarity :::{figure} ../_static/seispolarity_logo_title.svg :align: center ::: **SeisPolarity** 是一个全面的地震初动极性拾取框架。 SeisPolarity 为将深度学习模型应用于地震波形极性分类提供了统一的 API,支持多种数据集和模型。 ## 特性 - **统一数据接口**:支持 SCSN、Txed、DiTing、Instance、PNW 数据集,并支持自动下载 - **多种模型**:Ross、Eqpolarity、APP、DiTingMotion、CFM、RPNet、PolarCAP,均提供预训练权重 - **灵活的数据加载**:支持 RAM / 磁盘流式加载任意规模的数据集 - **高级推理**:`Predictor` 类支持从 Hugging Face / ModelScope 自动下载预训练模型 - **数据增强**:平衡采样及多种数据增强技术 - **统一训练**:支持检查点保存和早停机制 - **跨平台支持**:Linux、macOS 和 Windows ## 快速开始 ### 安装 ```bash pip install seispolarity ``` ```bash git clone https://github.com/Chuan1937/SeisPolarity.git cd SeisPolarity pip install -e . ``` ### 推理 ```python from seispolarity.inference import Predictor import numpy as np predictor = Predictor("ROSS_SCSN") waveforms = np.random.randn(10, 400) # (Batch, Length) predictions = predictor.predict(waveforms) ``` ### 数据加载 ```python from seispolarity.data import WaveformDataset # 大型数据集使用磁盘流式加载 dataset = WaveformDataset(path="data.hdf5", name="SCSN", preload=False) loader = dataset.get_dataloader(batch_size=1024, num_workers=4) # 小型数据集使用 RAM 预加载 dataset_ram = WaveformDataset(path="data.hdf5", name="SCSN", preload=True) ``` ### 自动下载数据集 ```python from seispolarity.data import PNW from pathlib import Path output_dir = Path('datasets/PNW') processor = PNW( csv_path=str(output_dir / 'PNW.csv'), hdf5_path=str(output_dir / 'PNW.hdf5'), output_polarity=str(output_dir), auto_download=True, # 自动下载缺失的数据 use_hf=False, # 使用 ModelScope 而不是 Hugging Face component='Z', # 提取垂直分量 sampling_rate=100 # 目标采样率 (Hz) ) processor.process() ``` ### 训练 ```python from seispolarity.models.scsn import SCSN from seispolarity.training import Trainer, TrainingConfig model = SCSN(num_fm_classes=3) config = TrainingConfig( batch_size=256, epochs=50, learning_rate=1e-4, device='cuda' # 或 'cpu' ) trainer = Trainer(model=model, dataset=dataset, config=config) trainer.train() ``` ### 数据增强 ```python from seispolarity.generate import GenericGenerator from seispolarity.generate.augmentation import ( Demean, Normalize, RandomTimeShift, BandpassFilter, PolarityInversion ) generator = GenericGenerator(dataset) generator.add_augmentations([ Demean(), Normalize(amp_norm_type="peak"), RandomTimeShift(max_shift=10), BandpassFilter(freqmin=1, freqmax=20), PolarityInversion(prob=0.5) ]) loader = generator.get_dataloader(batch_size=256) ``` ## 支持的数据集 | 数据集 | 说明 | 样本数 | 自动下载 | |---------|-------------|---------|---------------| | SCSN | 南加州地震台网 | 100k+ | 是 | | Txed | 得克萨斯地震数据集 | 50k+ | 是 | | DiTing | 中国地震台网中心 | 80k+ | 否(需申请) | | Instance | 基于实例的数据集 | 30k+ | 是 | | PNW | 太平洋西北地区 | 20k+ | 是 | ## 支持的模型 | 模型 | 输入长度 | 类别 | |-------|-------------|---------| | 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) | ## 目录 ```{toctree} :maxdepth: 1 :caption: 文档内容 pages/installation.md pages/datasets/overview.md pages/models/overview.md pages/training/overview.md pages/augmentation/overview.md pages/api/overview.md ``` ## 示例 `examples/` 目录中包含完整的示例: - [数据集 API 用法](../../examples/datasets_api.ipynb) - 数据集加载与使用示例 - [预测 API 用法](../../examples/predict_api.ipynb) - 模型推理示例 - [模型 API 用法](../../examples/model_api.ipynb) - 模型结构与初始化示例 - [训练 API 用法](../../examples/train_api.ipynb) - 训练流程示例 ## 引用 论文将后续发表,敬请期待。 ```{toctree} :caption: 链接 English documentation 中文文档 GitHub Hugging Face ModelScope ``` ## 联系方式 如有问题或需要支持,请在 GitHub 上提交 issue 或联系: [chuanjun1978@gmail.com]