seisbench-model-api

Polar Sponsor
爱发电 赞助
.NET 9.0

SeisBench 核心模型 API 概览:一个用于在地震数据上训练与应用机器学习算法的 Python 框架。它适用于……

Seis Bench 模型 API. 包含 Seis Bench. 建议的方法是 pip 安装. 简单运行: overview.

功能概述

Seis Bench 模型 API. 包含 Seis Bench. 建议的方法是 pip 安装. 简单运行: overview.是一项面向实际任务的技能,主要用于Seis Bench 提供了抽象的类 Waveform Model, 每个 Seis Bench 模型都应该使用。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。

核心要点

  • 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
  • 从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。
  • 实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;

使用与执行

若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;

结果检查与注意事项

涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。

SeisBench 模型 API

安装 SeisBench

推荐的安装方式是通过 pip 安装。只需运行:

pip install seisbench

概述

SeisBench 提供了抽象基类 WaveformModel,所有 SeisBench 模型均应继承该类。此类提供了两个核心方法:annotate 和 classify。这两个方法均基于具体模型中实现的配置与子方法自动构建。

SeisBenchModel 在 PyTorch 模型接口与地震学中常用的 ObsPy 接口之间架起桥梁。它能自动将 ObsPy Stream 组装为 PyTorch 张量,并将计算结果重新组装为 Stream;同时自动处理批处理(batching)。只需将模型移至 GPU,即可在 GPU 上执行计算。

annotate 方法接收一个 ObsPy Stream 对象作为输入,并返回同样为 Stream 对象的标注结果。例如,对于拾取(picking)类模型,输出即为其特征函数(characteristic functions),即随时间变化的拾取概率。

stream = obspy.read("my_waveforms.mseed")
annotations = model.annotate(stream)  # 返回带标注信息的 ObsPy Stream 对象

classify 方法同样以 ObsPy Stream 为输入,但与 annotate 不同,其返回离散化结果。这些结果的具体结构可能因模型而异:例如,纯拾取模型将返回拾取点(picks)列表,而兼具拾取与检测功能的模型则可能同时返回拾取点列表和事件检测(detections)列表。

stream = obspy.read("my_waveforms.mseed")
outputs = model.classify(stream)  # 返回拾取点列表
print(outputs)

annotate 与 classify 均支持一次性传入来自多个台站的波形数据,并自动完成迹线(traces)的正确分组。如需了解如何基于 SeisBench 构建自定义模型,请参阅 WaveformModel 的文档;如需了解模型应用方法,请参阅 Examples(示例)部分。

加载预训练模型

若要对波形进行有意义的标注,必须使用已训练好的模型权重。SeisBench 通过统一接口提供一系列预训练模型权重。模型权重将在首次使用时自动下载,并在本地缓存。部分模型提供多个版本的权重,有关如何访问不同版本的详细说明,请参阅 from_pretrained 文档。

import seisbench.models as sbm

sbm.PhaseNet.list_pretrained()                  # 获取可用模型列表
model = sbm.PhaseNet.from_pretrained("original")  # 加载 PhaseNet 原作者发布的原始模型权重

预训练模型不仅可用于波形标注,亦可作为迁移学习(transfer learning)的理想起点。

加速模型推理

在大规模数据集上应用模型时,运行时间往往是关键瓶颈。以下是一些提升模型推理速度的实用建议:

  • 在 GPU 上运行。 GPU 推理通常更快,尽管不同模型的实际加速比存在差异。但需注意,GPU 并非总是最具成本效益的选择——例如,在云环境中,租用若干台 CPU 服务器并行标注大规模数据集,其成本可能低于租用一台 GPU 服务器,且总耗时相近。

  • 增大 batch_size。 该参数可作为可选参数传入所有模型。尤其在 GPU 上,更大的 batch size 通常带来更快的标注速度。只要 batch 能完整装入(GPU)显存,就值得尝试增大 batch size。

  • 编译模型(PyTorch 2.0+)。 若使用 PyTorch 2.0 或更高版本,建议对模型进行编译,仅需执行 model = torch.compile(model) 即可。编译过程会消耗一定时间,但若需标注大量波形数据,则收益将迅速显现。请注意,torch.compile 提供多种编译选项,其选择将显著影响性能增益。

  • 使用 asyncio 接口。 利用异步 I/O 接口,在模型推理的同时并行加载数据,即调用 annotate_asyncio 和 classify_asyncio。该方式通常大幅提速,因为数据加载属于 I/O 密集型任务,而实际标注则属于计算密集型任务。

  • 手动重采样。 尽管 SeisBench 支持自动重采样,但预先手动完成重采样往往更高效。SeisBench 内部使用 ObsPy 的重采样例程(截至 2023 年尚未并行化)。可通过 model.sampling_rate 查询模型所需采样率。其他替代方案(如 Pyrocko 库中的重采样函数)亦可供选用。

已集成至 SeisBench 的模型

若您无需从零构建模型,SeisBench 已为您集成了如下文献中具有代表性的模型。这些深度学习模型均继承自 SeisBench 统一模型接口,底层均基于 PyTorch 实现;在条件允许的情况下,原始训练权重已被导入并开放使用,您可通过 from_pretrained 方法便捷获取。

已集成模型 任务
BasicPhaseAE 初至波(P 波)拾取
CRED 地震事件检测
DPP 初至波(P 波)拾取
DepthPhaseNet 基于深度震相的震源深度估计
DepthPhaseTEAM 基于深度震相的震源深度估计
DeepDenoiser 波形去噪
SeisDAE 波形去噪
EQTransformer 地震事件检测 / 初至波(P 波)拾取
GPD 初至波(P 波)拾取
LFEDetect 低频地震事件拾取
OBSTransformer 地震事件检测 / 初至波(P 波)拾取
PhaseNet 初至波(P 波)拾取
PhaseNetLight 初至波(P 波)拾取
PickBlue 地震事件检测 / 初至波(P 波)拾取
Skynet 初至波(P 波)拾取
VariableLengthPhaseNet 初至波(P 波)拾取

当前集成的模型可完成地震事件检测与初至波(P/S 波)拾取、波形去噪、震源深度估计、低频地震事件拾取等任务。此外,借助 SeisBench,您还可构建机器学习模型,执行震级与震源参数估计、震中定位等通用地震学任务。

最佳实践

  • 若波形数据幅值极小(<=1e-10),可能存在数值不稳定风险。此时可先将数据整体放大(例如乘以 1e10),再进行归一化或送入模型。

  • 尽管 SeisBench 模型 API 会自动对波形执行归一化,但仍强烈建议您自行完成归一化操作。因为 SeisBench 默认采用带 epsilon 的归一化公式:(waveform - mean(waveform)) / (std(waveform) + epsilon);当波形幅值极小时(如 <=1e-10),该归一化操作可能严重破坏原始信号特征。

  • SeisBench 模型 API 可直接处理任意长度的波形 Stream,因此无需手动切分数据。此外,请勿假设单个波形 Stream 中仅包含一个 P 波与一个 S 波;最合理的做法是将其视为连续观测数据流(continuous data stream)本身。

相关专题

更多
Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

2026.10.28

0

16

Vite 如何搭配 Vue.js
Vite 如何搭配 Vue.js

Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。

2026.10.28

0

15

Vite 项目目录怎么看
Vite 项目目录怎么看

Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。

2026.10.28

0

10

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

0

11

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

2026.10.22

0

10

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

2026.10.22

0

15

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

2026.10.22

0

10

PHP时间戳漏洞修复教程
PHP时间戳漏洞修复教程

本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。

2026.10.22

0

25

Golangci-lint配置文件与规则设置
Golangci-lint配置文件与规则设置

本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。

2026.10.22

0

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习