介绍

音频信号处理在各种利用中都施展着重要的作用,如语音辨认、音乐信息检索、语音合成等。其中,Mel频谱是一种罕用的频域特色示意办法,用于形容人类听觉系统对频率的敏感水平。

在深度学习音频畛域,mel频谱是最罕用的音频特色。在本文中,咱们将对四个罕用的音频解决库——audioflux、torchaudio、librosa和essentia——进行性能测试,以评估它们在计算Mel频谱时的效率。

LibraryLanguageVersionAbout
audioFluxC/Python0.1.5A library for audio and music analysis, feature extraction
torchaudioPython0.11.0Data manipulation and transformation for audio signal processing, powered by PyTorch
librosaPython0.10.0C++ library for audio and music analysis, description and synthesis, including Python bindings
essentiaC++/Python2.0.1Python library for audio and music analysis

audioFlux:基于C开发和python包装,底层针对不同平台有不同的桥接解决,反对OpenBLAS,MKL等
TorchAudio: 基于pytorch开发,pytorch基于C++开发和python包装,底层应用MKL,pytorch针对CPU是高度优化的(本篇评测不波及到GPU版pytorch);
librosa: 纯python开发,次要基于numpy和scipy,numpy底层应用OpenBLAS;
Essentia: 基于C++开发和python包装,底层应用Eigen,FFTW;

针对音频畛域最常见的mel特色,波及到性能次要卡点有FFT计算,矩阵计算,多线程并行处理这三局部,其它主要卡点有算法业务实现,python包装等。

针对FFT计算,librosa应用scipy的fftpack实现FFT计算减速,比FFTW3,MKL,Accelerate要慢一些;
针对矩阵计算,MKL比OpenBLAS要快些,OpenBLAS比其Eigen快一些;
针对多线程并行处理,具体各个我的项目外部是否有反对。

测试脚本

  1. 测试多个库,应用以下形式:

    $ 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
  1. 测试单个库,应用以下形式:

    $ python run_audioflux.py -r 1000 -t 1,5,10,100,500,1000,2000,3000
  2. 须要更多的命令性能,能够python run_xxx.py --help

留神

在音频畛域,与音频特征提取相干的库具备本人的性能特点,并提供不同类型的特色。本次评估并不旨在具体测试所有特征提取的性能比拟,然而因为梅尔频谱是最重要和根底的特色之一,因而所有这些库都反对它。

许多因素会影响性能评估后果,如 CPU 架构、操作系统、编译系统、根本线性代数库的抉择以及我的项目 API 的应用,这些因素都会对评估后果产生肯定的影响。为了尽可能偏心地反映理论业务需要,本次评估基于以下条件:

  1. macOS/Linux 操作系统,三种 CPU:Intel/AMD/M1。
  2. 库应用最新的官网公布版本或应用具备高性能反对的最新官网源代码编译,并抉择最快的版本。
  3. 在 API 应用方面,遵循官网规范,并对每个库的相应办法进行“预热”(不计算第一次执行工夫),并不计算初始化的执行工夫。
  4. 在数据长度方面,抉择测试数据时思考各种理论业务需要。
当数据较短时,大多数库的第一次执行工夫可能绝对较慢。为了反映理论业务需要并放弃偏心,不计算第一次执行工夫。如果库的 API 设计提供了初始化函数,则在理论业务场景中会创立并反复调用它们,初始化的执行工夫也不计入评估后果。

正告

⚠️ 当应用 Conda、PyTorch、TensorFlow、XGBoost、LightGBM 等 Python 科学计算相干的库时,简直所有这些库都应用 Intel Math Kernel Library (MKL)。MKL 应用 OpenMP 进行并行减速,然而在同一过程中只能存在一个 OpenMP 实例。当这些库一起应用时,最好将所有库链接到 libomp 的雷同地位,否则会呈现谬误。依据提醒批改环境变量可能会导致程序执行变慢并产生不牢靠的后果。相干工具能够用于重写相干库的 libomp 链接门路。

性能

应用 audioFlux/torchaudio/librosa 库, 针对 AMD/Intel/M1 CPUs and Linux/macOS 零碎。

计算1000个样本数据的mel频谱,针对 1/5/10/100/500/1000/2000/3000每个样本尺寸大小。 参数为 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

TimeStepaudiofluxtorchaudiolibrosa
10.04294s0.07707s2.41958s
50.14878s1.05589s3.52610s
100.18374s0.83975s3.46499s
1000.67030s0.61876s6.63217s
5000.94893s1.29189s16.45968s
10001.43854s2.23126s27.78358s
20003.08714s4.10869s45.12714s
30004.90343s5.86299s51.62876s

Linux - Intel

- OS: Ubuntu 20.04.4 LTS- CPU: Intel(R) Core(TM) i7-6850K CPU @ 3.60GHz

TimeStepaudiofluxtorchaudiolibrosa
10.08106s0.11043s5.51295s
50.11654s0.16005s5.77631s
100.29173s0.15352s6.13656s
1001.18150s0.39958s10.61641s
5002.23883s1.58323s28.99823s
10004.42723s3.98896s51.97518s
20008.73121s8.28444s61.13923s
300013.07378s12.14323s70.06395s

macOS - Intel

- OS: 12.6.1 (21G217)- CPU: 3.8GHz 8‑core 10th-generation Intel Core i7, Turbo Boost up to 5.0GHz

TimeStepaudiofluxtorchaudiolibrosa
10.07605s0.06451s1.70139s
50.14946s0.08464s1.86964s
100.16641s0.10762s2.00865s
1000.46902s0.83551s3.28890s
5001.08860s5.05824s8.98265s
10002.64029s9.78269s18.24391s
20005.40025s15.08991s33.68184s
30007.92596s24.84823s47.35941s

macOS - M1

- OS: 12.4 (21F79)- CPU: Apple M1

TimeStepaudiofluxtorchaudiolibrosa
10.06110s0.06874s2.22518s
50.23444s0.07922s2.55907s
100.20691s0.11090s2.71813s
1000.68694s0.63625s4.74433s
5001.47420s3.37597s13.83887s
10003.00926s6.76275s25.24646s
20005.99781s12.69573s47.84029s
30008.76306s19.03391s69.40428s

具体Benchmark和脚本: https://github.com/libAudioFlux/audioFlux/tree/master/benchmark

总结

总的来说,从三个库的性能比拟后果来看,librosa 执行工夫最长,这也合乎常识。
在 linux/amd 处理器上,audioflux 比 torchaudio 稍快,但在 linux/intel 上稍慢。
在 macOS 零碎上,对于大尺寸样本数据,audioflux 比 torchaudio 快,intel 比 m1 显著;对于小尺寸样本数据,torchaudio 比 audioflux 更快。

⚠️只管本次基准测试的开发旨在尽可能主观和公正,但每个基准测试都有其毛病,并且限于特定的测试程序、数据集和平台。此外,本次基准测试未比拟库可能反对的其余性能或其余 API、跨平台等。咱们激励用户应用本人的数据集和平台进行基准测试。