1Whisper簡介
Whisper是OpenAI開源的,識別語音識別能力已達(dá)到人類水準(zhǔn)自動語音識別系統(tǒng)。Whisper作為一個通用的語音識別模型,它使用了大量的多語言和多任務(wù)的監(jiān)督數(shù)據(jù)來訓(xùn)練,能夠在英語語音識別上達(dá)到接近人類水平的魯棒性和準(zhǔn)確性。Whisper還可以進行多語言語音識別、語音翻譯和語言識別等任務(wù)。Whisper的架構(gòu)是一個簡單的端到端方法,采用了編碼器-解碼器的Transformer模型,將輸入的音頻轉(zhuǎn)換為對應(yīng)的文本序列,并根據(jù)特殊的標(biāo)記來指定不同的任務(wù)。
本教程針對語音識別Whisper的訓(xùn)練和部署到EASY-EAI-Orin-nano(RK3576)進行說明。
接下來對算法流程進行說明,whisper算法系統(tǒng)流程如下圖所示:
預(yù)處理器流程:
編碼器流程:
解碼器流程:
2Whisper模型訓(xùn)練
Whisper工程下載百度網(wǎng)盤下載鏈接:
https://pan.baidu.com/s/1rX422_7AUMNB_MvZRKL9CQ?pwd=1234(提取碼: 1234)
數(shù)據(jù)集準(zhǔn)備
在本例中,whisper-finetuning工程為whisper模型微調(diào)訓(xùn)練工程,該工程提供whisper數(shù)據(jù)轉(zhuǎn)換,模型微調(diào)訓(xùn)練代碼。本章節(jié)將以AiShell數(shù)據(jù)集演示whisper模型微調(diào)訓(xùn)練過程。
其中AiShell下載鏈接:
https://openslr.magicdatatech.com/resources/33/
AiShell數(shù)據(jù)轉(zhuǎn)SRT
在本例中我們提供了AiShell數(shù)據(jù)集轉(zhuǎn)成SRT的python腳本,請根據(jù)示例修改腳本內(nèi)容,其中:
1. aishell_extract.py 解壓AiShell數(shù)據(jù)集,解壓后:
data_aishell
├── transcript
│ └── aishell_transcript_v0.8.txt
└── wav
├── dev
├── test
└── train
2. aishell2srt.py 將解壓后的AiShell數(shù)據(jù)集轉(zhuǎn)成SRT格式,其格式如下:
datas/data_aishell/wav/test/S0907/BAC009S0907W0352.wav 作為 此次 賽事 上 唯一 一 場 純泰 式 規(guī)則 的 超級 戰(zhàn)
datas/data_aishell/wav/test/S0907/BAC009S0907W0269.wav 蘋果 正在 全力 以 赴 出售 盡 可能 多 的 智能 手機
datas/data_aishell/wav/test/S0907/BAC009S0907W0147.wav 從業(yè) 人員 五萬 人
datas/data_aishell/wav/test/S0907/BAC009S0907W0495.wav 港媒 稱 內(nèi)地 人 不 窮 了 為 何 仍 愛 搶 學(xué)者 搶 習(xí)慣 了
3. 在本例中我們提供了create_data.py,將SRT數(shù)據(jù)轉(zhuǎn)成訓(xùn)練數(shù)據(jù),執(zhí)行命令:
python create_data.py --data-file
#suchas:
python create_data.py --data-file datas/data_aishell/train.txt --language zh --output train.json
轉(zhuǎn)換后數(shù)據(jù)格式如下:
{"audio_path": "datas/data_aishell/wav/test/S0907/BAC009S0907W0352.wav", "text":"作為 此次 賽事 上 唯一 一 場 純泰 式 規(guī)則 的 超級 戰(zhàn)", "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": "從業(yè) 人員 五萬 人", "language": "zh", "prompt":""}
{"audio_path": "datas/data_aishell/wav/test/S0907/BAC009S0907W0495.wav", "text": "港媒 稱 內(nèi)地 人 不 窮 了 為 何 仍 愛 搶 學(xué)者 搶 習(xí)慣 了", "language": "zh", "prompt":""}
模型訓(xùn)練
在本例中我們提供了run_finetuning.py用于模型訓(xùn)練,執(zhí)行命令如下:
python run_finetuning.py --train-json
注:其中model可以為tiny, base, small, medium等值,程序會自動下載對應(yīng)的模型;如果,model的值為本地模型文件,則程序會直接加載本地模型進行微調(diào)訓(xùn)練。訓(xùn)練好的模型將保存在save-dir目錄下。
PT模型轉(zhuǎn)ONNX
convert工程為whisper模型轉(zhuǎn)換工程,提供了將pt模型轉(zhuǎn)rknn過程的所有腳本。在本例中我們提供了export_onnx.py腳本將pt模型轉(zhuǎn)成onnx,轉(zhuǎn)換命令:
pip install openai-whisper==20231117
python export_onnx.py --model_type
注:
model_type可以為tiny, base, small, medium等值,程序會自動下載對應(yīng)的模型。如果model的值為本地模型文件,則程序會直接加載本地模型進行轉(zhuǎn)換。同時,onnx模型保存地址需要修改export_onnx.py代碼。
3rknn-toolkit模型轉(zhuǎn)換
rknn-toolkit模型轉(zhuǎn)換環(huán)境搭建
onnx模型需要轉(zhuǎn)換為rknn模型才能在EASY-EAI-Orin-nano運行,所以需要先搭建rknn-toolkit模型轉(zhuǎn)換工具的環(huán)境。當(dāng)然tensorflow、tensroflow lite、caffe、darknet等也是通過類似的方法進行模型轉(zhuǎn)換,只是本教程onnx為例。
概 述
模型轉(zhuǎn)換環(huán)境搭建流程如下所示:
? ? ?
下載模型轉(zhuǎn)換工具
為了保證模型轉(zhuǎn)換工具順利運行,請下載網(wǎng)盤里“06.AI算法開發(fā)/01.rknn-toolkit2模型轉(zhuǎn)換工具/rknn-toolkit2-v2.3.0/docker/rknn-toolkit2-v2.3.0-cp38-docker.tar.gz”。
網(wǎng)盤下載鏈接:
https://pan.baidu.com/s/1J86chdq1klKFnpCO1RCcEA?pwd=1234(提取碼:1234)
把工具移到ubuntu20.04
把下載完成的docker鏡像移到我司的虛擬機ubuntu20.04的rknn-toolkit2目錄,如下圖所示:
運行模型轉(zhuǎn)換工具環(huán)境
在該目錄打開終端
執(zhí)行以下指令加載模型轉(zhuǎn)換工具docker鏡像:
docker load --input rknn-toolkit2-v2.3.0-cp38-docker.tar.gz
執(zhí)行以下指令進入鏡像bash環(huán)境:
docker run -t -i --privileged -v /dev/bus/usb:/dev/bus/usb rknn-toolkit2:2.3.0-cp38 /bin/bash
現(xiàn)象如下圖所示:
輸入“python”加載python相關(guān)庫,嘗試加載rknn庫,如下圖環(huán)境測試成功:
至此,模型轉(zhuǎn)換工具環(huán)境搭建完成。
模型轉(zhuǎn)換為RKNN
EASY EAI Orin-nano支持.rknn后綴的模型的評估及運行,對于常見的tensorflow、tensroflow lite、caffe、darknet、onnx和Pytorch模型都可以通過我們提供的 toolkit 工具將其轉(zhuǎn)換至 rknn 模型,而對于其他框架訓(xùn)練出來的模型,也可以先將其轉(zhuǎn)至 onnx 模型再轉(zhuǎn)換為 rknn 模型。模型轉(zhuǎn)換操作流程入下圖所示:
? ? ?
模型轉(zhuǎn)換Demo下載
下載百度網(wǎng)盤鏈接:
https://pan.baidu.com/s/1C1lQN1U9YhKwpi6PwuyxxA?pwd=1234(提取碼: 1234)
把whisper_convert_rk3576.tar.bz2解壓到虛擬機,如下圖所示:
進入模型轉(zhuǎn)換工具docker環(huán)境
執(zhí)行以下指令把工作區(qū)域映射進docker鏡像,其中,/home/developer/rknn-toolkit2/model_convert_test為工作區(qū)域,/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
執(zhí)行成功如下圖所示:
模型轉(zhuǎn)換操作說明
1、模型轉(zhuǎn)換Demo目錄結(jié)構(gòu)
2、 onnx模型轉(zhuǎn)換為rknn模型
在本例中我們提供了rknn_convert.py腳本將onnx模型轉(zhuǎn)成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')
切換目錄到模型轉(zhuǎn)換工作目錄:
cd /test/whisper_convert_rk3576
執(zhí)行模型轉(zhuǎn)換腳本,轉(zhuǎn)換解碼模型:
python rknn_convert.py
注:whisper是編碼器-解碼器的Transformer模型,所以encoder和decoder模型均需轉(zhuǎn)換。生成模型如下圖所示,模型將保存至output_path 路徑,此模型可以在rknn環(huán)境和EASY EAI Orin-nano環(huán)境運行:
修改rknn_convert.py腳本的ONNX_MODEL和RKNN_MODEL,改為編碼模型的信息。
執(zhí)行模型轉(zhuǎn)換腳本,轉(zhuǎn)換編碼模型:
至此,模型轉(zhuǎn)換流程已完成。
4
模型部署示例
本小節(jié)展示W(wǎng)hisper模型的在EASY EAI Orin-nano的部署過程,本章章節(jié)使用解碼模型whisper_decoder_base_20s.rknn和編碼模型whisper_encoder_base_20s.rknn。
源碼下載及說明
下載whisper C Demo示例文件
百度網(wǎng)盤鏈接:
https://pan.baidu.com/s/1ID5s2LAs_EdgHYcLds3Tvw?pwd=1234(提取碼:1234)。
下載程序包移至ubuntu環(huán)境后,執(zhí)行以下指令解壓:
tar xvf whisper_C_demo.tar.bz2
下載解壓后如下圖所示:
例程編譯
通過adb接口連接EASY-EAI-Orin-nano,,連接方式如下圖所示:
接下來需要通過adb把源碼傳輸?shù)桨蹇ㄉ希惹袚Q目錄然后執(zhí)行以下指令:
adb push whisper_C_demo /userdata
登錄到板子切換到例程目錄執(zhí)行編譯操作
adb shell
cd /userdata/whisper_C_demo
chmod777build.sh
./build.sh
? ?
運行結(jié)果
編譯成功后會得到whisper_demo可執(zhí)行程序,切換到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
執(zhí)行成功識別出中文語音內(nèi)容,RTF值約為0.046:
進行英文語音識別測試,RTF值為0.055:
至此,whisper語音識別例程已成功在板卡運行。
-
編碼器
+關(guān)注
關(guān)注
45文章
3808瀏覽量
138061 -
語音識別
+關(guān)注
關(guān)注
39文章
1782瀏覽量
114247 -
開源
+關(guān)注
關(guān)注
3文章
3689瀏覽量
43832 -
模型
+關(guān)注
關(guān)注
1文章
3521瀏覽量
50427 -
OpenAI
+關(guān)注
關(guān)注
9文章
1210瀏覽量
8923
原文標(biāo)題:EASY EAl Orin Nano(RK3576) whisper語音識別訓(xùn)練部署教程
文章出處:【微信號:easy-eai-AIoT,微信公眾號:EASY EAI靈眸科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
RK3576 vs RK3588:為何越來越多的開發(fā)者轉(zhuǎn)向RK3576?
Mpp支持RK3576么
【EASY EAI Orin Nano開發(fā)板試用體驗】01-開箱報告及開發(fā)環(huán)境準(zhǔn)備
【EASY EAI Orin Nano開發(fā)板試用體驗】--開發(fā)板開箱了解
【EASY EAI Orin Nano開發(fā)板試用體驗】人臉識別體驗
【EASY EAI Orin Nano開發(fā)板試用體驗】開箱和固件燒錄更新體驗
【EASY EAI Orin Nano開發(fā)板試用體驗】EASY-EAI-Toolkit初體驗
【EASY EAI Orin Nano開發(fā)板試用體驗】人臉識別提升
《電子發(fā)燒友電子設(shè)計周報》聚焦硬科技領(lǐng)域核心價值 第20期:2025.07.14--2025.07.18
新品體驗 | RK3576開發(fā)板

RK3576單板發(fā)布倒計時:RK3399與RK3576對比

RK3576 yolov11-seg訓(xùn)練部署教程

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

評論