panhg/funasr-nano
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

FunASR-Nano (昇腾 NPU 适配版)

基于华为昇腾 NPU (Ascend910) 适配的 FunASR-Nano 语音识别模型。原模型来自 FunAudioLLM/Fun-ASR-Nano-2512,ONNX 格式由 wuyangwang/funasr-nano 提供,sherpa-onnx 推理格式。

模型简介

FunASR-Nano 是阿里达摩院 FunAudioLLM 团队发布的轻量级多语言语音识别模型,基于 SenseVoice 架构,支持 31 种语言 识别,并针对远场高噪声、中文方言、音乐背景等复杂场景进行了深度优化。

核心特性

  • 远场高噪声识别:针对远距离拾音及高噪声场景(会议室、车载环境、工业现场等)深度优化,识别准确率提升至 93%
  • 中文方言与地方口音:支持 7 大方言(吴语、粤语、闽语、客家话、赣语、湘语、晋语),覆盖 26 个地区口音
  • 多语言自由说:支持 31 种语言识别,重点优化东亚与东南亚语种
  • 音乐背景歌词识别:强化音乐背景干扰下的语音识别性能

本适配版特性

  • 基于 torch_npu 实现 ONNX 模型到昇腾 NPU 的推理转换
  • 通过 onnx2torch 将 ONNX 模型转换为 PyTorch 模型,在 NPU 上运行
  • 精度与 CPU 基线相比,相对误差 < 0.01%,Top-1 一致性 100%

环境要求

组件版本
CANN8.5.1
PyTorch2.9.0
torch_npu-
Python3.11
NPU 驱动25.5.2
NPU 型号Ascend910 (2x)

模型信息

项目详情
模型架构SenseVoice CTC
输入Fbank 特征 (80维) + LFR (m=7, n=6) → 560维
输出CTC logits (60515 tokens)
模型格式ONNX (IR v7, Opset 13)
参数量~100M (Nano 版本)
采样率16kHz

快速开始

安装依赖

pip install modelscope onnxruntime onnx2torch torch_npu funasr soundfile

下载模型

modelscope download --model wuyangwang/funasr-nano

推理示例

# CPU 推理 (onnxruntime)
python inference.py --audio input.wav

# 完整基准测试 (CPU + NPU)
python inference.py --audio input.wav --benchmark --num-runs 10

# 生成测试音频并基准测试
python inference.py --generate-test --benchmark

精度评测

在 Ascend910 NPU 上进行模型推理精度验证,以 CPU (onnxruntime) 推理结果为基线。

指标结果要求状态
平均绝对误差 (MAE)0.000111--
最大绝对误差0.005329--
相对误差0.0033%< 1%✅
余弦相似度0.99999976> 0.999✅
Top-1 Token 一致性100.00%> 99%✅

性能基准

测试音频:5秒 16kHz 单声道 WAV,fbank 特征 83 帧,输入 shape [1, 83, 560]。

后端平均延迟最小延迟最大延迟标准差
CPU (onnxruntime)1050.18 ms818.99 ms1292.54 ms153.98 ms
NPU (Ascend910)794.15 ms775.75 ms831.63 ms23.13 ms

NPU 加速比:1.32x

NPU 推理不仅速度更快,且性能波动更小(标准差从 154ms 降至 23ms)。

推理流程

Audio (.wav)
    │
    ▼
[1] 音频加载 (16kHz, mono)
    │
    ▼
[2] Fbank 特征提取 (80维, 帧长25ms, 帧移10ms)
    │
    ▼
[3] LFR 帧堆叠 (m=7, n=6) → 560维
    │
    ▼
[4] ONNX 模型推理 (CTC Encoder)
    │  ├── CPU: onnxruntime
    │  └── NPU: onnx2torch → torch_npu
    ▼
[5] CTC 贪婪解码
    │
    ▼
识别文本

部署说明

昇腾 NPU 适配方法

本模型采用 onnx2torch 将 ONNX 模型转换为 PyTorch 模型,然后通过 torch_npu 在昇腾 NPU 上执行推理。

from onnx2torch import convert as onnx2torch_convert
import onnx
import torch
import torch_npu

# 加载 ONNX 模型
onnx_model = onnx.load("model.onnx")
torch_model = onnx2torch_convert(onnx_model)

# 移至 NPU
torch_model = torch_model.to("npu:0")
torch_model.eval()

# 推理
with torch.no_grad():
    output = torch_model(input_tensor.to("npu:0"))

注意事项

  1. 音频预处理(Fbank + LFR)在 CPU 上执行,模型推理在 NPU 上执行
  2. 首次推理自动包含模型转换和预热开销
  3. 推荐使用至少 2GB NPU 显存
  4. 支持单 batch 推理,batch_size=1

文件结构

funasr-nano/
├── inference.py          # 主推理脚本 (CPU + NPU)
├── README.md             # 本文档
├── output/
│   ├── benchmark_results.json  # 基准测试结果
│   └── test_audio.wav          # 测试音频
└── logs/                 # 推理日志

引用

@misc{FunAudioLLM-Fun-ASR-Nano-2512,
  title={Fun-ASR-Nano-2512},
  author={FunAudioLLM Team, Alibaba DAMO Academy},
  year={2025},
  url={https://huggingface.co/FunAudioLLM/Fun-ASR-Nano-2512}
}

许可证

本项目基于 Apache License 2.0 开源。


Model adapted for Huawei Ascend NPU. NPU tags verified on Ascend910 hardware.