当前位置: 首页 > news >正文

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

相关文章:

  • 什么是git?
  • 弗洛伊德算法——C语言
  • 可视化程序设计OJ技术研究
  • 【Starrocks docker-compose部署】
  • C++ 56 之 菱形继承
  • git-本地项目与git连接及上传【快速教程】
  • PyTorch计算机视觉入门:测试模型与评估,对单帧图片进行推理
  • 【SpringBoot】SpringBoot:构建实时聊天应用
  • Java数据结构与算法(完全背包)
  • Qt 实战(4)信号与槽 | 4.3、信号连接信号
  • 0118__C语言——float.h文件
  • 使用Spyder进行Python编程和代码调试
  • Qt项目天气预报(1) - ui界面搭建
  • 集成学习方法:Bagging与Boosting的应用与优势
  • C++中的结构体——结构体中const的使用场景
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • ➹使用webpack配置多页面应用(MPA)
  • Angular Elements 及其运作原理
  • extract-text-webpack-plugin用法
  • IDEA常用插件整理
  • KMP算法及优化
  • overflow: hidden IE7无效
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • 多线程事务回滚
  • 区块链将重新定义世界
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 新手搭建网站的主要流程
  • 学习ES6 变量的解构赋值
  • 用Canvas画一棵二叉树
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​Linux·i2c驱动架构​
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • #APPINVENTOR学习记录
  • #pragam once 和 #ifndef 预编译头
  • #知识分享#笔记#学习方法
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (2)nginx 安装、启停
  • (4.10~4.16)
  • (C语言)二分查找 超详细
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (学习日记)2024.01.09
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • *Django中的Ajax 纯js的书写样式1
  • *p++,*(p++),*++p,(*p)++区别?
  • .net 后台导出excel ,word
  • .net连接oracle数据库
  • .NET使用存储过程实现对数据库的增删改查
  • .NET业务框架的构建
  • 。。。。。
  • [Ariticle] 厚黑之道 一 小狐狸听故事
  • [AutoSar]BSW_OS 02 Autosar OS_STACK
  • [BZOJ1040][P2607][ZJOI2008]骑士[树形DP+基环树]