国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于多線程技術(shù)的ONNX音頻分離模型并發(fā)推理的設(shè)計(jì)與優(yōu)化

2022-10-15 13:17陳家樂董雪蓮方慧檜譚靜元
現(xiàn)代信息科技 2022年14期
關(guān)鍵詞:人聲線程進(jìn)程

陳家樂,董雪蓮,方慧檜,譚靜元

(南華大學(xué),湖南 衡陽(yáng) 421001)

0 引 言

線程則離不開進(jìn)程。首先進(jìn)程是一個(gè)正在執(zhí)行中的程序,每一個(gè)進(jìn)程執(zhí)行都有一個(gè)執(zhí)行順序,該順序是一個(gè)執(zhí)行路徑,或者叫一個(gè)控制單元;線程就是進(jìn)程中的一個(gè)獨(dú)立控制單元,線程在控制著進(jìn)程的執(zhí)行。一個(gè)進(jìn)程中至少有一個(gè)進(jìn)程。多線程:一個(gè)進(jìn)程中不只有一個(gè)線程。

使用多線程,可以更好的利用CPU 的資源,如果只有一個(gè)線程,則第二個(gè)任務(wù)必須等到第一個(gè)任務(wù)結(jié)束后才能進(jìn)行,如果使用多線程則在主線程執(zhí)行任務(wù)的同時(shí)可以執(zhí)行其他任務(wù),而不需要等待;進(jìn)程之間不能共享數(shù)據(jù),線程可以;系統(tǒng)創(chuàng)建進(jìn)程需要為該進(jìn)程重新分配系統(tǒng)資源,創(chuàng)建線程代價(jià)比較?。籎ava 語(yǔ)言內(nèi)置了多線程功能支持,簡(jiǎn)化了java 多線程編程。

傳統(tǒng)的C++(C++98)中并沒有引入線程這個(gè)概念。Linux和Unix 操作系統(tǒng)的設(shè)計(jì)采用的是多進(jìn)程,進(jìn)程間的通信十分方便,同時(shí)進(jìn)程之間互相有著獨(dú)立的空間,不會(huì)污染其他進(jìn)程的數(shù)據(jù),天然的隔離性給程序的穩(wěn)定性帶來了很大的保障。而線程一直都不是Linux 和Unix 推崇的技術(shù),為了使得C++更符合現(xiàn)代語(yǔ)言的特性,在C++11 中引入了多線程與并發(fā)技術(shù)。

1 問題描述

隨著深度學(xué)習(xí)的發(fā)展,近些年來音頻算法在智能醫(yī)療、語(yǔ)音識(shí)別、聲源定位等領(lǐng)域的應(yīng)用非?;馃?,其效能和速度也不斷得到精進(jìn)。從過去的云端服務(wù),逐步脫離并發(fā)展到PC 端邊緣運(yùn)算,到這幾年再往移動(dòng)端運(yùn)算發(fā)展。盡管硬件的運(yùn)算能力越來越強(qiáng)大,但是模型輕量化仍是算法設(shè)計(jì)所追求的核心之一。唯有如此,AI 算法才可以隨時(shí)隨地調(diào)用,發(fā)揮它們強(qiáng)大的作用。

語(yǔ)音識(shí)別是音頻深度學(xué)習(xí)的重要研究課題,被廣泛應(yīng)用到各個(gè)領(lǐng)域,比如語(yǔ)音文字轉(zhuǎn)換,可以快速把說話人的信息以文字的形式保存下來,又比如人聲背景聲分離,可以減弱背景聲對(duì)人聲的干擾,加強(qiáng)語(yǔ)音識(shí)別能力。

語(yǔ)音識(shí)別中的音頻多人聲分離算法,主要針對(duì)多人發(fā)聲的場(chǎng)景下,可以把分離之后的音軌和特定的說話人物對(duì)應(yīng)起來。此種方式為其后的語(yǔ)音識(shí)別領(lǐng)域提供了許多的可能性。譬如,音頻多人聲分離算法未來可能會(huì)應(yīng)用于視頻通話降噪、提升波束成形的質(zhì)量和目標(biāo)人識(shí)別等領(lǐng)域,并為傳統(tǒng)的語(yǔ)音識(shí)別帶來一個(gè)比較大的突破。

其中算法性能指標(biāo)為在 interli7CPU 處理一個(gè)時(shí)長(zhǎng)2 分鐘的音頻 時(shí)間不超過10 秒。

2 方案設(shè)計(jì)

通過對(duì)wav 進(jìn)行數(shù)據(jù)讀取以后,使用需要上下采樣的參數(shù)(如16 000,8 000)構(gòu)造好Kaiser Window,此后將wav數(shù)據(jù)數(shù)組傳入到Kaiser Window 的FIR 濾波器中,通過位移糾偏,即可得到下采樣以后的符合模型推理的8 kHz 的音頻數(shù)組。此外,當(dāng)模型推理完成后,將所得的數(shù)據(jù)再次輸入Kaiser窗口的FIR 濾波器中進(jìn)行上采樣,即8 kHz 上采樣到16 kHz。而后將上采樣結(jié)果輸出到wav 文件中。過程如圖1所示。

圖1 Kaiserwindow 運(yùn)行過程

由于目前大部分的電腦設(shè)備已經(jīng)達(dá)到了6 核、8 核甚至10 核,因此在本項(xiàng)目中使用多線程并行化模型推理可以極大地加速推理,壓縮推理時(shí)間。具體流程如圖2所示。

圖2 并行推理流程

首先核心程序?qū)av 音頻數(shù)據(jù)載入到verctor(內(nèi)存)中,而后對(duì)wav 數(shù)據(jù)進(jìn)行分割,使之大小符合模型的輸入的規(guī)定。而后對(duì)分割出來的每組小音頻數(shù)據(jù)數(shù)組進(jìn)行偏移標(biāo)記,如第一組標(biāo)記偏移量為0,第二組標(biāo)記偏移量為16 000。對(duì)每組數(shù)據(jù),分別送入不同的線程進(jìn)行推理。各線程完成推理后,按照偏移量將推理完成數(shù)據(jù)存放至所對(duì)應(yīng)的位置。最終程序再將所有的數(shù)據(jù)加載到新建的三個(gè)wav 文件中一同輸出到指定的位置。最終實(shí)現(xiàn)在10 s 的長(zhǎng)音頻中推理時(shí)間僅需0.48 s。

使用Microsoft Visual Studio 2019 進(jìn)行開發(fā),主要使用了Microsoft 所自研開發(fā)的ONNX 模型推理框架ONNXRunTime,并且使用C++多線程進(jìn)行并行化推理優(yōu)化、FIR 低通濾波進(jìn)行上下采樣、最終實(shí)現(xiàn)推理加速,VS 編程界面如圖3所示。

圖3 VS 編程界面

3 詳細(xì)代碼

下文給出詳細(xì)代碼:

4 實(shí)驗(yàn)結(jié)果

面對(duì)整個(gè)模型推理的程序工程化問題,我們使用了分而治之的思路。根據(jù)所要達(dá)到的目標(biāo)(模型大小、性能、以及推理速度),我們分成了兩個(gè)主要的工程進(jìn)行問題的解決,分別是算法的實(shí)現(xiàn)以及模型工程優(yōu)化。在本項(xiàng)目中,我們總共使用了3對(duì)模型進(jìn)行訓(xùn)練、3個(gè)技術(shù)點(diǎn)對(duì)模型推理進(jìn)行優(yōu)化,從而提升整個(gè)模型的泛化能力以及推理的速度。最終項(xiàng)目實(shí)現(xiàn)了模型大小僅19.2 MB(FP32),推理速度0.48 s,參數(shù)量4.9 M,計(jì)算量(flops)為32.9 G,整個(gè)程序運(yùn)行的思路為:

首先對(duì)wav 文件進(jìn)行讀取,產(chǎn)生一個(gè)verctor數(shù)組裝載wav 數(shù)據(jù),并獲取wav 文件的sample rate。

根據(jù)sample rate,創(chuàng)建好Kaiser Window,而后將wav數(shù)據(jù)傳入其中進(jìn)行上下采樣。

根據(jù)模型需要的大小,將音頻進(jìn)行切割成合適的片段,并傳入到ONNXRunTime 框架中使用訓(xùn)練好的onnx 模型進(jìn)行推理。每一個(gè)片段進(jìn)行推理時(shí)都使用并行化的方法,最終10s 的音頻分離速度可達(dá)0.48 s。

對(duì)推理完成的wav 數(shù)據(jù)數(shù)組,根據(jù)步驟2 的進(jìn)行反向操作,構(gòu)建Kaiser Window,并重新傳入Kaiser Windows 進(jìn)行上采樣。使用原音頻對(duì)分離出來的兩條音軌進(jìn)行濾波,產(chǎn)生最后的噪音音軌。將所得的三條wav 數(shù)據(jù)進(jìn)行輸出wav。整個(gè)過程的流程圖如圖4所示。

圖4 軟件執(zhí)行邏輯圖

最終可以實(shí)現(xiàn)在Windows 平臺(tái)上面運(yùn)行,提供了cmd命令行的方式對(duì)音頻進(jìn)行分離,其cmd 命令程序無需安裝,僅需解壓即可使用。真正做到了隨解壓隨用,程序運(yùn)行效果如圖5、圖6所示。

圖5 核心推理程序運(yùn)行壓縮包內(nèi)容

圖6 核心推理程序使用界面

5 結(jié) 論

本系統(tǒng)在音頻多人聲分離功能的模型訓(xùn)練中處理了114 000 個(gè)(約合424 小時(shí))Libri-mix,wsj0 和wham 噪音音頻數(shù)據(jù)集,使用Libri-mix 噪聲訓(xùn)練集以及wsj0 純聲訓(xùn)練集交替訓(xùn)練,在純?nèi)寺暦蛛x環(huán)境中達(dá)到17.5 dB SI-SDRi 的測(cè)試集性能指標(biāo),噪音環(huán)境中達(dá)到13.5 dB SI-SDRi 的測(cè)試集性能指標(biāo)。最終獲得模型大小僅為19.2 MB,訓(xùn)練時(shí)長(zhǎng)約合1個(gè)月20 天,執(zhí)行24 小時(shí)不間斷訓(xùn)練。

此外,本項(xiàng)目結(jié)合數(shù)字信號(hào)處理課程以及綜合軟件工程思想,使用KaiserWindow 對(duì)音頻進(jìn)行上下采樣,并且對(duì)推理過程進(jìn)行了并行化優(yōu)化,使得核心推理程序每推理10 s 的音頻最快僅需0.48 s(i7-11800H 平臺(tái))。同時(shí)結(jié)合QT 進(jìn)行開發(fā)的圖形化界面,可以使得音頻工作者處理音頻更方便快捷,更好地解決了其需求。

猜你喜歡
人聲線程進(jìn)程
實(shí)時(shí)操作系統(tǒng)RT?Thread啟動(dòng)流程剖析
Dalvik虛擬機(jī)進(jìn)程模型研究
快速殺掉頑固進(jìn)程
不留死角 全方位監(jiān)控系統(tǒng)
淺談人聲的音高修正對(duì)歌曲情緒表現(xiàn)的影響
愛樂之城
中外民主法制進(jìn)程專題復(fù)習(xí)
采用ScheduledThreadPoolExecutor執(zhí)行定時(shí)重試任務(wù)時(shí)內(nèi)存溢出的分析及解決
Java的多線程技術(shù)探討