本文主要是介绍导出 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。
首先,让我们安装依赖并下载导出脚本:
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
它将打印以下信息:
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
模型,我们可以使用:
python3 ./export-onnx.py --model tiny.en
它将生成以下文件:
(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 格式,我们可以使用:
python3 -m onnxruntime.tools.convert_onnx_models_to_ort --optimization_style=Fixed ./
到目前为止,生成的文件如下:
(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。
我们使用 此测试音频。
pip install kaldi-native-fbank
wget https://huggingface.co/csukuangfj/sherpa-onnx-whisper-tiny.en/resolve/main/test_wavs/0.wavpython3 ./test.py \--encoder ./tiny.en-encoder.onnx \--decoder ./tiny.en-decoder.onnx \--tokens ./tiny.en-tokens.txt \./0.wav
要测试 int8 量化模型,我们可以使用:
python3 ./test.py \--encoder ./tiny.en-encoder.int8.onnx \--decoder ./tiny.en-decoder.int8.onnx \--tokens ./tiny.en-tokens.txt \./0.wav
希望这篇博客能帮助你顺利导出并测试 Whisper ONNX 模型。如果你有任何问题,请随时在评论区留言。
这篇关于导出 Whisper 模型到 ONNX的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!