z
zkx_/speech_fsmn_vad_zh-cn-16k-common-pytorch-ascend
模型介绍文件和版本Pull Requests讨论分析

speech_fsmn_vad_zh-cn-16k-common-pytorch on Ascend NPU

1. 简介

本文档记录 FSMN-Monophone VAD 语音端点检测模型的 FSMN 编码器部分在昇腾 NPU (Ascend 910B3) 上的迁移适配与精度验证结果。

FSMN-Monophone VAD 是达摩院语音团队提出的高效语音端点检测模型,用于检测音频中有效语音的起止时间点。模型采用 FSMN 结构建模上下文信息,将传统单一 speech 类别细分为 Monophone 单元以增强区分能力。

本适配聚焦于 FSMN Encoder 部分的 NPU 迁移。输入为 400 维 Fbank 特征(5 帧 LFR 拼接),输出 248 维逐帧语音特征。

相关获取地址:

  • 权重下载地址(ModelScope):https://modelscope.cn/models/damo/speech_fsmn_vad_zh-cn-16k-common-pytorch
  • GitHub 项目地址:FunASR

参考文档:

  • https://modelscope.cn/models/damo/speech_fsmn_vad_zh-cn-16k-common-pytorch

2. 验证环境

组件版本
CANN8.5.1
torch2.8.0
torch_npu2.8.0.post4
funasr1.3.1
modelscope1.37.0
  • NPU:Ascend 910B3,单卡推理
  • FSMN Encoder 大小:约 0.43M 参数,~1.7MB
  • 输入:400 维 Fbank(5 帧 LFR)
  • 输出:248 维逐帧语音特征

3. 环境准备

conda activate base

pip install torch==2.8.0 torch_npu==2.8.0.post4 torchaudio==2.8.0 \
    -i https://mirrors.huaweicloud.com/repository/pypi/simple

pip install funasr modelscope numpy soundfile Pillow \
    datasets pyarrow sortedcontainers simplejson addict \
    -i https://mirrors.huaweicloud.com/repository/pypi/simple

模型下载:

modelscope download --model damo/speech_fsmn_vad_zh-cn-16k-common-pytorch \
    --local_dir ./speech_fsmn_vad_zh-cn-16k-common-pytorch

4. 推理验证

python inference.py --feature fbank_features.npy --device npu --output result.npy
from inference import run_inference
import numpy as np
features = np.random.randn(1, 100, 400).astype(np.float32)
result = run_inference(features, device="npu")
print(f"Shape: {result['output'].shape}, Time: {result['time_ms']:.2f} ms")

验证结果:

  • CPU:输出 [100, 248],耗时 ~343ms
  • NPU:输出 [100, 248],耗时 ~2.3ms

5. 性能参考

输入 [1, 100, 400],100 轮取平均。

指标CPUNPU (Ascend 910B3)加速比
平均耗时366.37 ms2.05 ms179.08x
中位耗时358.90 ms2.05 ms175.07x

6. 精度评测

指标数值
输出形状[100, 248]
最大绝对误差0.000110
平均相对误差0.0177%
鲁棒值数量1,906
  • 平均相对误差为 0.0177%,满足 < 1% 的精度要求
  • 精度评测:通过

7. 适配说明

核心适配步骤:

  1. 通过 FunASR pipeline 加载模型:pipeline(Tasks.voice_activity_detection, model=model_dir)
  2. 获取 FSMN encoder:vad.model.model.model.encoder
  3. 深拷贝并移至 NPU:copy.deepcopy(encoder).to("npu:0")
  4. Fbank 特征提取在 CPU 完成(400 维 LFR),Encoder 推理在 NPU 执行

注意事项:

  • NPU 推理首次有算子编译开销(~5s),后续稳定在 ~2ms
  • 完整 VAD 流水线含特征提取 + Encoder + 后处理,本适配仅覆盖 Encoder 部分
  • 模型仅 0.43M 参数,非常适合端侧部署
下载使用量0