1Whisper簡介
Whisper是OpenAI開源的,識別語音識別能力已達到人類水準自動語音識別系統。Whisper作為一個通用的語音識別模型,它使用了大量的多語言和多任務的監督數據來訓練,能夠在英語語音識別上達到接近人類水平的魯棒性和準確性。Whisper還可以進行多語言語音識別、語音翻譯和語言識別等任務。Whisper的架構是一個簡單的端到端方法,采用了編碼器-解碼器的Transformer模型,將輸入的音頻轉換為對應的文本序列,并根據特殊的標記來指定不同的任務。
本教程針對語音識別Whisper的訓練和部署到EASY-EAI-Orin-nano(RK3576)進行說明。
接下來對算法流程進行說明,whisper算法系統流程如下圖所示:
預處理器流程:
編碼器流程:
解碼器流程:
2Whisper模型訓練
Whisper工程下載百度網盤下載鏈接:
https://pan.baidu.com/s/1rX422_7AUMNB_MvZRKL9CQ?pwd=1234(提取碼: 1234)
數據集準備
在本例中,whisper-finetuning工程為whisper模型微調訓練工程,該工程提供whisper數據轉換,模型微調訓練代碼。本章節將以AiShell數據集演示whisper模型微調訓練過程。
其中AiShell下載鏈接:
https://openslr.magicdatatech.com/resources/33/
AiShell數據轉SRT
在本例中我們提供了AiShell數據集轉成SRT的python腳本,請根據示例修改腳本內容,其中:
1. aishell_extract.py 解壓AiShell數據集,解壓后:
data_aishell
├── transcript
│ └── aishell_transcript_v0.8.txt
└── wav
├── dev
├── test
└── train
2. aishell2srt.py 將解壓后的AiShell數據集轉成SRT格式,其格式如下:
datas/data_aishell/wav/test/S0907/BAC009S0907W0352.wav 作為 此次 賽事 上 唯一 一 場 純泰 式 規則 的 超級 戰
datas/data_aishell/wav/test/S0907/BAC009S0907W0269.wav 蘋果 正在 全力 以 赴 出售 盡 可能 多 的 智能 手機
datas/data_aishell/wav/test/S0907/BAC009S0907W0147.wav 從業 人員 五萬 人
datas/data_aishell/wav/test/S0907/BAC009S0907W0495.wav 港媒 稱 內地 人 不 窮 了 為 何 仍 愛 搶 學者 搶 習慣 了
3. 在本例中我們提供了create_data.py,將SRT數據轉成訓練數據,執行命令:
python create_data.py --data-file
#suchas:
python create_data.py --data-file datas/data_aishell/train.txt --language zh --output train.json
轉換后數據格式如下:
{"audio_path": "datas/data_aishell/wav/test/S0907/BAC009S0907W0352.wav", "text":"作為 此次 賽事 上 唯一 一 場 純泰 式 規則 的 超級 戰", "language": "zh", "prompt":""}
{"audio_path": "datas/data_aishell/wav/test/S0907/BAC009S0907W0269.wav", "text": "蘋果 正在 全力 以 赴 出售 盡 可能 多 的 智能 手機", "language": "zh", "prompt":""}
{"audio_path": "datas/data_aishell/wav/test/S0907/BAC009S0907W0147.wav", "text": "從業 人員 五萬 人", "language": "zh", "prompt":""}
{"audio_path": "datas/data_aishell/wav/test/S0907/BAC009S0907W0495.wav", "text": "港媒 稱 內地 人 不 窮 了 為 何 仍 愛 搶 學者 搶 習慣 了", "language": "zh", "prompt":""}
模型訓練
在本例中我們提供了run_finetuning.py用于模型訓練,執行命令如下:
python run_finetuning.py --train-json
注:其中model可以為tiny, base, small, medium等值,程序會自動下載對應的模型;如果,model的值為本地模型文件,則程序會直接加載本地模型進行微調訓練。訓練好的模型將保存在save-dir目錄下。
PT模型轉ONNX
convert工程為whisper模型轉換工程,提供了將pt模型轉rknn過程的所有腳本。在本例中我們提供了export_onnx.py腳本將pt模型轉成onnx,轉換命令:
pip install openai-whisper==20231117
python export_onnx.py --model_type
注:
model_type可以為tiny, base, small, medium等值,程序會自動下載對應的模型。如果model的值為本地模型文件,則程序會直接加載本地模型進行轉換。同時,onnx模型保存地址需要修改export_onnx.py代碼。
3rknn-toolkit模型轉換
rknn-toolkit模型轉換環境搭建
onnx模型需要轉換為rknn模型才能在EASY-EAI-Orin-nano運行,所以需要先搭建rknn-toolkit模型轉換工具的環境。當然tensorflow、tensroflow lite、caffe、darknet等也是通過類似的方法進行模型轉換,只是本教程onnx為例。
概 述
模型轉換環境搭建流程如下所示:
? ? ?
下載模型轉換工具
為了保證模型轉換工具順利運行,請下載網盤里“06.AI算法開發/01.rknn-toolkit2模型轉換工具/rknn-toolkit2-v2.3.0/docker/rknn-toolkit2-v2.3.0-cp38-docker.tar.gz”。
網盤下載鏈接:
https://pan.baidu.com/s/1J86chdq1klKFnpCO1RCcEA?pwd=1234(提取碼:1234)
把工具移到ubuntu20.04
把下載完成的docker鏡像移到我司的虛擬機ubuntu20.04的rknn-toolkit2目錄,如下圖所示:
運行模型轉換工具環境
在該目錄打開終端
執行以下指令加載模型轉換工具docker鏡像:
docker load --input rknn-toolkit2-v2.3.0-cp38-docker.tar.gz
執行以下指令進入鏡像bash環境:
docker run -t -i --privileged -v /dev/bus/usb:/dev/bus/usb rknn-toolkit2:2.3.0-cp38 /bin/bash
現象如下圖所示:
輸入“python”加載python相關庫,嘗試加載rknn庫,如下圖環境測試成功:
至此,模型轉換工具環境搭建完成。
模型轉換為RKNN
EASY EAI Orin-nano支持.rknn后綴的模型的評估及運行,對于常見的tensorflow、tensroflow lite、caffe、darknet、onnx和Pytorch模型都可以通過我們提供的 toolkit 工具將其轉換至 rknn 模型,而對于其他框架訓練出來的模型,也可以先將其轉至 onnx 模型再轉換為 rknn 模型。模型轉換操作流程入下圖所示:
? ? ?
模型轉換Demo下載
下載百度網盤鏈接:
https://pan.baidu.com/s/1C1lQN1U9YhKwpi6PwuyxxA?pwd=1234(提取碼: 1234)
把whisper_convert_rk3576.tar.bz2解壓到虛擬機,如下圖所示:
進入模型轉換工具docker環境
執行以下指令把工作區域映射進docker鏡像,其中,/home/developer/rknn-toolkit2/model_convert_test為工作區域,/test為映射到docker鏡像,/dev/bus/usb:/dev/bus/usb為映射usb到docker鏡像
docker run -t -i --privileged -v /dev/bus/usb:/dev/bus/usb -v /home/developer/rknn-toolkit2/model_convert_test:/test rknn-toolkit2:2.3.0-cp38 /bin/bash
執行成功如下圖所示:
模型轉換操作說明
1、模型轉換Demo目錄結構
2、 onnx模型轉換為rknn模型
在本例中我們提供了rknn_convert.py腳本將onnx模型轉成rknn,腳本代碼清單如下所示:
import os
importurllib
importtraceback
importtime
importsys
importnumpy as np
importcv2
from rknn.apiimportRKNN
ONNX_MODEL ='./whisper_decoder_base_20s.onnx'
RKNN_MODEL ='./whisper_decoder_base_20s.rknn'
DATASET ='./pic_path.txt'
QUANTIZE_ON = False
if__name__ =='__main__':
# Create RKNN object
rknn =RKNN(verbose=True)
ifnot os.path.exists(ONNX_MODEL):
print('model not exist')
exit(-1)
#pre-process config
print('--> Config model')
rknn.config(target_platform ='rk3576')
print('done')
# Load ONNX model
print('--> Loading model')
ret = rknn.load_onnx(model=ONNX_MODEL)
ifret !=0:
print('Load model failed!')
exit(ret)
print('done')
# Build model
print('--> Building model')
ret = rknn.build(do_quantization=QUANTIZE_ON)
ifret !=0:
print('Build model failed!')
exit(ret)
print('done')
# Export RKNN model
print('--> Export RKNN model')
ret = rknn.export_rknn(RKNN_MODEL)
ifret !=0:
print('Export model failed!')
exit(ret)
print('done')
切換目錄到模型轉換工作目錄:
cd /test/whisper_convert_rk3576
執行模型轉換腳本,轉換解碼模型:
python rknn_convert.py
注:whisper是編碼器-解碼器的Transformer模型,所以encoder和decoder模型均需轉換。生成模型如下圖所示,模型將保存至output_path 路徑,此模型可以在rknn環境和EASY EAI Orin-nano環境運行:
修改rknn_convert.py腳本的ONNX_MODEL和RKNN_MODEL,改為編碼模型的信息。
執行模型轉換腳本,轉換編碼模型:
至此,模型轉換流程已完成。
4
模型部署示例
本小節展示Whisper模型的在EASY EAI Orin-nano的部署過程,本章章節使用解碼模型whisper_decoder_base_20s.rknn和編碼模型whisper_encoder_base_20s.rknn。
源碼下載及說明
下載whisper C Demo示例文件
百度網盤鏈接:
https://pan.baidu.com/s/1ID5s2LAs_EdgHYcLds3Tvw?pwd=1234(提取碼:1234)。
下載程序包移至ubuntu環境后,執行以下指令解壓:
tar xvf whisper_C_demo.tar.bz2
下載解壓后如下圖所示:
例程編譯
通過adb接口連接EASY-EAI-Orin-nano,,連接方式如下圖所示:
接下來需要通過adb把源碼傳輸到板卡上,先切換目錄然后執行以下指令:
adb push whisper_C_demo /userdata
登錄到板子切換到例程目錄執行編譯操作
adb shell
cd /userdata/whisper_C_demo
chmod777build.sh
./build.sh
? ?
運行結果
編譯成功后會得到whisper_demo可執行程序,切換到whisper_C_demo_release/目錄:
cd whisper_C_demo_release/
進行中文語音識別測試:
./whisper_demo whisper_encoder_base_20s.rknn whisper_decoder_base_20s.rknn mel_80_filters.txt vocab_zh.txt zh12345678910_CN.wav
執行成功識別出中文語音內容,RTF值約為0.046:
進行英文語音識別測試,RTF值為0.055:
至此,whisper語音識別例程已成功在板卡運行。
-
編碼器
+關注
關注
45文章
3799瀏覽量
138030 -
語音識別
+關注
關注
39文章
1781瀏覽量
114226 -
開源
+關注
關注
3文章
3688瀏覽量
43822 -
模型
+關注
關注
1文章
3520瀏覽量
50419 -
OpenAI
+關注
關注
9文章
1208瀏覽量
8914
原文標題:EASY EAl Orin Nano(RK3576) whisper語音識別訓練部署教程
文章出處:【微信號:easy-eai-AIoT,微信公眾號:EASY EAI靈眸科技】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
RK3576 vs RK3588:為何越來越多的開發者轉向RK3576?
Mpp支持RK3576么
【EASY EAI Orin Nano開發板試用體驗】01-開箱報告及開發環境準備
【EASY EAI Orin Nano開發板試用體驗】--開發板開箱了解
【EASY EAI Orin Nano開發板試用體驗】人臉識別體驗
【EASY EAI Orin Nano開發板試用體驗】開箱和固件燒錄更新體驗
【EASY EAI Orin Nano開發板試用體驗】EASY-EAI-Toolkit初體驗
【EASY EAI Orin Nano開發板試用體驗】人臉識別提升
新品體驗 | RK3576開發板

RK3576單板發布倒計時:RK3399與RK3576對比

RK3576 yolov11-seg訓練部署教程

基于RK3576處理器,EASY EAI Orin Nano開發板免費試用

評論