本模型是基于 WeNet 框架训练的 U2++ Conformer 端到端语音识别在线模型,使用 AISHELL-1 中文普通话数据集训练。模型导出为 ONNX 格式,支持流式语音识别。
| 属性 | 说明 |
|---|---|
| 原始框架 | PyTorch (WeNet) |
| 导出格式 | ONNX (opset 13) |
| 适配框架 | PyTorch + onnx2torch |
| NPU 推理 | torch_npu |
| 输入 | 形状 | 说明 |
|---|---|---|
| chunk | [1, T, 80] | 音频 FBank 特征 |
| offset | [] | 偏移量 |
| att_cache | [12, 4, 0, 128] | 注意力缓存(初始为空) |
| cnn_cache | [12, 1, 256, 7] | CNN 缓存(初始为零) |
| 输出 | 形状 | 说明 |
|---|---|---|
| output | [1, T', 256] | Encoder 输出 |
| probs | [1, T', 4233] | CTC 概率分布 |
| score | [N, L, 4233] | Decoder 得分 |
| 依赖 | 版本要求 |
|---|---|
| Python | >= 3.9 |
| torch | >= 2.0.0 |
| torch_npu | >= 2.0.0 |
| onnx2torch | >= 1.5.0 |
| onnxruntime | >= 1.15.0 |
| torchaudio | >= 2.0.0 |
| soundfile | >= 0.12.0 |
| numpy | >= 1.21.0 |
| modelscope | >= 1.0.0 |
本模型通过以下方式完成昇腾 NPU 适配:
onnx2torch 将 ONNX 模型转换为 PyTorch 模型torch_npu 将模型及数据迁移到昇腾 NPU 设备适配流水线: ONNX 格式 → onnx2torch 转换 → PyTorch 模型 → .npu() → NPU 推理
pip install torch torchaudio torch_npu
pip install onnx onnx2torch onnxruntime
pip install soundfile librosa modelscope numpy Pillow# CPU 推理
python3 inference.py --device cpu
# NPU 推理
python3 inference.py --device npu
# CPU/NPU 精度对比
python3 compare_cpu_npu.py使用 AISHELL 测试音频进行推理(16kHz 采样率,中文普通话):
| 音频文件 | CPU 推理结果 | NPU 推理结果 | 匹配 |
|---|---|---|---|
| 0.wav | 正是因为存在绝对症... | 正是因为存在绝对症... | ✓ |
| 1.wav | 日第加重焦恩与欧外斯外斯人 | 日第加重焦恩与欧外斯外斯人 | ✓ |
| 2.wav | 蒋友伯被拍到带着女儿出游 | 蒋友伯被拍到带着女儿出游 | ✓ |
| 3.wav | 周望军就落实控物价 | 周望军就落实控物价 | ✓ |
| 4.wav | 每当青年的中身敲响了时候... | 每当青年的中身敲响了时候... | ✓ |
| 音频 | 余弦相似度 | 平均相对误差 | 最大绝对误差 | 结论 |
|---|---|---|---|---|
| 0.wav | 1.000000 | 0.497% | 3.61e-03 | PASS |
| 1.wav | 1.000000 | 0.302% | 2.58e-03 | PASS |
| 2.wav | 1.000000 | 0.192% | 1.42e-03 | PASS |
| 3.wav | 1.000000 | 0.141% | 4.28e-03 | PASS |
| 4.wav | 1.000000 | 0.244% | 5.56e-03 | PASS |
| 音频 | 余弦相似度 | 平均相对误差 | 最大绝对误差 | 结论 |
|---|---|---|---|---|
| 0.wav | 1.000000 | 0.009% | 4.64e-02 | PASS |
| 1.wav | 1.000000 | 0.008% | 2.02e-02 | PASS |
| 2.wav | 1.000000 | 0.005% | 2.11e-02 | PASS |
| 3.wav | 1.000000 | 0.004% | 6.23e-02 | PASS |
| 4.wav | 1.000000 | 0.007% | 4.81e-02 | PASS |
结论:NPU 与 CPU 推理结果误差 < 1%,精度满足要求。
| 音频 | CPU 推理时间 | NPU 推理时间 | 加速比 |
|---|---|---|---|
| 0.wav | 3.859s | 4.423s | 0.87x |
| 1.wav | 3.374s | 3.115s | 1.08x |
| 2.wav | 3.278s | 3.221s | 1.02x |
| 3.wav | 3.260s | 3.114s | 1.05x |
| 4.wav | 5.298s | 4.035s | 1.31x |

本仓库提供完整的推理脚本,支持 CPU 和 NPU 双平台推理:
# NPU 推理
python3 inference.py --device npu
# CPU 推理
python3 inference.py --device cpu推理完成后会输出推理结果和耗时,表明模型在 NPU 上推理成功。