翻唱歌曲识别在音乐信息检索(MIR)领域是一项具有挑战性的任务,因为查询曲目和翻唱版本之间存在复杂的音乐差异。以前的工作通常使用手工特征和对齐算法,最近利用神经网络方法取得了进一步的突破。

本文基于翻唱任务的特点,提出了一种新颖的卷积神经网络结构。我们首先通过分类策略对网络进行训练,然后使用该网络提取音乐表示,用于翻唱歌曲识别,本文设计了一种针对节奏变化训练鲁棒模型的方案。实验结果表明,我们的方法在所有公共数据集上的性能优于最先进的方法,特别是在大型数据集上提高了性能。

关键词:音乐信息检索,翻唱歌曲识别


1、引言

翻唱歌曲识别一直是音乐信息检索界的热门任务,在音乐许可管理、音乐检索和音乐推荐等领域具有潜在的应用前景。翻唱歌曲的识别也可以被视为衡量音乐旋律之间的相似性。考虑到翻唱的歌曲可能会在调位、速度变化和结构变化上与原曲有所不同,识别翻唱歌曲是一项相当具有挑战性的任务。

在过去的十年中,研究人员最初尝试使用动态规划(DP)方法来解决这个问题。通常,代表12个音高等级强度的色度序列被用来描述录音,然后DP方法被用来寻找两个给定录音之间的最佳校准,解决节奏变化和结构变化造成的差异。当面对音乐的结构变化和节奏变化时,这种方法很有效;但由于元素间距离计算时间复杂度过大,不适合大规模数据集。

此外,一些研究者尝试通过建模音乐来识别翻唱歌曲。比如,Serrà等人研究了基于时间序列建模的翻唱歌曲识别方法。 Julien 等人用固定维度的向量表示音乐,这样就可以直接测量音乐的相似性。与校准方法相比,这些方法大大提高了效率,但在这些方法中音乐时间信息的丢失可能会导致较低的精度。

此外,引入深度学习方法进行歌曲识别。例如,利用cnn测量相似性矩阵或学习特征,虽然这些方法取得了良好的效果,但仍有改进的空间。本文提出了一种特殊设计的CNN架构,以克服翻唱歌曲识别中存在的关键换位、速度变化和结构变化等问题。

值得注意的是,在音乐信息检索领域本文首次使用了专门的内核大小。介绍了膨胀卷积和数据增广的方法。我们的方法在所有公共数据集上都优于最先进的方法,具有更好的准确性和更低的时间复杂度。此外,据我们所知,我们的方法是目前在巨大的现实生活语料库中识别翻唱歌曲的最佳方法。

2、方法

2.1 问题公式化

如图1所示,我们有一个训练数据集D = {(xn, tn)},其中xn是一个录音,tn是一个one-hot向量,表示录音属于哪首歌(或类)。同一首歌的不同版本被视为同一类的样本,不同的歌曲被视为不同的类。

2.2 低级表示

我们的实验采用Librosa提取CQT,将频率能量映射到音符中。将音频重采样到22050 Hz,设置每八度的bin数为12,使用Hann窗口提取,跳数为512。最后,对CQT进行时间方向20点均值下采样,得到特征率约为2hz的序列。它也可以被视为84 × T矩阵,其中T取决于输入音频的持续时间。

2.3 网络结构

本文为翻唱任务设计了一种新颖的网络架构。除了在初始层中,我们将卷积核的高度设计为12或13(参见图2),因为CQT中每个倍频的bin数设置为12。这种设置的结果是,第三层的单元具有高度为36的接收野;它横跨三个八度或三十六个半音。

2.4 训练

对于每一批,我们从训练集中采样一些录音并从中提取cqt。对于每个CQT,我们随机裁剪3个长度为200、300和400的子序列进行训练,分别对应于大约100s、150s和200s。

尽管训练集包含不同速度的翻唱,但每首歌平均只有几个翻唱用于训练。此外,由于我们的模型没有显式地处理翻唱歌曲的节奏变化,因此模型可能很难学习对节奏变化进行自动鲁棒的表示。因此,我们在模型训练时进行数据增强。如算法1所示,我们从(0.7,1.3)为均匀分布的批中的每个记录采样一个变化因子,并在裁剪子序列之前使用Librosa对记录进行模拟节奏变化。

2.5 搜索

训练结束后,使用网络提取音乐表征。如图1所示,给定一个查询q和一个参考r,我们首先分别提取它们的CQT描述符q和r,将它们输入网络得到音乐表示fθ(q)和fθ®),然后测量相似性s,定义为它们的余弦相似度。在计算查询和数据集中引用之间的两两相似度之后,返回一个排序列表以供计算。

3、实验结果

首先探讨了cnn的核大小,将初始三层的核大小替换为3 × 3,7 × 3,15 × 3,7 × 7,12 × 12。实验结果表明,滤波器高度为12或13时效果最佳。

表4.1显示了我们的方法在所有数据集上都优于最先进的方法。该方法的优点在于不依赖复杂的手工特征和精心设计的对齐算法,利用海量数据和特征学习,获得了较高的精度。通过收集更大的数据集,我们的方法可以获得更高的精度。值得注意的是,我们的训练集SHS100K-TRAIN主要由流行音乐组成,而Mazurkas包含古典音乐。我们的方法在这个数据集上优于最先进的方法,这表明了良好的泛化能力。

我们听取Top10检索结果,尝试对SHS100K-TEST进行一些分析。我们的方法可以识别由不同性别、不同乐器伴奏、用不同语言演唱的版本。特别是,由于我们的训练目标是对歌曲进行分类,而同一首歌的不同版本往往具有相似的风格、旋律和和弦结构,我们发现即使Top10中的一些候选人可能不是查询的翻唱,但它们与查询具有相似的伴奏和流派等属性。例如,bluebeater乐队的《Everybody Knows This Is Nowhere》与Bob Marley和the Wailers乐队的《Waiting in V ain》有相似的伴奏。

从这个意义上说,我们的方法也可以用于检索查询中的相似音乐,并扩展到基于内容的音乐推荐。

4、结论

与传统的技术不同,我们提出了用于翻唱歌曲识别特征学习的cnn算法。利用特定的核和扩大的卷积来扩展接受域,我们表明它可以用来捕捉音乐背后的旋律结构,并学习键不变表示。通过将问题转换为分类任务,我们训练了一个用于音乐版本识别的模型。

此外,我们设计了一种训练策略,以增强模型对节奏变化的鲁棒性,并处理不同长度的输入。结合这些技术,我们的方法在所有低时间复杂度的公共数据集上优于最先进的方法。此外,我们还证明了该模型可以检索不同版本的音乐并发现相似的音乐。最终,我们相信我们的方法能够解决现实生活中的翻唱问题。

【歌曲识别】CQTNet:利用卷积神经网络学习翻唱歌曲识别的表示方法相关推荐

  1. ​厦大等高校研究人员利用卷积神经网络学习脑电地形图表示进行分类

    脑电图(EEG)地形图表征(Electroencephalography topographical  representation, ETR)可以监测区域大脑活动,是一种可以用于探索皮层机制和联系的 ...

  2. ​利用卷积神经网络学习脑电地形图表示进行分类

    点击上面"脑机接口社区"关注我们 更多技术干货第一时间送达 脑电图(EEG)地形图表征(Electroencephalography topographical  represen ...

  3. 卷积神经网络精确率不增反降_姿态跟踪论文研读--(1)利用卷积神经网络学习人体姿态估计特征...

    摘要 本文介绍了一种新的结构,就是利用多层卷积神经网络结构和模块化学习技术来习得低维特征和高维弱空间模型,以此来进行人体姿态估计.无约束的人体姿态估计是计算机视觉领域中最困难,最棘手的问题之一,而我们 ...

  4. 卷积神经网络学习项目--Kaggle仙人掌识别--基于TensorFlow(未完成)

    这是 Kaggle 上的一个学习项目,任务是识别航拍图像中是否有柱状仙人掌. 数据下载:https://www.kaggle.com/c/aerial-cactus-identification/da ...

  5. DL之AlexNet:利用卷积神经网络类AlexNet实现猫狗分类识别(图片数据增强→保存h5模型)

    DL之AlexNet:利用卷积神经网络类AlexNet实现猫狗分类识别(图片数据增强→保存h5模型) 目录 利用卷积神经网络类AlexNet实现猫狗分类识别(图片数据增强→保存h5模型) 设计思路 处 ...

  6. DL之CNN:利用卷积神经网络算法(2→2,基于Keras的API-Functional)利用MNIST(手写数字图片识别)数据集实现多分类预测

    DL之CNN:利用卷积神经网络算法(2→2,基于Keras的API-Functional)利用MNIST(手写数字图片识别)数据集实现多分类预测 目录 输出结果 设计思路 核心代码 输出结果 下边两张 ...

  7. DL之CNN:利用卷积神经网络算法(2→2,基于Keras的API-Sequential)利用MNIST(手写数字图片识别)数据集实现多分类预测

    DL之CNN:利用卷积神经网络算法(2→2,基于Keras的API-Sequential)利用MNIST(手写数字图片识别)数据集实现多分类预测 目录 输出结果 设计思路 核心代码 输出结果 1.10 ...

  8. PyTorch之LeNet-5:利用PyTorch实现最经典的LeNet-5卷积神经网络对手写数字图片识别CNN

    PyTorch之LeNet-5:利用PyTorch实现最经典的LeNet-5卷积神经网络对手写数字图片识别CNN 目录 训练过程 代码设计 训练过程 代码设计 #PyTorch:利用PyTorch实现 ...

  9. 深度学习 卷积神经网络-Pytorch手写数字识别

    深度学习 卷积神经网络-Pytorch手写数字识别 一.前言 二.代码实现 2.1 引入依赖库 2.2 加载数据 2.3 数据分割 2.4 构造数据 2.5 迭代训练 三.测试数据 四.参考资料 一. ...

最新文章

  1. TensorFlow2.0正式版发布,极简安装TF2.0(CPUGPU)教程
  2. SAP MM MIGO界面‘Where’标签页里的storage bin
  3. php捕获500错误信息,php – 如何获取有关错误500的更多信息 – 内部服务器错误?...
  4. 如何删除chrome地址栏里面曾经输错的地址
  5. 1003 我要通过! (20分)
  6. leetcode214. 最短回文串
  7. Android 常用的数据加密方式
  8. jQuery 的选择器 元素选择器
  9. flink sql udf jar包_编写Hive的UDF(查询平台数据同时向mysql添加数据)
  10. php利用mht导出word,解析掌握PHP导出Word文档原理
  11. Java的继承和python的继承_Java ,python面向对象的继承及其区别
  12. iOS10 Xcode 8 中provisioning file 相关bug
  13. 爬取淘宝商家货物简单销售数据(销量,价格,销售地,货物名称)
  14. [VBA学习]关于Formula以及数字格式的问题
  15. 动态拨号vps有什么作用?
  16. 品牌在B站做投放,如何选择优质带货UP主?
  17. 前端开发常用PhotoShop快捷键整理(更新中)
  18. 【渗透实例】Fuzz大法好啊
  19. VMware Workstation pro无法在Windows上运行,检查可在Windows上运行的此应用的更新版本(无需卸载原先版本或原先版本卸载的按钮变成灰色)
  20. 程序员工作六年的感悟

热门文章

  1. [阿里云高校计划]Day4-车辆保险应用
  2. 《智能风控实践指南》读书笔记
  3. 《智能风控实践指南》笔记(二)
  4. 神都会犯错,程序员也需要信息安全意识
  5. 面试过程:自我介绍-技术面试-项目介绍-职业规划
  6. pycharm里使用os.system
  7. Unity2d_MapleStory自学记录
  8. OpenGL中的纹理
  9. java爬虫之WebMagic实战抓取前程无忧招聘信息
  10. panda 读取excel 起始 1899-12-30