音频处理库大PK:四种主流库在计算mel频谱时性能如何?

news2024/10/7 7:29:11

目录

    • 介绍
    • 测试脚本
      • 注意
      • 警告
    • 性能
        • Linux - AMD
        • Linux - Intel
        • macOS - Intel
        • macOS - M1
    • 总结

介绍

音频信号处理在各种应用中都发挥着重要的作用,如语音识别、音乐信息检索、语音合成等。其中,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
  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

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、跨平台等。我们鼓励用户使用自己的数据集和平台进行基准测试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/463735.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Hello Network】网络编程套接字(四)

作者:小萌新 专栏:网络 作者简介:大二学生 希望能和大家一起进步 本篇博客简介:简单介绍下TCP通讯过程 文章目录 简单的TCP英译汉服务器更改handler方法 地址转换函数字符串转化整型IP整数IP转化字符串 绑定失败问题TCP协议通讯流…

贪吃蛇小游戏(C++)

首先我们需要下载EasyX(具体的方法在EasyX专栏中有提到) easyX下载和绘制简单基本图形_小梁今天敲代码了吗的博客-CSDN博客 贪吃蛇这个游戏我们一定都玩过,玩家使用方向键操控一条“蛇”,蛇会朝着一个方向不断移动,玩…

主成分分析

一、案例与数据 某研究者对企业员工进行调查,并且制定了一份问卷,研究者想要将问卷中的多个量表题进行浓缩以便后续分析,比如休假制度、资金制度、工资水平或者晋升制度等等,其中部分数据如下: 二、分析问题 其实想要…

时序预测 | MATLAB实现WOA-BiLSTM鲸鱼算法优化双向长短期记忆网络时间序列预测

时序预测 | MATLAB实现WOA-BiLSTM鲸鱼算法优化双向长短期记忆网络时间序列预测 目录 时序预测 | MATLAB实现WOA-BiLSTM鲸鱼算法优化双向长短期记忆网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现WOA-BiLSTM鲸鱼算法优化双向长短期记忆网络时间…

前端已死还是“娱乐至死”?做个清醒的前端

目录 一、前言 二、为什么会出现“前端已死”的观点? 1、技术变化太快: 2、前端工程化带来的挑战: 3、新技术的崛起: 三、前端该如何提升自己 1、学习新技术: 2、掌握前端工程化: 3、参与社区和开…

远程网关桥接模式实现同一局域网组网管理(Superlink)

远程网关桥接模式配置介绍及示例 功能简述 智联物联远程网关桥接模式,是指电脑侧Superlink远程工具及前端ZP网关通过4G/WAN/WiFi客户端等方式分别接入互联网及后端服务器平台远程服务后,再借助虚拟网卡桥接技术,先由服务器平台下发桥接网络参…

室内定位之5G定位

一、前言 随着5G通信基础设施逐步完善,5G网络的优势一方面在于其具有的更大的带宽和子载波间隔,使得5G室内定位精度提升(3.5GHz频段下定位精度在5米左右,毫米波定位精度可以达到3米或更高),相对于其他定位技术,已建成…

解决docker启动mysql无法输入中文以及中文不显示或乱码问题

前言 我在使用MySQL时,遇到了两个问题。一是在插入中文数据时,无法输入中文。二是在select的时候,查出来的中文数据是空的(因为插入时为空),然后我就使用Navicat连接数据库添加了中文数据,再到…

【MySQL】联合查询子查询以及合并查询的使用

目录 上篇在这里喔~ GROUP BY分组子句与联合查询的使用详解 联合查询步骤 1.自连接 1.查询每位同学的计算机原理和Java的成绩 2.显示所有计算机原理成绩比java成绩高的成绩信息 2.子查询 1.单行子查询 1.查询’许仙‘的同班同学 2.多行子查询 1.查询语文或英语课程的…

综合管廊智慧运维管理平台应用研究

摘要:为提升综合管廊运维管理水平,实现管理的数字化转型,采用综合监测系统、BIMGIS 可视化系统、智能机器人巡检、结构安全监测等技术,搭建实时监控、应急管理、数据分析等多功能为一体的智慧管廊运维管理平 台,为综合…

Python爬虫基础之二

Python爬虫基础包括HTTP协议、HTML、CSS和JavaScript语言基础、requests库的使用、Beautiful Soup库的使用、xpath和正则表达式的使用等。此外,还应该了解反爬虫机制和爬虫的一些常见问题及解决方法。 上一篇文章讲解了有关条件判断语句、循环语句等相关知识&#…

stm32串口中断流程

NVIC简介 内嵌向量中断控制器:Nested Vectored Interrupt Controller (NVIC) 硬件发生中断后,相关电信号会触发内核跳转中断向量表查找中断函数, 中断向量名查于汇编文件startup_stm32xxx.s文件 从本质上说这里就是数字电路的组合形成的一系列行为,当相关中断的寄存…

一键汇总——高效电脑检索方案

文件检索和分类对于电脑内部的文件检索非常重要,因为它们可以帮助用户快速找到需要的文件。在电脑内部,文件通常被分类存储在不同的分区中,这有助于管理员更好地组织和查找文件。对于分区资源整合,以下是一些建议: 了…

大好河山集团董事长黄国林受邀出席2023中国好公司高峰论坛暨产学研合作峰会

大好河山集团董事长黄国林受邀出席2023中国好公司高峰论坛暨产学研合作峰会 本网消息 2023年4月19日,由中国智慧工程研究会、华夏商邦俱乐部、中国流通研究院共同主办,中国品牌发展网联合主办的“2023中国好公司高峰论坛暨产学研合作峰会”在福州福清举…

应急照明系统在民用建筑的设计应用与产品选型

【摘要】应急照明分为备用照明、安全照明及疏散照明。文章介绍了应急照明系统的设计、灯具选择、灯具布置、配电等要求。并结合实例进行疏散照明的计算,以指导应急照明系统的设计与应用。 【关键词】照度;光通量;消防应急灯具;A型…

【Linux】解决切换用户出现bash-4.2$问题创建普通用户并设置密码、授权

【问题描述】 linux中创建了一个wxh用户,然后使用su命令切换用户后,终端提示符显示成“bash-4.2$”而不是[rootlocalhost wxh]#,导致ll等命令无法执行。 [rootlocalhost xhh]# su wxh bash-4.2$ ll bash: ll: 未找到命令 【原因】 没有在hom…

13种权重的计算方法

权重计算方法有很多种,不同的方法有不同的特点和适用情况。AHP层次分析法和熵值法在权重计算中属于比较常用的方法。除此之外,还有一些与权重计算相关的方法,今天一文总结了13种与权重计算相关的方法,大家可以对比选择使用。 一、…

【001-Java基础练习】-适合初学者的练习

用于巩固java基础知识,初学者多练多敲,熟悉代码,熟悉语法就ok。 练习1、从控制台获取Java、ps、HTML三门课程的成绩,计算总分和平均分(平均分保留2位小数,要求四舍五入),输出总分和…

OpenAI最新官方ChatGPT聊天插件接口《插件部署上生产》全网最详细中英文实用指南和教程,助你零基础快速轻松掌握全新技术(五)(附源码)

Plugins in production 插件部署上生产 前言Rate limits 速率限制Updating your plugin 更新您的插件Plugin termsDomain verification and security 域验证和安全性Defining the plugins root domain 定义插件的根域Manifest validation 清单验证Resolving the API spec 解析A…

【小程序】input输入双向数据绑定

小程序中&#xff0c;input标签中的数据为单向绑定&#xff1a; <inputtype"number"bindinput"inputRealmoney"value"{{ amount }}"placeholder"请输入金额" />如上代码&#xff0c;我们绑定了输入框的数据amount&#xff0c;并…