突破压缩极限的AI语音编解码器
I. Speech Codecs
語(yǔ)音編碼的目的是在保持語(yǔ)音質(zhì)量的前提下盡可能地減少傳輸所用的帶寬,主要是利用人的發(fā)聲過(guò)程中存在的冗余度和人的聽(tīng)覺(jué)特性達(dá)到壓縮的目的。經(jīng)過(guò)了多年的發(fā)展,目前語(yǔ)音編解碼器大致可以分為以下幾類(lèi):
波形編碼,將時(shí)域波形經(jīng)過(guò)采樣量化編碼,常見(jiàn)的就是PCM編碼格式
參數(shù)編碼,根據(jù)人的發(fā)聲機(jī)制建立數(shù)學(xué)模型,然后對(duì)語(yǔ)音進(jìn)行壓縮,常見(jiàn)的是LPC-10
混合編碼,結(jié)合波形編碼和參數(shù)編碼的壓縮方式,常見(jiàn)的AMR等
深度學(xué)習(xí)編碼,利用神經(jīng)網(wǎng)絡(luò)將語(yǔ)音編碼成隱向量,然后利用神經(jīng)網(wǎng)絡(luò)將其恢復(fù)成語(yǔ)音信息,微軟的Satin以及今天要介紹的Lyra就是其代表
雖然目前很多領(lǐng)域仍是直接把PCM封裝成IP包進(jìn)行傳輸,但是在帶寬限制的領(lǐng)域,如VoIP語(yǔ)音會(huì)議,語(yǔ)音編解碼是較為關(guān)鍵的技術(shù)之一。
II. Lyra
Lyra去年就已經(jīng)在Github上開(kāi)源了,并且同時(shí)支持Linux和Android系統(tǒng)。當(dāng)時(shí)年輕的我使用VM創(chuàng)建了一個(gè)Ubuntu的虛擬機(jī),許多個(gè)夜晚睡覺(jué)前敲下編譯命令:
第二天興沖沖地醒來(lái)卻發(fā)現(xiàn)虛擬機(jī)已經(jīng)卡死。如今我吸取了以前的教訓(xùn),首先我升級(jí)了硬件,給我的暗影精靈增加了4G的內(nèi)存條,然后我拋棄了VM轉(zhuǎn)投雙系統(tǒng)的懷抱,關(guān)于如何裝雙系統(tǒng)可以參考我的博客。本以為天時(shí)地利人和皆在我,但還是由于一些環(huán)境和網(wǎng)絡(luò)問(wèn)題花了很多精力才編譯成功,如果你不想自己編譯的話,本文末尾有對(duì)應(yīng)鏈接。如果你想自行編譯的話,這里給你一些我踩過(guò)的坑:1)刪除WORKSPACE中關(guān)于Android SDK和NDK的repo;2)科學(xué)上網(wǎng)采用全局模式。
廢話不多說(shuō)了,我們直接進(jìn)入正題。目前常用的編解碼器Opus是一種混合編解碼器,對(duì)于窄帶語(yǔ)音信號(hào)使用SILK進(jìn)行編碼,對(duì)于寬帶和超寬帶使用CELT編碼。
而Lyra的整體流程如下所示:
可以看出Lyra整體流程非常簡(jiǎn)單,在編碼過(guò)程中,Lyra每40ms提取一次特征,所使用的特征是160維的log melspectrum,然后將它們量化到3kbps;在解碼過(guò)程中,則使用生成模型將量化后的特征重構(gòu)語(yǔ)音信號(hào),如果讀者對(duì)語(yǔ)音合成或者語(yǔ)音轉(zhuǎn)換等任務(wù)有所了解的話,那么對(duì)解碼部分應(yīng)該不會(huì)感到陌生。可惜的是Google只開(kāi)源了應(yīng)用,沒(méi)有開(kāi)源如何訓(xùn)練這個(gè)模型,因此具體的網(wǎng)絡(luò)結(jié)構(gòu)也不得而知,只能從部分代碼中窺探一二。
III. Experiment
下面我們看下Lyra編解碼的效果,原始音頻如下所示,可以看到原始音頻音量比較小,并且能量大多集中在5K以下,該樣本PCM格式文件大小的為236KB。
Lyra編碼后的文件大小為2.77KB,解碼后的音頻如下所示,可以看到Lyra一些原始音頻中的頻率成分沒(méi)有正確的重構(gòu),但同時(shí)一些背景噪聲也被抑制干凈。
從頻響曲線中看得更明顯:
Lyra中高頻部分明顯低于原始音頻,但是低頻部分保留的較為完整,這就可以滿足聽(tīng)得懂這個(gè)最低的要求。但是由于高頻的缺失會(huì)導(dǎo)致,聽(tīng)起來(lái)聲音很悶,不夠明亮。由于本人精力有限,沒(méi)有辦法進(jìn)行較為詳細(xì)的評(píng)測(cè),讀者要是有興趣可以自行實(shí)驗(yàn)。
IV. Conclusion
總的來(lái)說(shuō),對(duì)于一個(gè)實(shí)用的語(yǔ)音編解碼應(yīng)該滿足兩個(gè)部分:
合理的時(shí)間復(fù)雜度
處理多種多樣的語(yǔ)音輸入
對(duì)于第一點(diǎn)可以通過(guò)輕量化模型的方法比如稀疏模型或者使用GRU的生成模型代替WaveNet這種計(jì)算量巨大的模型;對(duì)于第二點(diǎn),可以使用頻譜特征,并且在訓(xùn)練的過(guò)程設(shè)計(jì)損失函數(shù)對(duì)待噪聲的樣本進(jìn)行一定程度的懲罰。
那么語(yǔ)音編解碼的終極模式是什么樣子的呢?
本文相關(guān)代碼在公眾號(hào)語(yǔ)音算法組菜單欄點(diǎn)擊Code獲取
參考文獻(xiàn):
[1]. https://ai.googleblog.com/2021/02/lyra-new-very-low-bitrate-codec-for.html
[2]. https://github.com/google/lyra
[3]. https://wenku.baidu.com/view/9be752ee5bf5f61fb7360b4c2e3f5727a5e92466.html
[4]. https://en.wikipedia.org/wiki/Category:Speech_codecs
[5]. On the information rate of speech communication
[6]. GENERATIVE SPEECH CODING WITH PREDICTIVE VARIANCE REGULARIZATION
總結(jié)
以上是生活随笔為你收集整理的突破压缩极限的AI语音编解码器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: php编辑器编程程序,有哪些编辑器是可以
- 下一篇: HTML文档解析