导出 Whisper 模型到 ONNX

前言

在语音识别领域,Whisper 模型因其出色的性能和灵活性备受关注。为了在更多平台和环境中部署 Whisper 模型,导出为 ONNX 格式是一个有效的途径。ONNX(Open Neural Network Exchange)是一个开放格式,支持不同的深度学习框架之间的模型互操作性。本指南将详细介绍如何将 Whisper 模型导出为 ONNX 格式,并提供测试模型的步骤。

本节描述了如何将 Whisper 模型导出为 ONNX 格式。

可用模型

请注意,我们已经将 Whisper 模型导出为 ONNX 格式,它们可以从以下 Huggingface 仓库中获取:

模型类型 Huggingface 仓库链接
tiny.en 链接
base.en 链接
small.en 链接
distil-small.en 链接
medium.en 链接
distil-medium.en 链接
tiny 链接
base 链接
small 链接
medium 链接

提示 :你也可以从 此处 下载它们。

如果你想自己导出模型或了解模型的导出过程,请继续阅读下文。

导出为 ONNX

我们使用 export-onnx.py 来导出 Whisper 模型到 ONNX。

首先,让我们安装依赖并下载导出脚本:

bash 复制代码
pip install torch openai-whisper onnxruntime onnx
git clone https://github.com/k2-fsa/sherpa-onnx/
cd sherpa-onnx/scripts/whisper
python3 ./export-onnx.py --help

它将打印以下信息:

plaintext 复制代码
usage: export-onnx.py [-h] --model {tiny,tiny.en,base,base.en,small,small.en,medium,medium.en,large,large-v1,large-v2}

optional arguments:
  -h, --help            show this help message and exit
  --model {tiny,tiny.en,base,base.en,small,small.en,medium,medium.en,large,large-v1,large-v2}

要导出 tiny.en 模型,我们可以使用:

bash 复制代码
python3 ./export-onnx.py --model tiny.en

它将生成以下文件:

plaintext 复制代码
(py38) fangjuns-MacBook-Pro:whisper fangjun$ ls -lh tiny.en-*
-rw-r--r--  1 fangjun  staff   105M Aug  7 15:43 tiny.en-decoder.int8.onnx
-rw-r--r--  1 fangjun  staff   185M Aug  7 15:43 tiny.en-decoder.onnx
-rw-r--r--  1 fangjun  staff    12M Aug  7 15:43 tiny.en-encoder.int8.onnx
-rw-r--r--  1 fangjun  staff    36M Aug  7 15:43 tiny.en-encoder.onnx
-rw-r--r--  1 fangjun  staff   816K Aug  7 15:43 tiny.en-tokens.txt

tiny.en-encoder.onnx 是编码器模型,tiny.en-decoder.onnx 是解码器模型。

tiny.en-encoder.int8.onnx 是量化的编码器模型,tiny.en-decoder.int8.onnx 是量化的解码器模型。

tiny.en-tokens.txt 包含了令牌表,它将整数映射到令牌和反之。

要将导出的 ONNX 模型转换为 ONNX Runtime 格式,我们可以使用:

bash 复制代码
python3 -m onnxruntime.tools.convert_onnx_models_to_ort --optimization_style=Fixed ./

到目前为止,生成的文件如下:

plaintext 复制代码
(py38) fangjuns-MacBook-Pro:whisper fangjun$ ls -lh tiny.en-*
-rw-r--r--  1 fangjun  staff   105M Aug  7 15:43 tiny.en-decoder.int8.onnx
-rw-r--r--  1 fangjun  staff   185M Aug  7 15:43 tiny.en-decoder.onnx
-rw-r--r--  1 fangjun  staff    12M Aug  7 15:43 tiny.en-encoder.int8.onnx
-rw-r--r--  1 fangjun  staff    36M Aug  7 15:43 tiny.en-encoder.onnx
-rw-r--r--  1 fangjun  staff   816K Aug  7 15:43 tiny.en-tokens.txt

要检查导出的模型是否工作正常,我们可以使用 test.py

我们使用 此测试音频

bash 复制代码
pip install kaldi-native-fbank
wget https://huggingface.co/csukuangfj/sherpa-onnx-whisper-tiny.en/resolve/main/test_wavs/0.wav

python3 ./test.py \
  --encoder ./tiny.en-encoder.onnx \
  --decoder ./tiny.en-decoder.onnx \
  --tokens ./tiny.en-tokens.txt \
  ./0.wav

要测试 int8 量化模型,我们可以使用:

bash 复制代码
python3 ./test.py \
  --encoder ./tiny.en-encoder.int8.onnx \
  --decoder ./tiny.en-decoder.int8.onnx \
  --tokens ./tiny.en-tokens.txt \
  ./0.wav

希望这篇博客能帮助你顺利导出并测试 Whisper ONNX 模型。如果你有任何问题,请随时在评论区留言。

相关推荐
win4r12 分钟前
🚀保姆级教程!GitHub Copilot CLI横空出世,支持MCP扩展+自动PR创建,让AI编程效率提升1000%,开发者必看!开发完整应用实战演示!
aigc·openai·github copilot
zzywxc78720 分钟前
AI 行业应用:AI 在金融、医疗、教育、制造业等领域的落地案例
人工智能·spring·金融·prompt·语音识别·xcode
王者鳜錸1 天前
方言普通话识别大模型,支持中英+202种方言识别
java·vue·语音识别
x007xyz1 天前
🚀🚀🚀前端的无限可能-纯Web实现的字幕视频工具 FlyCut Caption
前端·openai·音视频开发
机器之心2 天前
首个代码世界模型引爆AI圈,能让智能体学会「真推理」,Meta开源
人工智能·openai
安思派Anspire2 天前
这不是炒作——Claude Code证明未来已然到来
aigc·openai
蒙帕智能运维3 天前
FunASR:面向产业落地的端到端语音识别系统
人工智能·机器人·语音识别
起个破名想半天了3 天前
解决 PocketSphinx 中文模型缺失导致的无法实现语音识别
语音识别·sphinx
机器之心3 天前
大模型七连发,外国人馋透了!阿里云栖大会全栈升级够狠
人工智能·openai
机器之心3 天前
Sam Altman发文,透露OpenAI正在干的大事业
人工智能·openai