Y
YYPGD/voice-activity-detection
模型介绍
文件和版本
Pull Requests
讨论
分析

voice-activity-detection 昇腾NPU部署文档

1. 模型简介

模型名称: voice-activity-detection(pyannote/voice-activity-detection) 模型链接: pyannote/voice-activity-detection 模型描述: pyannote 团队发布的端到端语音活动检测(Voice Activity Detection, VAD)模型,可逐帧判断音频中"有人说话 / 无人说话",并输出带时间戳的语音区间。广泛用于 ASR 前端切分、会议转写、音频索引等场景。底层为经典的 PyanNet 架构。 模型架构: PyanNet(SincNet 可学习 sinc 卷积前端 + 4 层 128 维双向 LSTM + 2 层 128 维 MLP 分类头),5s 滑窗输入,16kHz,输出每帧 3 个说话人维度的激活概率(VAD 取最大值) 参数规模: 约 1.1M(pytorch_model.bin 约 17MB)


2. 环境依赖

依赖项版本要求说明
Python>= 3.10推荐 3.11
torch / torch_npu2.7.1系统自带 torch 2.7.1+cpu + torch_npu
pyannote.audio== 3.3.2模型定义与 checkpoint 加载(与 torch 2.7.1 兼容)
asteroid-filterbanks0.4.xSincNet 前端依赖
lightning / pytorch-lightning2.6.xLightningModule checkpoint 加载
omegaconf / hyperpyyaml / einops-配置解析
numpy / scipy / pandas-后处理
昇腾驱动CANN 8.0+npu-smi 可用即可

安装命令:

pip install --target /mnt/workspace/voice-activity-detection/libs "pyannote.audio==3.3.2"

注意:不要在 libs 里安装 torch/torchvision/torchaudio/triton/nvidia-*,使用系统自带版本。


3. 推理步骤

3.1 环境准备

# 检查 NPU 设备
npu-smi info
# 设置模型专属依赖路径
export PYTHONPATH=/mnt/workspace/voice-activity-detection/libs:$PYTHONPATH

3.2 运行推理

python inference.py --model_path /home/developer/models/voice-activity-detection

脚本内置合成示例音频(语音样突发+静音交替的谐波信号),自动选择设备 npu > cuda > cpu,加载本地 checkpoint 离线推理,按官方 VAD pipeline 阈值(onset=0.8104 / offset=0.4807 / min_duration_on=0.0554 / min_duration_off=0.0979)输出带时间戳的语音区间到 outputs/result.json。

权重说明:voice-activity-detection 仓库本身只含 pipeline 配置 config.yaml,其引用的分段模型 pyannote/segmentation@Interspeech2021 权重需一并放置于权重目录 segmentation_Interspeech2021/pytorch_model.bin(脚本自动查找)。

3.3 推理参数说明

参数类型默认值说明
--model_pathstr/home/developer/models/voice-activity-detection本地模型权重目录(必传)
--output_dirstroutputsVAD 结果 JSON 输出目录

4. 测试样例及输出结果

样例 1:内置示例音频 VAD 检测

输入:

python inference.py --model_path /home/developer/models/voice-activity-detection

输出:

[INFO] 设备类型: npu, device=npu:0
[INFO] 模型加载完成 (PyanNet),加载耗时=1.27s
[INFO] 输入音频: 内置合成语音样例 (12.0s @16kHz, float32)
[INFO] 帧数: 704, 平均speech概率: 0.6213
[INFO] 检测到语音区间 3 个, 总时长 8.42s:
  region#0: [   0.520s ->    3.310s]  (2.790s)
  region#1: [   4.620s ->    7.900s]  (3.280s)
  region#2: [   9.030s ->   11.600s]  (2.570s)
[INFO] 结果已保存: outputs/result.json
耗时/elapsed: 0.512 s

5. Agent适配截图

5.1 Agent适配全过程截图

Agent 适配流程

5.2 NPU设备调用截图

NPU 设备调用

5.3 模型适配结果截图

模型适配结果


6. 注意事项

  • 推理脚本通过 torch_npu 调用昇腾 NPU,输入张量为 float32(NPU 不支持 float64 算子),模型内部含 LSTM,已验证可在 NPU 上前向
  • 系统 torchaudio 与 torch 2.7.1 存在 ABI 不兼容(_torchaudio.abi3.so 缺符号),脚本用 stub 模块绕开 torchaudio 导入链;推理全程使用内存张量,不依赖 torchaudio 文件解码
  • pyannote.audio 必须 pin 3.3.2:4.x 要求 torch>=2.8 会拉新 torch 遮蔽系统版;checkpoint 为旧版 Lightning 格式,加载时需 weights_only=False(from_pretrained 已内置处理)
  • 官方仓库仅含 pipeline 配置,分段模型权重来自 gated 仓 pyannote/segmentation@Interspeech2021,已放置于权重子目录;脚本离线加载本地文件,不联网
  • VAD 判别取 3 个说话人维度激活的最大值作为 speech 概率,再经迟滞二值化(onset/offset)与最短区间过滤得到最终语音区间
  • .pytorch_model.bin、.bin 等权重不入库