音频处理库性能对比:计算mel频谱的速度哪个更快?

这篇具有很好参考价值的文章主要介绍了音频处理库性能对比:计算mel频谱的速度哪个更快?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

介绍

音频信号处理在各种应用中都发挥着重要的作用,如语音识别、音乐信息检索、语音合成等。其中,Mel频谱是一种常用的频域特征表示方法,用于描述人类听觉系统对频率的敏感程度。

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

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开发和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
  1. 需要更多的命令功能,可以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
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

详细Benchmark和脚本: https://github.com/libAudioFlux/audioFlux/tree/master/benchmark

总结

总的来说,从三个库的性能比较结果来看,librosa 执行时间最长,这也符合常识。
在 linux/amd 处理器上,audioflux 比 torchaudio 稍快,但在 linux/intel 上稍慢。
在 macOS 系统上,对于大尺寸样本数据,audioflux 比 torchaudio 快,intel 比 m1 明显;对于小尺寸样本数据,torchaudio 比 audioflux 更快。

⚠️尽管本次基准测试的开发旨在尽可能客观和公正,但每个基准测试都有其缺点,并且限于特定的测试程序、数据集和平台。此外,本次基准测试未比较库可能支持的其他功能或其他 API、跨平台等。我们鼓励用户使用自己的数据集和平台进行基准测试。文章来源地址https://www.toymoban.com/news/detail-424833.html

到了这里,关于音频处理库性能对比:计算mel频谱的速度哪个更快?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 音频信号的频谱分析实例

    在前面的文章 信号频谱分析与功率谱密度 中,我们初步探讨了信号频谱分析的概念,并介绍了其数学工具。本篇文章将结合实例,进一步探讨频谱分析在音频信号处理中的应用。 音频信号的频谱分析是一种将时域中的音频信号转换为频域表示的过程,从而可以观察信号在不

    2024年04月16日
    浏览(43)
  • Vue中如何进行音频可视化与音频频谱展示

    随着音频应用程序的不断发展,音频可视化和音频频谱展示成为了重要的功能。在Vue应用程序中实现音频可视化和音频频谱展示可以帮助用户更好地了解音频文件的内容和特征。本文将介绍如何在Vue应用程序中实现音频可视化和音频频谱展示功能。 音频可视化是指将音频信号

    2024年02月15日
    浏览(60)
  • Spark性能优化:提高计算速度与资源利用率的实用技巧

    Apache Spark是一个开源的大规模数据处理框架,它可以处理批量数据和流式数据,并提供了一个易用的编程模型。Spark的核心组件是Spark引擎,它负责执行用户的计算任务。在大规模数据处理中,Spark性能优化是非常重要的,因为它可以提高计算速度和资源利用率。 在本文中,我

    2024年02月20日
    浏览(57)
  • c++矩阵计算性能对比:Eigen和GPU

    生成随机矩阵 生成随机矩阵有多种方式,直接了当的方式是使用显式循环的方式为矩阵的每个元素赋随机值。 另一种方式是使用Eigen库,它提供了矩阵运算的库。 生成随机矩阵: 计算矩阵点积 使用显式循环计算 直接上代码: 使用Eigen库 代码: 使用GPU 代码片断: 结果分析

    2024年02月12日
    浏览(36)
  • Android 音频可视化:频谱特效的探索与实践

    音频可视化,一言以蔽之,就是声音到图像的转换。 随着视觉工业时代的到来,用户逐渐重视产品的极致体验,在市场上诸多优秀的音乐类APP中, 频谱动效 是一个经典的应用场景: 图片来源:咪咕音乐 本文以 Android 端为例,从音频信号 数据的获取 、 数据的处理 、 常见问

    2024年02月15日
    浏览(45)
  • 解放计算力:使用并行处理提升python for循环速度

    Python 是一门功能强大的编程语言,但在处理大规模数据或复杂计算任务时,性能可能成为一个瓶颈。幸运的是,Python 提供了多种方法来提升性能,其中之一是利用并行处理来加速循环操作。本文将介绍如何使用并行处理技术来优化 for 循环,从而提高 Python 程序的执行速度。

    2024年02月10日
    浏览(48)
  • 使用python绘制音频的时频图、频谱图和MFCC特征图

    时频图如上 频图图 完整的mfcc

    2024年02月13日
    浏览(45)
  • 基于STM32&FFT(快速傅里叶变换)音频频谱显示功能实现

    + v hezkz17进数字音频系统研究开发交流答疑 一实验效果   二 设计过程 要用C语言实现STM32频谱显示功能,可以按照以下步骤进行操作: 1 确保已经安装好了适当的开发环境和工具链,例如Keil MDK或者GCC工具链。 2 创建一个新的STM32项目,并选择适合的MCU型号。 3 配置GPIO引脚用

    2024年02月12日
    浏览(39)
  • html+css+js本地音乐播放器,实现可视化音频频谱

    html+css+js本地音乐播放器,实现可视化音频频谱 之前用swing写了个本地音乐播放器(如下图),但是效果一言难尽,界面丑,功能bug也多,唉 所以后面又重新用html写了个,界面样式和功能方面,比swing写的好看、完善多了。 导入音乐(已完成) 展示列表(已完成) 列表双击

    2024年02月09日
    浏览(48)
  • [pgrx开发postgresql数据库扩展]4.基本计算函数的编写与性能对比

    再次声明: 并不是所有场景都需要(或者适合)用rust来写的,绝大部分操作数据库的功能和计算,用SQL就已经足够了! 本系列中,所有的案例,仅用于说明pgrx的能力,而并非是说这样做比用SQL更合适。反之:对于操作数据库本身的部分,大部分能用SQL来实现的东西,都比做

    2024年02月01日
    浏览(83)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包