导出 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.wav

python3 ./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 模型。如果你有任何问题,请随时在评论区留言。

相关推荐

  1. Mxnet导出onnx模型

    2024-06-13 21:52:02       31 阅读
  2. yolov5导出onnx模型问题

    2024-06-13 21:52:02       31 阅读
  3. SegmentAnything导出Onnx模型分割图片

    2024-06-13 21:52:02       15 阅读
  4. onnx模型转换rknn脚本

    2024-06-13 21:52:02       6 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-13 21:52:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-13 21:52:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-13 21:52:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-13 21:52:02       20 阅读

热门阅读

  1. SQL Server中的CTE和临时表优化

    2024-06-13 21:52:02       9 阅读
  2. Pipeline流水线组件

    2024-06-13 21:52:02       7 阅读
  3. 配置调整BGP网络的收敛速度方法

    2024-06-13 21:52:02       7 阅读
  4. Scikit Learn中支持单变量特征选择的SVM示例

    2024-06-13 21:52:02       8 阅读
  5. 一文入门机器学习

    2024-06-13 21:52:02       8 阅读
  6. Go AfterFunc 不触发

    2024-06-13 21:52:02       7 阅读
  7. 源码编译构建LAMP

    2024-06-13 21:52:02       8 阅读
  8. 超详细Python教程——迭代器和生成器综合例子

    2024-06-13 21:52:02       9 阅读
  9. C 运算符优先级

    2024-06-13 21:52:02       9 阅读
  10. windows执行定时任务

    2024-06-13 21:52:02       8 阅读
  11. 使用Kube-Bench对Kubernetes进行安全检测

    2024-06-13 21:52:02       12 阅读
  12. PyQt5 强制退出进程

    2024-06-13 21:52:02       10 阅读