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

k2transducer-zipformer-th(泰语Zipformer Transducer)

基于Zipformer的Transducer模型,用于泰语自动语音识别(ASR),已导出为ONNX格式以支持离线推理。适配华为昇腾NPU,并利用torch_npu进行加速。

模型说明

  • 模型:k2transducer-zipformer-th(泰语Zipformer Transducer)
  • 来源:manyeyes/k2transducer-zipformer-th-onnx-offline-yfyeung-20240620
  • 架构:Zipformer编码器 + 无状态解码器 + 合并器(RNN-T Transducer)
  • 任务:泰语自动语音识别(ASR)
  • 输入:16kHz单声道WAV音频
  • 输出:泰语文本转录结果
  • 词汇表:2000个BPE tokens

模型文件

文件大小说明
encoder.onnx565 MBZipformer编码器(音频 → 嵌入向量)
encoder.int8.onnx148 MBINT8量化编码器
decoder.onnx4.9 MB无状态预测网络
decoder.int8.onnx1.2 MBINT8量化解码器
joiner.onnx3.9 MB合并器网络(编码器+解码器 → 对数概率)
joiner.int8.onnx1.0 MBINT8量化合并器
tokens.txt39 KBBPE token词汇表

环境要求

硬件

  • 昇腾910B / 昇腾910 NPU(或CPU fallback)
  • 最小8 GB设备内存

软件

  • Python 3.10+
  • CANN 8.5.1+
  • torch 2.9.0+
  • torch_npu 2.9.0+
  • onnxruntime 1.26.0+
  • onnx 1.21.0+
  • onnx2torch 1.0.0+

安装依赖项

pip install torch torch_npu onnx onnxruntime onnx2torch scipy

快速开始

下载模型

pip install modelscope
modelscope download --model manyeyes/k2transducer-zipformer-th-onnx-offline-yfyeung-20240620

推理(CPU)

python3 inference.py --audio input.wav

推理(NPU)

python3 inference.py --audio input.wav --npu

批量评估

python3 inference.py --evaluate --npu --output results.json

CPU 与 NPU 精度对比

python3 inference.py --compare

NPU适配

该模型已通过混合方法适配昇腾NPU推理:

适配策略

组件后端方法
编码器CPU (onnxruntime)带图优化的ONNX Runtime
解码器CPU (onnxruntime)ONNX Runtime推理
合并器NPU (torch_npu)onnx2torch转换 → torch_npu执行

NPU加速详情

合并器网络通过onnx2torch从ONNX转换为PyTorch,然后通过torch_npu部署到NPU:

# ONNX to PyTorch conversion
import onnx
import onnx2torch
import torch_npu

onnx_model = onnx.load("joiner.onnx")
torch_model = onnx2torch.convert(onnx_model)
torch_model_npu = torch_model.to("npu")

# NPU inference
with torch.no_grad():
    enc = torch.from_numpy(encoder_out).to("npu")
    dec = torch.from_numpy(decoder_out).to("npu")
    logits = torch_model_npu(enc, dec)

对于编码器和解码器,ONNX Runtime 提供了优化的 CPU 执行能力。借助 Ascend Tensor Compiler (ATC),可实现编码器(565 MB)的全 NPU 加速:

atc --model=encoder.onnx --framework=5 --output=encoder_om \
    --soc_version=Ascend910B --input_shape="x:1,-1,80;x_lens:1"

评估结果

环境

  • 设备:华为昇腾 910B(2× NPU)
  • CANN:8.5.1
  • torch_npu:2.9.0
  • 精度:FP32

准确率(字符错误率)

测试文件CPU CERNPU CER错误差异
0.wav2.47%2.47%0%
1.wav2.47%2.47%0%
2.wav9.21%9.21%0%
平均值4.62%4.62%0% ✓

CPU 与 NPU 准确率差异:0%——远低于 < 1% 的要求。

转录样本对比

#参考文本预测文本
0ซึ่งตรงท่าเรือนี้ครับเป็นจุดที่เหมาะมากนะครับสําหรับการอยู่อาศัยของเพนกวินนั่นเองซึ่งตรงท่าเรือนี้ครับเป็นจุดที่เหมาะมากนะครับสําหรับการอยู่อาศัยของแนนกวินนั่นเอง
1เอ่อเคยถามอาจารย์แล้วล่ะฮะแล้วก็คนที่สิบสี่ปีที่แล้วอยู่ในที่ห้องประชุมคงจะจําได้เอ่อเคยถามอาจารย์แล้วนะฮะแล้วก็คนที่สิบสี่ปีที่แล้วอยู่ในที่ห้องประชุมคงจะจําได้
2ตั้งอยู่ในเอเชียตะวันออกเฉียงใต้และเป็นหนึ่งในสิบประเทศของประชาคมอาเซียนนะฮะอยู่ในเอเชียตะวันออกเฉียงใต้และเป็นหนึ่งใน๑๐ประเทศของประชาคมอาเซียนนะฮะ

性能(实时因子)

后端RTF(平均值)单文件延迟
CPU~0.030~200 ms
NPU (joiner)~0.040~270 ms

注:RTF < 0.1 证实了实时推理能力。通过 ATC/OM 转换对编码器进行完全 NPU 加速将进一步提高吞吐量。

通过 ModelScope SDK 使用

from modelscope import snapshot_download
model_dir = snapshot_download('manyeyes/k2transducer-zipformer-th-onnx-offline-yfyeung-20240620')

许可证

Apache License 2.0

引用说明

本模型源自 icefall/k2 项目的 Zipformer Transducer 实现,由 manyeyes 针对泰语语音识别进行了微调并导出为 ONNX 格式。