深度学习工具评测---音频领域的python库推荐
目录
- 美英德西奥中
- 关于mel的故事
- 延续scale大战
- 音乐小王子cqt
- 数学显微镜cwt
- 最后无聊的总结
针对MIR(音乐信息检索)领域工程研究概况,下面列出一些全世界最具有影响力的工程成果和相关组织,排名某些情况下可分先后。
美英德西奥中
lib | 派系(名牌大学) | 组织(大佬、学术、名著) | 语言 |
---|---|---|---|
librosa | 美国纽约大学NYU | Rosa实验室 | Python |
aubio | 英国QueenMary大学 | C4DM小组 | C/Python |
essentia | 西班牙UPF大学 | MTG小组 | C++/Python |
madmom | 奥地利JKU大学 | CP研究所 | Python |
- | 德国FAU大学 | AudioLabs实验室 | - |
audioFlux | 中国JLD大学(家里蹲) | AudioFlux小组(社会闲散人员) | C/Python |
注:
librosa,美国出品,目前业界内常用的库,其过程命令式的接口实现设计,方便易用、易理解的同时,也加剧了其性能短板,大规模数据跑起来特别慢。
Rosa实验室,大佬们的论文和各种资源令人目不暇接,但这在美国高校中只是冰山一角,整体反映出其行业背后“教研产创”生态的强壮和勃勃生机。
aubio,更确切的应该是qm-dsp才是C4DM的项目,Chris Cannam大神出品,偏向mir/onset这一块,可惜关注度不高, aubio算是其简化版本,却打出一片名声,由于是简化版本,工具感较重一些,原版本相对丰富的音频特征并不突出,不太适合研发使用。
英国作为老牌资本主义,QueenMary大学产出的Sonic/Vamp业界也是赫赫有名,音频领域积累十分雄厚,和美国某种程度上不分伯仲,留学政策又相对友好,有意向计算机音频、音乐领域的同学,十分建议到此取经。
essentia,其MTG小组也是Vamp插件的重量级产出方,当前库社区较活跃一些,功能上音频特征更全面一些,支持移动端,但整个设计体系感较弱,像一锅乱炖,使用上相比其它库不太方便,和nn有部分耦合。
madmom,mir/onset这块特别出色,但整体耦合nn相关。
AudioLabs实验室,工程上较为松散,缺乏有代表性的库,但每一小块拿出来,都是世界顶级水准,做音频这个行业,无论理论还是工程实践,其资源都是干货满满。
audioFlux,音频特征较为全面,支持移动端,提供尽可能细粒度、体系化的特征维度和组合,但某些变换的逆操作尚未实现。
关于mel的故事
音频领域关于mel频谱,非常重要又非常基础,几乎人人皆知,其概念30年代便提出了,但真正产业化标准的是出自 Malcolm Slaney 大师1998年的苹果公司技术报告,librosa 作者Brian Mcfee是其学生的学生,有时候学术传承很有意思。
现在所有的mel频谱刻度投射算法都是基于“slaney”风格,后来ETSI(欧洲电信标准协会)又定义一种简化风格,国外博客普及mel算法时,使用“ETSI”风格,一些国外个人开源的相关mel工具库基本上也是此风格。
本质上两者都是频域刻度加不同三角窗类似Triang和Bartlett的区别,但是要注意,这里面加什么窗?怎么加窗?何种归一化方式?产生的mel频谱数据高低频细节、能量聚集、对比度都会有不同的差异,这种差异放大到一些业务实践中,模型的准确度和鲁棒性怎么样,就有待研究考察了,下面给出一张简单对比图。
比较Slaney和ETSI,有明显细微的区别,看低频220左右,Slaney明显压共振峰或噪声部分,但基音附近比较发散;高频谐波部分ETSI比较明显。
从清晰度看,Point胜过其它所有,GammaTone较为模糊,Rect清晰同时放大噪声,但不能笼统的认为Point就好于其它,都各有其价值,如果业务偏向于音高相关,频谱当然越清晰越好,如果业务偏向发出声音的物理结构和音高关系不大甚至去音高的,频谱的轮廓就变的重要,有些时候业务上两者可能都会存在,这时候不同的频谱特征数据都可以参与到训练模型上。
针对mel频谱,加什么窗?怎么加窗?何种归一化方式? 使用这些组合产生出更多细粒度的不同特征,训练出模型准确性和鲁棒性的研究, audioFlux库提供全面基础的支持,这是相比librosa等其它库优势的地方,期待后续借用audioFlux这个梯子,产生有价值的paper出现。
延续scale大战
mel如此知名,难道做音频领域深度学习就只有mel?当然不是,有些情况mel不一定是最优的。
mel本质上是一种基于人耳听觉设计的log压缩刻度,人耳针对低频比较敏感,高频不太敏感,比如110hz和123hz一般人都能区分出来,但4000hz和4100hz大部分分不出来。
后来更准确的表示听觉,又提出bark和erb刻度,mel/bark/erb这些都是基于听觉的类log刻度,也有基于乐音八度的octave刻度,还有更通用的log刻度,下面给出一张简单对比图。
同样Slaney风格下,不同scale下产生的频谱数据高低频细节、能量聚集、对比度都会有不同的差异,这种差异放大到一些业务实践中,模型的准确度和鲁棒性怎么样,就非常有研究价值。
对不同scale有不同程度支持的库有 audioFlux、essentia、madmom,其中 audioFlux最为系统和全面。
音乐小王子cqt
上面讲到octave尺度,针对音乐领域有一个非常有名的变换,Constant-Q transform,公式如下。
X[k]=1N[k]∑n=0N[k]−1x[n]Wk[n]e−j2πQnN[k]X[k]=\frac1{N[k]}\sum_{n=0}^{N[k]-1}x[n]W_k[n]e^{\frac{-j2\pi Qn}{N[k]} } X[k]=N[k]1n=0∑N[k]−1x[n]Wk[n]eN[k]−j2πQn
Q=fkΔf=fkfk+1−fk−1Q=\frac{f_k}{\Delta _f}=\frac{f_k}{f_{k+1}-f_{k-1} }Q=Δffk=fk+1−fk−1fk 为常数,N[k]=QfsfkN[k]=Q\frac{f_s}{f_k}N[k]=Qfkfs,Wk[n]W_k[n]Wk[n]表示长度为 N[k]N[k]N[k]的窗函数
音乐领域常使用这个变换和基于这个变换的chroma特征, 标准的CQTCQTCQT实现,要达到一定频率分辨,根据N[k]=QfsfkN[k]=Q\frac{f_s}{f_k}N[k]=Qfkfs,长度惊人,虽然可以使用FFT加速,但已失效大部分业务场景。
通常的做法,由于QQQ的特性符合乐音特点,每个八度内求解N[k]N[k]N[k]要小很多,如果不考虑可变频带比,频域产生的filterBank每个八度都是一样的,同时每进行一次八度求解计算,数据都要进行基2下采样提供给下一次八度计算。这种方式相当于CQT高效实现的hack版本,九十年代提出,现在标准cqt实现的一些库基本上都是基于这篇论文实现的。
后来又提出Non-Stationary Gabor Transform,可以做为解决cqt相关问题的一种最优方案,效率、效果和求逆上都提升不少,公式如下。
X(m,k)=1N[k]∑n=0L−1x[n]Wk[n]ej2πm(n−ωk)N[k]X(m,k)=\frac1{N[k]} \sum_{n=0}^{L-1} x[n] W_k[n]e^{\frac{j2\pi m(n-\omega_k) }{N[k]} } X(m,k)=N[k]1n=0∑L−1x[n]Wk[n]eN[k]j2πm(n−ωk)
WkW_kWk表示中心频率为ωk\omega_kωk,长度为N[k]N[k]N[k]的窗函数,m=0,⋯,N[k]−1m=0,\cdots ,N[k]-1m=0,⋯,N[k]−1
下面是简单的相关对比图。
CQT即标准的cqt实现,NSGT-Octave即nsgt方式的cqt实现,后面两个和cqt无关,属于nsgt体系下的不同scale和cqt相互对比,同时也可以拿CQT和上一节的BFT-Octave Slaney做下对比。
基本得出,
同等分辨尺度下,性能对比 CQT>NSGT(log)≈STFT(log)CQT>NSGT(\log)\approx STFT(\log)CQT>NSGT(log)≈STFT(log);效果对比 NSGT(log)>CQT>STFT(log)NSGT(\log)>CQT>STFT(\log)NSGT(log)>CQT>STFT(log)
同时不难发现,NSGT-Linear频谱更为精细、清晰。
下面是一部分chroma的对比图。
很明显,基于cqt的chroma,比基于linear-chroma和octave-chroma要好很多,这在音乐和声相关业务中对最终模型的影响肯定是显而易见的。
目前audioFlux支持cqt和nsgt体系,librosa仅支持cqt,essentia支持cqt和nsgt-cqt。
数学显微镜cwt
通常使用频谱,都是基于STFT不同scale的频谱,STFT的特点是基于FFT,时间上overlap叠加产生t*f频谱图,但有些情况,针对一些非平稳、突变的短时信号,我们想侦测频率出现的先后次序,时域上的精确突变处等等,FFT显然无法胜任,这时候,Continuous Wavelet Transform即CWT就出场了,对研究非常短的非平稳突变信号非常有用。
假设针对一段512ms的音频数据,如果STFT是基于128ms每次移动32ms,可以得到5个时刻FFT数据构成2维频谱,但如果是128ms音频数据,显然t只有一帧了。
下面是一张针对128ms音频数据,不同类型下的cwt效果图。
本张图只是演示短时侦测突变,至于短时侦测频率出现的先后次序,当然也没问题。
CWT相关变换体系结合具体业务和深度学习能碰撞出什么样的火花,八仙过海,各显神通,就有待后续挖掘了。
当前库中,仅有audioFlux支持CWT相关体系。
最后无聊的总结
最后总结一下, audioFlux是为研发和工程设计的,提供尽可能细粒度、体系化的特征维度和组合。
- 针对研发,做为一个特征提取库,要有深度和广度体系。
- 目前算的上体系的,audioFlux算一个,librosa算半个。
- 针对工程,要满足提取性能,尽量支持移动端(可选)。
- aubio, audioFlux, essentia三个都是C/C++实现,python包装,性能上无大问题,并且都支持移动端。
- 库本身而言,要定位清晰。
- audioFlux, librosa 定位清晰,其它的库如madmom,essentia还做nn相关,你做的再多,有pytorch专业吗,与其花这个时间不如放在音频本身上。
- 易用性上,librosa最方便使用,其它库易用性都差不多,但essentia最不方便使用。
深度学习工具评测---音频领域的python库推荐相关推荐
- python硬件驱动_从零开始:手把手教你安装深度学习操作系统、驱动和各种python库!...
原标题:从零开始:手把手教你安装深度学习操作系统.驱动和各种python库! 为了研究强化学习,最近购置了一台基于 Ubuntu 和英伟达 GPU 的深度学习机器.尽管目前在网络中能找到一些环境部署指 ...
- (翻译)60分钟入门深度学习工具-PyTorch
60分钟入门深度学习工具-PyTorch 作者:Soumith Chintala 原文翻译自: https://pytorch.org/tutorials/beginner/deep_learning ...
- 实录分享 | 计算未来轻沙龙:深度学习工具专场(PPT下载)
12 月 2 日(周日)下午,PaperWeekly 携手清华大学计算机系推出了计算未来轻沙龙第六期线下活动--深度学习工具专场.来自亚马逊 AWS.谷歌.英伟达.百度 PaddlePaddle 以及 ...
- 深度学习的简介、领域、框架和实际应用概述
一.深度学习简介 深度学习,英文名称为Deep Learning,是近几年人工智能领域的主要研究方向.深度学习的主要任务是通过构建深度卷积神经网络(Deep Neural Network,DNN)和采 ...
- 基于PyTorch、易上手,细粒度图像识别深度学习工具库Hawkeye开源
转载自丨机器之心 鉴于当前领域内尚缺乏该方面的深度学习开源工具库,南京理工大学魏秀参教授团队用时近一年时间,开发.打磨.完成了 Hawkeye--细粒度图像识别深度学习开源工具库,供相关领域研究人员和 ...
- python开发需要掌握哪些知识-研究深度学习的开发者,需要对 Python 掌握哪些知识?...
原标题:研究深度学习的开发者,需要对 Python 掌握哪些知识? 今天是918,一个对中国人来说非常特殊的日子.这一天,有些地方可能会拉响警笛,有的地方可能会有一些纪念活动. 但如论如何,今天都是一 ...
- 深度学习:推动NLP领域发展的新引擎
深度学习:推动NLP领域发展的新引擎 深度学习 NLP Attention Memory 文 / 雷欣,李理 从2015年ACL会议的论文可以看出,目前NLP最流行的方法还是机器学习尤其是深度学习,所 ...
- 深度学习工具caffe详细安装指南
转载自 深度学习工具caffe详细安装指南 前言: 在一台系统环境较好的linux机器上可以很容易的安装caffe,但是如果系统本身很旧,又没有GPU的话,安装就太麻烦了,所有都得从头做起,本文档旨在 ...
- (Halcon深度学习)安装深度学习工具(DLT)
0.软件说明: 标记训练数据是迈向任何深度学习应用的第一个关键步骤.当涉及到应用程序的性能.准确性和健壮性时,这些标记数据的质量起着重要作用. 借助DLT,您可以通过直观的用户界面轻松标记数据,而无需 ...
最新文章
- 【 C 】关于学习 realloc 踩过的那些坑
- python随机画散点图-python散点图实例之随机漫步
- python脚本实例手机端-Python脚本实现自动化Android手机apk安装实例
- 【数据结构与算法】之深入解析“灯泡开关”的求解思路与算法示例
- 设计原则--开放-封闭原则(OCP)
- C# 运算符的优先级和关联性
- Apache JMeter教程
- 工业交换机的背板带宽是怎么计算的?
- linux-03-Vim使用+账号用户管理
- Orange Business Services 全球发布 Easy Go Network,帮助企业加速实现“网络即服务”...
- python变量后面加星号_计算与变量(一)跟杜老师一起,趣学Python编程
- [2178]链表的有序集合 (链表的插排法+重复元素的删除) SDUT
- SQL Server 复制, 集群
- jsp连接MYSQL数据库教程(文字+图)
- jxls对比_JXLS 2.4.0学习
- Ubuntu系统下python编程入门
- 计算机无法搜索到打印机驱动,教你一招解决电脑无法找到打印机驱动程序包要求的核心驱动的问题 - 驱动管家...
- 云原生爱好者周刊:炫酷的 Grafana 监控面板集合
- 孤荷凌寒自学python第七十九天开始写Python的第一个爬虫9并使用pydocx模块将结果写入word文档...
- C# 中的委托和事件[转自http://www.cnblogs.com/jimmyzhang/archive/2007/09/23/903360.html]