介紹
音頻信號處理在各種應(yīng)用中都發(fā)揮著重要的作用,如語音識別、音樂信息檢索、語音合成等。其中,Mel頻譜是一種常用的頻域特征表示方法,用于描述人類聽覺系統(tǒng)對頻率的敏感程度。
在深度學(xué)習(xí)音頻領(lǐng)域,mel頻譜是最常用的音頻特征。在本文中,我們將對四個(gè)常用的音頻處理庫——audioflux、torchaudio、librosa和essentia——進(jìn)行性能測試,以評估它們在計(jì)算Mel頻譜時(shí)的效率。
Library | Language | Version | About |
---|---|---|---|
audioFlux | C/Python | 0.1.5 | A library for audio and music analysis, feature extraction |
torchaudio | Python | 0.11.0 | Data manipulation and transformation for audio signal processing, powered by PyTorch |
librosa | Python | 0.10.0 | C++ library for audio and music analysis, description and synthesis, including Python bindings |
essentia | C++/Python | 2.0.1 | Python library for audio and music analysis |
audioFlux:基于C開發(fā)和python包裝,底層針對不同平臺有不同的橋接處理,支持OpenBLAS,MKL等
TorchAudio: 基于pytorch開發(fā),pytorch基于C++開發(fā)和python包裝,底層使用MKL,pytorch針對CPU是高度優(yōu)化的(本篇評測不涉及到GPU版pytorch);
librosa: 純python開發(fā),主要基于numpy和scipy,numpy底層使用OpenBLAS;
Essentia: 基于C++開發(fā)和python包裝,底層使用Eigen,F(xiàn)FTW;
針對音頻領(lǐng)域最常見的mel特征,涉及到性能主要卡點(diǎn)有FFT計(jì)算,矩陣計(jì)算,多線程并行處理這三部分,其它次要卡點(diǎn)有算法業(yè)務(wù)實(shí)現(xiàn),python包裝等。
針對FFT計(jì)算,librosa使用scipy的fftpack實(shí)現(xiàn)FFT計(jì)算加速,比FFTW3,MKL,Accelerate要慢一些;
針對矩陣計(jì)算,MKL比OpenBLAS要快些,OpenBLAS比其Eigen快一些;
針對多線程并行處理,具體各個(gè)項(xiàng)目內(nèi)部是否有支持。
測試腳本
- 測試多個(gè)庫,使用以下方式:
$ python run_benchmark.py -p audioflux,torchaudio,librosa -r 1000 -er 10 -t 1,5,10,100,500,1000,2000,3000
- -p: The library name, list
- -r: The number of sample data, number
- -er: The number of
run_xxx.py
calls, number - -t: The time of each sample data, list
- 測試單個(gè)庫,使用以下方式:
$ python run_audioflux.py -r 1000 -t 1,5,10,100,500,1000,2000,3000
- 需要更多的命令功能,可以
python run_xxx.py --help
注意
在音頻領(lǐng)域,與音頻特征提取相關(guān)的庫具有自己的功能特點(diǎn),并提供不同類型的特征。本次評估并不旨在詳細(xì)測試所有特征提取的性能比較,但是由于梅爾頻譜是最重要和基礎(chǔ)的特征之一,因此所有這些庫都支持它。
許多因素會影響性能評估結(jié)果,如 CPU 架構(gòu)、操作系統(tǒng)、編譯系統(tǒng)、基本線性代數(shù)庫的選擇以及項(xiàng)目 API 的使用,這些因素都會對評估結(jié)果產(chǎn)生一定的影響。為了盡可能公平地反映實(shí)際業(yè)務(wù)需求,本次評估基于以下條件:
- macOS/Linux 操作系統(tǒng),三種 CPU:Intel/AMD/M1。
- 庫使用最新的官方發(fā)布版本或使用具有高性能支持的最新官方源代碼編譯,并選擇最快的版本。
- 在 API 使用方面,遵循官方標(biāo)準(zhǔn),并對每個(gè)庫的相應(yīng)方法進(jìn)行“預(yù)熱”(不計(jì)算第一次執(zhí)行時(shí)間),并不計(jì)算初始化的執(zhí)行時(shí)間。
- 在數(shù)據(jù)長度方面,選擇測試數(shù)據(jù)時(shí)考慮各種實(shí)際業(yè)務(wù)需求。
當(dāng)數(shù)據(jù)較短時(shí),大多數(shù)庫的第一次執(zhí)行時(shí)間可能相對較慢。為了反映實(shí)際業(yè)務(wù)需求并保持公平,不計(jì)算第一次執(zhí)行時(shí)間。如果庫的 API 設(shè)計(jì)提供了初始化函數(shù),則在實(shí)際業(yè)務(wù)場景中會創(chuàng)建并重復(fù)調(diào)用它們,初始化的執(zhí)行時(shí)間也不計(jì)入評估結(jié)果。
警告
?? 當(dāng)使用 Conda、PyTorch、TensorFlow、XGBoost、LightGBM 等 Python 科學(xué)計(jì)算相關(guān)的庫時(shí),幾乎所有這些庫都使用 Intel Math Kernel Library (MKL)。MKL 使用 OpenMP 進(jìn)行并行加速,但是在同一進(jìn)程中只能存在一個(gè) OpenMP 實(shí)例。當(dāng)這些庫一起使用時(shí),最好將所有庫鏈接到 libomp 的相同位置,否則會出現(xiàn)錯(cuò)誤。根據(jù)提示修改環(huán)境變量可能會導(dǎo)致程序執(zhí)行變慢并產(chǎn)生不可靠的結(jié)果。相關(guān)工具可以用于重寫相關(guān)庫的 libomp 鏈接路徑。
性能
使用 audioFlux/torchaudio/librosa 庫, 針對 AMD/Intel/M1 CPUs and Linux/macOS 系統(tǒng)。
計(jì)算1000個(gè)樣本數(shù)據(jù)的mel頻譜,針對 1/5/10/100/500/1000/2000/3000每個(gè)樣本尺寸大小。 參數(shù)為 fft_len=2048, slide_len=512, sampling_rate=32000。
Linux - AMD
- OS: Ubuntu 20.04.4 LTS
- CPU: AMD Ryzen Threadripper 3970X 32-Core Processor
TimeStep | audioflux | torchaudio | librosa |
---|---|---|---|
1 | 0.04294s | 0.07707s | 2.41958s |
5 | 0.14878s | 1.05589s | 3.52610s |
10 | 0.18374s | 0.83975s | 3.46499s |
100 | 0.67030s | 0.61876s | 6.63217s |
500 | 0.94893s | 1.29189s | 16.45968s |
1000 | 1.43854s | 2.23126s | 27.78358s |
2000 | 3.08714s | 4.10869s | 45.12714s |
3000 | 4.90343s | 5.86299s | 51.62876s |
Linux - Intel
- OS: Ubuntu 20.04.4 LTS
- CPU: Intel(R) Core(TM) i7-6850K CPU @ 3.60GHz
TimeStep | audioflux | torchaudio | librosa |
---|---|---|---|
1 | 0.08106s | 0.11043s | 5.51295s |
5 | 0.11654s | 0.16005s | 5.77631s |
10 | 0.29173s | 0.15352s | 6.13656s |
100 | 1.18150s | 0.39958s | 10.61641s |
500 | 2.23883s | 1.58323s | 28.99823s |
1000 | 4.42723s | 3.98896s | 51.97518s |
2000 | 8.73121s | 8.28444s | 61.13923s |
3000 | 13.07378s | 12.14323s | 70.06395s |
macOS - Intel
- OS: 12.6.1 (21G217)
- CPU: 3.8GHz 8?core 10th-generation Intel Core i7, Turbo Boost up to 5.0GHz
TimeStep | audioflux | torchaudio | librosa |
---|---|---|---|
1 | 0.07605s | 0.06451s | 1.70139s |
5 | 0.14946s | 0.08464s | 1.86964s |
10 | 0.16641s | 0.10762s | 2.00865s |
100 | 0.46902s | 0.83551s | 3.28890s |
500 | 1.08860s | 5.05824s | 8.98265s |
1000 | 2.64029s | 9.78269s | 18.24391s |
2000 | 5.40025s | 15.08991s | 33.68184s |
3000 | 7.92596s | 24.84823s | 47.35941s |
macOS - M1
- OS: 12.4 (21F79)
- CPU: Apple M1
TimeStep | audioflux | torchaudio | librosa |
---|---|---|---|
1 | 0.06110s | 0.06874s | 2.22518s |
5 | 0.23444s | 0.07922s | 2.55907s |
10 | 0.20691s | 0.11090s | 2.71813s |
100 | 0.68694s | 0.63625s | 4.74433s |
500 | 1.47420s | 3.37597s | 13.83887s |
1000 | 3.00926s | 6.76275s | 25.24646s |
2000 | 5.99781s | 12.69573s | 47.84029s |
3000 | 8.76306s | 19.03391s | 69.40428s |
詳細(xì)Benchmark和腳本: https://github.com/libAudioFlux/audioFlux/tree/master/benchmark
總結(jié)
總的來說,從三個(gè)庫的性能比較結(jié)果來看,librosa 執(zhí)行時(shí)間最長,這也符合常識。
在 linux/amd 處理器上,audioflux 比 torchaudio 稍快,但在 linux/intel 上稍慢。
在 macOS 系統(tǒng)上,對于大尺寸樣本數(shù)據(jù),audioflux 比 torchaudio 快,intel 比 m1 明顯;對于小尺寸樣本數(shù)據(jù),torchaudio 比 audioflux 更快。文章來源:http://www.zghlxwxcb.cn/news/detail-424833.html
??盡管本次基準(zhǔn)測試的開發(fā)旨在盡可能客觀和公正,但每個(gè)基準(zhǔn)測試都有其缺點(diǎn),并且限于特定的測試程序、數(shù)據(jù)集和平臺。此外,本次基準(zhǔn)測試未比較庫可能支持的其他功能或其他 API、跨平臺等。我們鼓勵用戶使用自己的數(shù)據(jù)集和平臺進(jìn)行基準(zhǔn)測試。文章來源地址http://www.zghlxwxcb.cn/news/detail-424833.html
到了這里,關(guān)于音頻處理庫性能對比:計(jì)算mel頻譜的速度哪個(gè)更快?的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!