Skip to content

Repository files navigation

sepkit

CI Python License: MIT code style: black

多说话人语音分离工具包。 以 NumPy 为内核,离线优先,聚焦置换不变训练(PIT)、 时频掩蔽 / 时域重建,以及分离质量评估。可选 PyTorch 后端提供可微分的 PIT 损失。

设计初衷:把语音分离里那些反复要用、又容易写错的部件——STFT 的完美重建、 理想掩蔽、SI-SDR / bss_eval、PIT 的最优置换——做成一套可复现、零重型依赖的 参考实现。核心只依赖 NumPy,装完即可离线跑通全部示例,无需任何数据集或 GPU。

特性

  • 信号处理内核:STFT / iSTFT,满足 COLA 的加权重叠相加,数值意义上的完美重建。
  • 理想时频掩蔽:IBM、IRM、维纳、相位敏感掩蔽(PSM)、复数比值掩蔽(cIRM)。
  • oracle 分离器:用真实源构造理想掩蔽,给出分离质量的上界(研究/评估基线)。
  • 置换不变训练:逐对指标矩阵 + 最优置换求解(小规模枚举,大规模纯 NumPy 匈牙利算法)。
  • 分离质量评估:SI-SDR、SI-SDRi、尺度相关 SNR,以及 bss_eval 风格的 SDR / SIR / SAR。
  • 离线数据合成:正弦 / 谐波 / 扫频 / 噪声与按目标 SNR 的多源混合,示例无需外部数据。
  • 可选 PyTorch 后端:可微分的置换不变 SI-SDR 损失,可直接用于训练分离网络。
  • 命令行工具sepkit simulate / sepkit evaluate / sepkit info

安装

pip install sepkit            # 仅核心(NumPy)
pip install "sepkit[torch]"   # 附带 PyTorch 后端

从源码安装:

git clone https://github.com/ethan-long71/sepkit.git
cd sepkit
pip install -e ".[dev]"

快速上手

import numpy as np
from sepkit import mix_sources, OracleTFMaskSeparator, evaluate_separation
from sepkit.simulation import harmonic, tone

# 1) 合成一个双说话人场景(无需任何数据集)
a = harmonic(180.0, n_harmonics=6, duration=1.0)   # “说话人 A”
b = tone(1200.0, duration=1.0)                      # “说话人 B”
scene = mix_sources(np.stack([a, b]), snr_db=0.0)

# 2) 用理想比值掩蔽做 oracle 分离
sep = OracleTFMaskSeparator(scene.sources, mask="irm", n_fft=512, hop_length=128)
estimates = sep.separate(scene.mixture).sources

# 3) 在最优置换下评估分离质量
report = evaluate_separation(estimates, scene.sources, mixture=scene.mixture)
print("SI-SDRi:", report.mean_si_sdri, "dB")

命令行:

sepkit simulate --out mix.wav --duration 2.0 --snr 0
sepkit info

文档

许可证

MIT © Xu Beihan

About

多说话人语音分离工具包:PIT + 时频掩蔽/时域分离 + 分离质量评估(SI-SDR/SDR/SIR/SAR),NumPy 内核,离线优先

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages