本文档记录 FSMN-Monophone VAD 语音端点检测模型的 FSMN 编码器部分在昇腾 NPU (Ascend 910B3) 上的迁移适配与精度验证结果。
FSMN-Monophone VAD 是达摩院语音团队提出的高效语音端点检测模型,用于检测音频中有效语音的起止时间点。模型采用 FSMN 结构建模上下文信息,将传统单一 speech 类别细分为 Monophone 单元以增强区分能力。
本适配聚焦于 FSMN Encoder 部分的 NPU 迁移。输入为 400 维 Fbank 特征(5 帧 LFR 拼接),输出 248 维逐帧语音特征。
相关获取地址:
参考文档:
| 组件 | 版本 |
|---|---|
CANN | 8.5.1 |
torch | 2.8.0 |
torch_npu | 2.8.0.post4 |
funasr | 1.3.1 |
modelscope | 1.37.0 |
Ascend 910B3,单卡推理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-pytorchpython inference.py --feature fbank_features.npy --device npu --output result.npyfrom 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")验证结果:
输入 [1, 100, 400],100 轮取平均。
| 指标 | CPU | NPU (Ascend 910B3) | 加速比 |
|---|---|---|---|
| 平均耗时 | 366.37 ms | 2.05 ms | 179.08x |
| 中位耗时 | 358.90 ms | 2.05 ms | 175.07x |
| 指标 | 数值 |
|---|---|
| 输出形状 | [100, 248] |
| 最大绝对误差 | 0.000110 |
| 平均相对误差 | 0.0177% |
| 鲁棒值数量 | 1,906 |
核心适配步骤:
pipeline(Tasks.voice_activity_detection, model=model_dir)vad.model.model.model.encodercopy.deepcopy(encoder).to("npu:0")注意事项: