如何将RTC中基于AI的音频算法有效的产品化
正文字?jǐn)?shù):4854 ?閱讀時(shí)長(zhǎng):7分鐘
將AI算法任務(wù)模塊化是一種解決AI音頻處理算法應(yīng)用效果不夠好、通用/擴(kuò)展性差、計(jì)算開(kāi)銷大等問(wèn)題的有效方法。網(wǎng)易云信 資深音頻算法工程師 郝一亞在LiveVideoStackCon 2020北京站的演講中就“模塊化”是怎樣解決上述問(wèn)題的,“模塊化”工程實(shí)現(xiàn)的可行性等問(wèn)題進(jìn)行詳細(xì)解析,并舉例介紹了目前市場(chǎng)中的幾個(gè)“模塊化”的成功案例。
文 /?郝一亞
整理 /?LiveVideoStack
大家好,我是郝一亞,來(lái)自網(wǎng)易云信,目前主要負(fù)責(zé)網(wǎng)易云信在RTC領(lǐng)域的音頻算法的研發(fā)。本次我想要分享的題目是如何將AI音頻算法應(yīng)用、結(jié)合到RTC中,我會(huì)結(jié)合自己在國(guó)外的一些研究和開(kāi)發(fā)的經(jīng)驗(yàn),包括網(wǎng)易云信在AI音頻算法應(yīng)用實(shí)戰(zhàn)當(dāng)中的一些經(jīng)驗(yàn)總結(jié),和大家一起聊一聊如何將AI音頻算法與RTC有機(jī)結(jié)合。
01
? ? ? ? ?RTC中AI音頻的現(xiàn)狀
TITTLES
首先,第一個(gè)問(wèn)題是RTC中AI音頻到底是處于一個(gè)什么階段?可能大家會(huì)接收到比較極端的兩種不同信息:第一種就是目前AI算法如Deep Learning等在各行業(yè)都開(kāi)始廣泛應(yīng)用,效果也比較好;另外一種就是大家在實(shí)際的工作當(dāng)中,可能會(huì)感受到AI在某些情況下,比如說(shuō)在訓(xùn)練集和一些特定Case下的感覺(jué)還不錯(cuò),但很難落地、上線到實(shí)際的產(chǎn)品當(dāng)中,存在著各種各樣的問(wèn)題和困難。那么首先我們來(lái)簡(jiǎn)單分析下目前AI音頻到底是處于一個(gè)怎樣的階段。
1.1 音頻處理中AI的力量
先來(lái)介紹一些好的方面,例如結(jié)合CNN的降噪,最早是因?yàn)锳I在Computer vision領(lǐng)域成功的應(yīng)用,我們就可以把這種語(yǔ)譜圖(如圖所示)作為一個(gè)圖像的概念。這樣的方式為CNN和降噪模塊的有機(jī)結(jié)合提供了一個(gè)契機(jī)。
圖中展示的就是一個(gè)CNN的降噪,我們可以看到,如左上角圖所示,右邊是傳統(tǒng)的降噪方法,Noisy Speech相對(duì)于原始信號(hào),它的信噪比已經(jīng)很低了。而左邊是一個(gè)MMSE的算法,相比于傳統(tǒng)方法是有一定提升的,特別是非語(yǔ)音段。但我們可以從中看到特別是高頻的部分,還是存在很多的殘留。從橫向?qū)Ρ葋?lái)看,AI算法在基于傳統(tǒng)的方法之上,可以讓我們?cè)诜钦Z(yǔ)音段有對(duì)噪聲有一個(gè)非常好的抑制,其結(jié)果對(duì)比原始信號(hào),可以看到其實(shí)相似度非常高,肉眼基本很難區(qū)別。
下面的例子是一個(gè)場(chǎng)景的分類,說(shuō)到有關(guān)分類的問(wèn)題,其實(shí)我個(gè)人覺(jué)得這是AI比較擅長(zhǎng)的一個(gè)方向。我們可以看到Noise Suppression、Sound Classification、Acoustic Echo Control,Blind Source Separation這四種方式其實(shí)都是結(jié)合神經(jīng)網(wǎng)絡(luò)的方式。如圖左下角所示的AI Sound Classification是一個(gè)基于簡(jiǎn)單的模型的方式,是不涉及任何神經(jīng)網(wǎng)絡(luò)的。我們可以看到盡管因?yàn)槿蝿?wù)的難度較大,所能達(dá)到的只有百分之六十左右的準(zhǔn)確率,但和傳統(tǒng)方法相比還是有很大程度的提升。
之所以列舉出這兩個(gè)例子,是希望讓大家知道其實(shí)我們?cè)谝纛l上有很多的模塊已經(jīng)可以用AI來(lái)解決,包括這兩個(gè)例子在內(nèi),以及之前提到過(guò)的AEC,還有NLP(非線性處理)模塊其實(shí)現(xiàn)在也有很多研究是在結(jié)合AI來(lái)做,除此之外還包括BSS (盲源分離),目前我知道有些落地的項(xiàng)目也是基于AI的。所以總得來(lái)說(shuō)AI在音頻算法中的應(yīng)用是多種多樣的,是多點(diǎn)開(kāi)花的。
1.2 音頻處理中AI的挑戰(zhàn)與局限
接下來(lái)介紹AI音頻的一些局限,在這里我主要總結(jié)了三點(diǎn):第一點(diǎn)我們能想到的就是AI的計(jì)算量和計(jì)算復(fù)雜度的問(wèn)題。通常來(lái)說(shuō)AI的模型,特別是現(xiàn)在神經(jīng)網(wǎng)絡(luò)的模型,它的計(jì)算量平均來(lái)說(shuō)會(huì)比傳統(tǒng)算法更大一些。對(duì)于大部分終端設(shè)備來(lái)說(shuō),其算力是有限的,PC設(shè)備相對(duì)還好一些,但是我們還需要保證實(shí)時(shí)性,因此將AI的模型全部附加在終端設(shè)備上,對(duì)于設(shè)備的硬件來(lái)說(shuō)還是有比較大的壓力的。第二點(diǎn)是泛化能力。在數(shù)據(jù)驅(qū)動(dòng)的方向上,泛化能力有限一直是一個(gè)問(wèn)題。比如說(shuō)我們有自己的數(shù)據(jù)集,那么我們?cè)撛趺从糜邢薜臄?shù)據(jù)來(lái)cover更多的結(jié)果,特別是由于RTC覆蓋的業(yè)務(wù)場(chǎng)景會(huì)非常多,比如教育領(lǐng)域、泛娛樂(lè)領(lǐng)域,每個(gè)領(lǐng)域的場(chǎng)景都會(huì)有所不同,AI算法要cover所有場(chǎng)景更是難上加難;最后一點(diǎn)是魯棒性,和泛化性略有相似,但更多的是指一些突發(fā)情況,比如在某些場(chǎng)景中突發(fā)的噪聲、時(shí)間上的跳變、參考時(shí)間的不齊等等。在這些情況的影響下,系統(tǒng)夠不夠穩(wěn)定?系統(tǒng)會(huì)不會(huì)犯錯(cuò)?犯的錯(cuò)會(huì)不會(huì)是一個(gè)大錯(cuò)?這其實(shí)很考驗(yàn)AI的算法,就相當(dāng)于我們把所有的東西丟到一個(gè)黑盒子里面,看它是否能夠全部的、真正的運(yùn)行正常。
總結(jié)上面提到的兩點(diǎn),我認(rèn)為AI的效果,它的優(yōu)勢(shì)其實(shí)已經(jīng)被證實(shí)了,但由于算力和數(shù)據(jù)等各方面的問(wèn)題以及AI模型本身的一些問(wèn)題,它現(xiàn)在還達(dá)不到完全替換傳統(tǒng)信號(hào)處理方法的階段。
RTC領(lǐng)域的Tsahi專門就這一問(wèn)題做了很多的評(píng)估,這里我們引用了Tsahi的一張圖,根據(jù)他的分析目前我們的位置剛好是處于一個(gè)臨界點(diǎn)。也就是從現(xiàn)在向后走,當(dāng)我們的算力得到進(jìn)一步提升,或者是我們?cè)跀?shù)學(xué)或各個(gè)基礎(chǔ)學(xué)科上有所突破,可能會(huì)迎來(lái)整個(gè)AI的一個(gè)大爆發(fā),但就目前看來(lái)看我們正處于一個(gè)臨界的位置。所以今天我想和大家一起探討的是如何在臨界位置去揚(yáng)長(zhǎng)避短,如何應(yīng)用AI的優(yōu)勢(shì),然后將它有機(jī)的結(jié)合在我們的RTC里面。?
02
? ? ? ? ? “模塊化”
TITTLES
“模塊化”就是其中的一個(gè)有效途徑,模塊化對(duì)應(yīng)的主要是:例如我們有一個(gè)端到端的長(zhǎng)鏈路,有一個(gè)降噪的算法。長(zhǎng)鏈路就是說(shuō)從數(shù)據(jù)的輸入一直到數(shù)據(jù)的輸出,如果我們直接將其當(dāng)成黑盒來(lái)訓(xùn)練,這就是一個(gè)非常長(zhǎng)的端到端的算法。那對(duì)應(yīng)的模塊化就是我們“能不能將這個(gè)長(zhǎng)鏈路分解成一些小的模塊”,其中一些小的模塊是很適合用AI去做的,我們用小的模塊去做,既節(jié)省了開(kāi)銷,也能夠解決很多之前我們提到的問(wèn)題,就像是讓專業(yè)的人去做對(duì)應(yīng)專業(yè)的事情。
示例一:音頻降噪中的AI算法
舉個(gè)例子,這里是一個(gè)比較通用的端到端的AI降噪算法。我們來(lái)看如圖下方所示的訓(xùn)練的過(guò)程,首先將輸入的信號(hào)放到頻域STFT,然后就直接拿它的Magnitude,先不用相位,直接把它的一些頻點(diǎn)拿去,將它的一些Feature提取出來(lái)做Training,這是一個(gè)非常直觀的訓(xùn)練過(guò)程。
訓(xùn)練完成后直接放在我們的實(shí)時(shí)的系統(tǒng)里面,在實(shí)時(shí)系統(tǒng)里進(jìn)行同樣的操作。然后我們將相位拿出來(lái),先放在這里不做任何操作。接著我們可以通過(guò)做一個(gè)Noisy Floor 或者是簡(jiǎn)單的VAD判斷一下,然后同樣進(jìn)行特征提取,放到預(yù)先訓(xùn)練并Frozen好的降噪的模塊里進(jìn)行處理,最后和我們的Phase結(jié)合,得到我們的輸出。
其實(shí)很多的AI算法如果從宏觀的角度來(lái)考慮,只需要有一個(gè)輸入,有一個(gè)輸出,其它的就都可以全部交給機(jī)器,讓它自己去訓(xùn)練。但這就會(huì)遇到我們剛才提的三個(gè)問(wèn)題:計(jì)算復(fù)雜度,泛化能力和魯棒性,也許我們可以簡(jiǎn)單的做一些權(quán)衡,比如犧牲一些計(jì)算時(shí)間去換取更高魯棒性,但其實(shí)整體上還是很難突破這個(gè)瓶頸。
那么,怎么有效的解決這個(gè)問(wèn)題呢?這里我們看一個(gè)傳統(tǒng)信號(hào)處理中的降噪算法,跟剛才介紹到的方法比較像,唯一不同的地方是它分別添加了一個(gè)Speech Estimation的模型和Noise Estimation模型,這里面會(huì)有比如說(shuō)類似于先驗(yàn)概率(Prior-SNR)這樣的計(jì)算,再通過(guò)后面的結(jié)合就會(huì)有類似于對(duì)于每個(gè)頻點(diǎn)有一個(gè)gain計(jì)算出來(lái),結(jié)合起來(lái)后處理然后再輸出。
那我們看一下,這里的Noise Estimation模塊,其實(shí)是比較適合拿出來(lái)單獨(dú)做深度學(xué)習(xí)訓(xùn)練的小模塊,特別是假設(shè)噪聲是一個(gè)Stationary Noise的穩(wěn)態(tài)噪聲,是更適合的。在這里,我們可以不用端到端的去訓(xùn)練整個(gè)AI的模型,而是把這個(gè)noise estimation訓(xùn)練成一個(gè)噪聲估計(jì)模型。后面我們?cè)趯?shí)時(shí)系統(tǒng)里面,每次遇到Noise Estimation,我們就不再是一個(gè)傳統(tǒng)的Noise Estimation,我們就會(huì)用這個(gè)訓(xùn)練好的Model 去把我們想要的一些參數(shù)和feature都計(jì)算出來(lái)。
還有一個(gè)就是VAD模塊,這里的VAD不是時(shí)域上的VAD,而是對(duì)于每個(gè)頻點(diǎn)有一個(gè)判斷。這種Classification的問(wèn)題是很適合通過(guò)AI 的Model 來(lái)做的,這也是可以單獨(dú)拿出來(lái)做訓(xùn)練的模塊。
我們?cè)倩仡櫼幌逻@三個(gè)問(wèn)題:計(jì)算復(fù)雜度、魯棒性和泛化能力,通過(guò)模塊化,計(jì)算復(fù)雜度的問(wèn)題我們可以用一個(gè)輕量級(jí)的網(wǎng)絡(luò)來(lái)解決。剛才我們看了端到端的NS圖,我們要解決這個(gè)問(wèn)題,一般會(huì)用到層數(shù)稍微偏多的網(wǎng)絡(luò),因?yàn)槲覀円鉀Q的問(wèn)題是比較復(fù)雜的,需要從噪聲和語(yǔ)音疊加的信號(hào)里面,將噪聲給抑制掉。但是如果我們換作只對(duì)Noise 去進(jìn)行一個(gè)Estimation,那本身的問(wèn)題就會(huì)比較簡(jiǎn)單,也就是我們提到的一個(gè)簡(jiǎn)單的訓(xùn)練目標(biāo)。對(duì)于這種訓(xùn)練目標(biāo),這些問(wèn)題本身也會(huì)更適合DNN的Model 去學(xué)習(xí)。
示例二:聲音場(chǎng)景檢測(cè)
再來(lái)看一個(gè)例子,這個(gè)是一個(gè)聲音的場(chǎng)景檢測(cè)分類。剛才現(xiàn)場(chǎng)也有朋友提到過(guò),如果回聲消除里是音樂(lè)聲怎么辦?如果是場(chǎng)景檢測(cè)的話,我們會(huì)有一個(gè)Music Detection,如果檢測(cè)出是音樂(lè)類的場(chǎng)景,我們會(huì)有另外的一套機(jī)制來(lái)處理。例如我們NS中有一套對(duì)于音樂(lè)聲的標(biāo)準(zhǔn),最直觀的就是弱處理,還可以通過(guò)NLP里面的一些相應(yīng)的處理方式;第二個(gè)就是我們簡(jiǎn)單對(duì)Noise 進(jìn)行分類,然后對(duì)應(yīng)剛才提到的Noise Model的Training。比如說(shuō)我們可以分類檢測(cè)出現(xiàn)在平穩(wěn)噪聲是什么類型的平穩(wěn)噪聲,或者是檢測(cè)出現(xiàn)一些非平穩(wěn)的噪聲的類型,我們會(huì)有針對(duì)不同噪聲的預(yù)訓(xùn)練的Model,可以結(jié)合不同場(chǎng)景優(yōu)化NS;第三個(gè)場(chǎng)景是針對(duì)底噪的估計(jì),底噪是一個(gè)比較嚴(yán)重的問(wèn)題,特別是在會(huì)議場(chǎng)景,開(kāi)放的辦公環(huán)境下。那么應(yīng)該如何來(lái)估計(jì)底噪?因?yàn)榈自胼^常見(jiàn)的是平穩(wěn)的噪聲,如果我們有一個(gè)Noise Detection來(lái)輔助,底噪估計(jì)的準(zhǔn)確性會(huì)大幅提高,對(duì)系統(tǒng)來(lái)說(shuō)是一個(gè)整體的優(yōu)化。在這里我列出了場(chǎng)景檢測(cè)的三種不同形式,雖然場(chǎng)景檢測(cè)是一個(gè)很小的模塊,是原本不屬于例如RTC的3A算法、長(zhǎng)鏈路中的模板,是額外附加的子模塊。但當(dāng)我們有了這個(gè)模塊后,可能會(huì)有更多的東西和更多的應(yīng)用場(chǎng)景可以來(lái)優(yōu)化我們的3A算法中的各個(gè)模塊。
示例三:波到達(dá)方向估計(jì)
Direction of Arrival-DOA,
在現(xiàn)在的RTC中,DOA一般會(huì)搭載著B(niǎo)eamforming和Microphone Array
如圖中Demo所示,使用的是圓陣,有八個(gè)麥克風(fēng),一般對(duì)應(yīng)的是會(huì)議室的場(chǎng)景,大家可能會(huì)比較容易聯(lián)想到類似形狀的麥克風(fēng),或者是八爪魚(yú)的形狀的麥克風(fēng)。除了這種形式之外,還有一些平板的電視一般是線陣的,也同樣是陣列的麥克風(fēng)。它是通過(guò)陣列麥克風(fēng)形成不同的Beam,然后通過(guò)DOA來(lái)選擇Active Speaker 是在哪個(gè)Beam上,并且增強(qiáng)它的SNR,而其它噪聲的因?yàn)樵谂园晟?#xff0c;就會(huì)被自然地抑制掉。而且Beamforming是一個(gè)線性的,不存在非線性的失幀。
關(guān)于DOA, 其實(shí)傳統(tǒng)算法有GCC-PHAT和SRP等,是高精度的,能夠從數(shù)學(xué)上精確判斷具體的多少度。
但在實(shí)際的場(chǎng)景中beamforming自己有寬度,一般我們會(huì)做二十多度,或者是十五度,相鄰的beam會(huì)有一些重疊,其實(shí)我們不需要那么高的精度。現(xiàn)在有一個(gè)方法就是通過(guò)Beam Selection直接去判斷應(yīng)該選擇哪個(gè)Beam。DOA會(huì)多出來(lái)這樣的一個(gè)分支,在這個(gè)分支上有很多傳統(tǒng)的算法。我自己在這方面也進(jìn)行了很多的研究,比如在Beam的能量上,哪個(gè)能量大我就用哪個(gè)。我自己也提出過(guò)兩個(gè)方法,都是關(guān)于頻域信息提取的,但是后面通過(guò)對(duì)于傳統(tǒng)算法和DNN算法的比較和研究,嘗試了通過(guò)CNN、RNN或者CNN結(jié)合一些之前幀的信息的方式,也用不同的feature,lost function,基本上大部分的效果都會(huì)比傳統(tǒng)的方法要好很多,包括一些輕量級(jí)的一些網(wǎng)絡(luò)。
03
? ? ? ? ? 未來(lái)展望
TITTLES
剛才我們講了幾個(gè)例子,其實(shí)在整個(gè)的模塊化當(dāng)中還會(huì)有很多的一些其它小的子模塊,可以拿出來(lái),不僅限于之前提到的那些。比如說(shuō)我們最近研究的AEC中的NLP(非線性處理)模塊中,嘗試的結(jié)合BSS的方法,比如ICA。ICA中有一些子模塊可以提取出來(lái),做一些AI 的Training,這個(gè)也是我們目前認(rèn)為比較可行的路,從結(jié)果上來(lái)看效果都會(huì)比之前的好很多。
對(duì)于未來(lái),分享開(kāi)始的時(shí)候我們就提到了Tsahi的預(yù)測(cè),未來(lái)可能會(huì)有更多的AI算法融合進(jìn)來(lái),未來(lái)的爆發(fā)點(diǎn)可能是更先進(jìn)的神經(jīng)網(wǎng)絡(luò)模型,更高效的GPU,但是有一項(xiàng)關(guān)鍵點(diǎn)不會(huì)變,會(huì)一直被需要,那就是數(shù)據(jù)。
數(shù)據(jù)目前我們可以大致分為幾個(gè)部分,比如Open Source,在學(xué)術(shù)界大家會(huì)分享,會(huì)推動(dòng)整體的進(jìn)程,可能會(huì)有第三方公司提供一些數(shù)據(jù),同時(shí)我們自己可能也會(huì)收集一些數(shù)據(jù)。現(xiàn)在網(wǎng)易云信在做的就是針對(duì)很不同的NS場(chǎng)景進(jìn)行AI的降噪,這一部分噪聲對(duì)于我們而言其實(shí)是比較難尋找到的,尤其是前兩個(gè)途徑中。一是因?yàn)檫@些噪聲本來(lái)就會(huì)很特別,Open Source很有限。如果和第三方合作,我們是考慮到驗(yàn)證和收集的過(guò)程中會(huì)有很多溝通成本。所以我們大部分都是自己收集的。自己收集就需要有自己的一些基礎(chǔ)設(shè)備,可能會(huì)要求有自己的消聲室,自己的錄音棚環(huán)境,還有一些工具:人工頭、人工嘴來(lái)播放,還需要一些收集的設(shè)備,比如標(biāo)準(zhǔn)麥克風(fēng)等。還需要很多其他配套的自動(dòng)化工具,比如Labeling的工具。目前我們網(wǎng)易云信已經(jīng)配備了全套工具和環(huán)境,我們現(xiàn)在已經(jīng)自己采集了很多數(shù)據(jù)集,并且應(yīng)用到了我們AI算法中。
下面我們來(lái)給大家演示一個(gè)demo,大家可以體驗(yàn)一下從沒(méi)有降噪到降噪的處理過(guò)程。
除了音頻之外,在視頻方面我們也有很多算法是由AI驅(qū)動(dòng)的,以下是我們?cè)谝曨l超分方面的一個(gè)Demo演示視頻,黃線右邊是原始圖像,左邊是經(jīng)過(guò)超分處理的,大家可以看到,左右兩邊的效果對(duì)比還是非常明顯的。
灣區(qū)最原汁原味的技術(shù),全球最前沿的應(yīng)用實(shí)踐
無(wú)需漂洋過(guò)海,我們?cè)诰€上等您!
LiveVideoStackCon 2020?美國(guó)站
2020年12月10日-12月11日
點(diǎn)擊【閱讀原文】了解更多詳細(xì)信息
總結(jié)
以上是生活随笔為你收集整理的如何将RTC中基于AI的音频算法有效的产品化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 感谢有你 | LiveVideoStac
- 下一篇: 基于AI的超分辨技术在RTC领域的技术难