g
gcw_AVRCax4T/wenet-u2pp-conformer-wenetspeech-onnx-online-20220506
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

WeNet U2++ Conformer(WenetSpeech)- 昇腾NPU适配

模型说明

本仓库包含WeNet U2++ Conformer流式语音识别模型的NPU适配版本,该模型最初基于WenetSpeech数据集训练并导出为ONNX格式。

  • 模型:wenet-u2pp-conformer-wenetspeech-onnx-online-20220506
  • 架构:U2++ Conformer(Unified Two-pass with bidirectional encoder + CTC + attention decoder)
  • 任务:中文普通话自动语音识别(ASR)
  • 类型:流式(在线)语音识别
  • 框架:ONNX → torch_npu(昇腾NPU)
  • 词汇表:5,538个token(汉字 + SentencePiece子词)

NPU适配总结

指标结果
NPU平台Ascend910(2x NPU)
CANN版本8.5.1
适配方法onnx2torch → torch_npu
编码器MAPE0.8653% ✅(< 1%)
CTC MAPE0.0213% ✅(< 1%)
解码器MAPE0.0034% ✅(< 1%)
token准确率100.00%(argmax匹配)
余弦相似度>0.999999(所有模型)

快速开始

环境要求

pip install torch torch_npu torchaudio onnx onnxruntime onnx2torch soundfile scipy

下载模型

pip install modelscope
modelscope download --model manyeyes/wenet-u2pp-conformer-wenetspeech-onnx-online-20220506 --local_dir ./model

推理

# CPU inference (onnxruntime baseline)
python inference.py --backend cpu --wav test_wavs/0.wav

# NPU inference (torch_npu via onnx2torch)
python inference.py --backend npu --wav test_wavs/0.wav

# Evaluate NPU vs CPU accuracy
python evaluate_npu.py

示例输出

测试音频 0.wav(3.55秒):

Greedy text:  朱立楠在上书战的上
Beam+Attn:    朱立楠在上书战的上
RTF (CPU):    0.2462
RTF (NPU):    0.2833

架构

Audio (16kHz) → FBank [T, 80] → Streaming Conformer Encoder
                                     ↓
                              [T_enc, 512]
                                ↙        ↘
                    CTC [T, 5538]    Attention Decoder
                         ↓                 ↓
                   CTC Greedy      Decoder Rescore
                         ↓                 ↓
                       Combined → Final Text

模型组件

组件输入输出大小
Encoderchunk [1,T,80] + caches[1,T_enc,512] + new caches343 MB
CTChidden [1,T_enc,512][1,T_enc,5538]11 MB
Decoderhyps + encoder_out[NBEST,L,5538]157 MB

NPU适配方法

通过onnx2torch将ONNX模型转换为PyTorch FX GraphModules, 然后使用torch_npu在昇腾NPU上执行。该方法:

  1. 保留原始模型权重和计算图
  2. 无需ATC模型转换即可实现NPU加速
  3. 与CPU参考结果的argmax输出完全一致(100% token准确率)
  4. 三个子模型的MAPE均<1%

转换流程

ONNX Model → onnx2torch.convert() → torch.fx.GraphModule → .to("npu") → torch_npu inference

性能

模型CPU (秒)NPU (秒)加速比
编码器0.47490.77720.61x
CTC0.00510.00261.97x
解码器0.39290.22471.75x
总计0.87291.00450.87x

注:编码器NPU性能包含onnx2torch图优化开销。通过ATC OM转换可进一步优化。

精度验证

CPU(onnxruntime)与NPU(torch_npu)输出的全面精度对比:

模型最大绝对误差平均绝对误差平均绝对百分比误差余弦相似度令牌准确率
编码器0.011270.000480.8653%0.99999945100.00%
CTC0.041320.004610.0213%0.99999997100.00%
解码器0.002400.000350.0034%1.00000000100.00%

文件

文件描述
inference.py主推理脚本(CPU + NPU后端)
evaluate_npu.pyNPU与CPU精度评估脚本
evaluation_results.json完整精度+性能指标
encoder.onnx原始编码器ONNX模型
decoder.onnx原始解码器ONNX模型
ctc.onnx原始CTC ONNX模型
tokens.txt词汇表(5538个令牌)
configuration.json模型元数据
test_wavs/测试音频样本(4个WAV文件)

引用

@inproceedings{wenet2021,
  title={WeNet: Production oriented Streaming and Non-streaming End-to-End Speech Recognition Toolkit},
  author={Yao, Zhuoyuan and Wu, Di and Wang, Xiong and Zhang, Binbin and Yu, Fan and Yang, Chao and Peng, Zhendong and Chen, Xiaoyu and Xie, Lei and Lei, Xin},
  booktitle={Proc. Interspeech},
  year={2021}
}

许可协议

本模型基于 Apache License 2.0 许可协议发布。