如何用卷积神经网络从歌曲中提取纯人声?这里有教程+代码

简介:
本文来自AI新媒体量子位(QbitAI)



你应该对阿卡贝拉(Acapella)不陌生吧。这种无伴奏合唱的纯音乐起源于中世纪的教会音乐,虽曾一度濒临灭绝,但在今天人们又开始怀念起这种纯人声合唱。

这阵猝不及防“Acapella热”仿佛唤起人们对这种原始音乐形式的渴望。很多音乐人发现将纯人声清唱用来混音听觉效果很好,但无奈纯人声资源目前很难寻找。因此,音乐论坛中尝尝出现“一曲难求”的景象。

幸运的是,坐落于华盛顿大学的程序猿Ollin Boer Bohan(Twitter:@madebyollin)发布在GitHub上的代码可以解决这个问题。这个程序可以过滤掉一段音乐中的伴奏,将纯人声部分提取出来。比如,这首来自Vicetone的金曲《No Way Out》,纯人声部分就是这样的。

 去原文听纯人声和带配乐版对比:
http://www.madebyollin.com/posts/cnn_acapella_extraction/

它是怎样实现的?

模型背后,其实隐藏着对程序猿对纯人声的理解——

人声和乐器声,有着不同的特征,表现在声谱图上也不一样。Ollin Boer Bohan所做的,就是将一首歌曲先转化为声谱图,利用卷积神经网络(Convolutional Neural Network, CNN)进行图像识别,再将识别所得的新声谱图转化成音频,生成最后的纯人声部分。整个过程大致如下图所示:

这部分的实现代码:

mashup = Input(shape=(None, None, 1), name='input')
convA = Conv2D(64, 3, activation='relu', padding='same')(mashup)
conv = Conv2D(64, 4, strides=2, activation='relu', padding='same', use_bias=False)(convA)
conv = BatchNormalization()(conv)

convB = Conv2D(64, 3, activation='relu', padding='same')(conv)
conv = Conv2D(64, 4, strides=2, activation='relu', padding='same', use_bias=False)(convB)
conv = BatchNormalization()(conv)

conv = Conv2D(128, 3, activation='relu', padding='same')(conv)
conv = Conv2D(128, 3, activation='relu', padding='same', use_bias=False)(conv)
conv = BatchNormalization()(conv)
conv = UpSampling2D((2, 2))(conv)

conv = Concatenate()([conv, convB])
conv = Conv2D(64, 3, activation='relu', padding='same')(conv)
conv = Conv2D(64, 3, activation='relu', padding='same', use_bias=False)(conv)
conv = BatchNormalization()(conv)
conv = UpSampling2D((2, 2))(conv)

conv = Concatenate()([conv, convA])
conv = Conv2D(64, 3, activation='relu', padding='same')(conv)
conv = Conv2D(64, 3, activation='relu', padding='same')(conv)
conv = Conv2D(32, 3, activation='relu', padding='same')(conv)
conv = Conv2D(1, 3, activation='relu', padding='same')(conv)
acapella = conv

这里的训练数据是基于人声和器乐伴奏的组合动态产生的,并且以每分钟128拍(Beat Per Minute, BMP)为标准,涵盖了男女两种音色。这样和用成对的人声/带伴奏歌曲来训练效果差不多,但获取数据的效率更高。

除了文章开头的No Way Out,原文(地址:http://www.madebyollin.com/posts/cnn_acapella_extraction/)中还给出了更多纯人声与原曲对照的例子。

在这些例子中,人声的过滤并不算完美。作者对模型的特点进行了一些总结:

这个模型在本地信息充足,或者人声音量相对较大的情况下,伴奏声会过滤得比较好。但真正的音乐还包含着更多、更微妙的情况需要模型去推断。很遗憾,这个模型目前还不能处理这么复杂的问题。

有待改进的地方

作者说,他还是神经网络和信号处理新手,这个模型可能还有改进的空间。以下是他希望有机会改进的方面:

完善频率信息:我试了多种方法,将更全面的频率信息整合到模型中,发现这些模型可以减少音质损失,但并不能在这个模式框架里改善性能。我不确定问题的原因是过拟合还是没选好损失函数,所以我并没有把这些频率信息增加到代码库。

更好的损失函数:我目前采用的是均方误差,但更强的模型试验表明均方误差与实际运行表现关联性并不是很好。

立体声信息:目前,该模型只输入/输出单声道数据。用立体声通道训练可能会提高模型从同频率其他声音中识别人声的性能。

更好的时频变换(Time-frequency Transforms):我目前使用短时傅里叶变换(STFT)来处理输入数据,但还不清楚这是不是最好的选择。

最后,对这个模型感兴趣的同学,记得去看原文和代码:

原文:http://www.madebyollin.com/posts/cnn_acapella_extraction/

代码:https://github.com/madebyollin/acapellabot

本文作者:安妮 
原文发布时间: 2017-05-01
相关文章
|
1月前
|
机器学习/深度学习 计算机视觉 Python
【YOLOv11改进 - 注意力机制】SimAM:轻量级注意力机制,解锁卷积神经网络新潜力
【YOLOv11改进 - 注意力机制】SimAM:轻量级注意力机制,解锁卷积神经网络新潜力本文提出了一种简单且高效的卷积神经网络(ConvNets)注意力模块——SimAM。与现有模块不同,SimAM通过优化能量函数推断特征图的3D注意力权重,无需添加额外参数。SimAM基于空间抑制理论设计,通过简单的解决方案实现高效计算,提升卷积神经网络的表征能力。代码已在Pytorch-SimAM开源。
【YOLOv11改进 - 注意力机制】SimAM:轻量级注意力机制,解锁卷积神经网络新潜力
|
27天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络:从理论到实践
【10月更文挑战第35天】在人工智能的浪潮中,深度学习技术以其强大的数据处理能力成为科技界的宠儿。其中,卷积神经网络(CNN)作为深度学习的一个重要分支,在图像识别和视频分析等领域展现出了惊人的潜力。本文将深入浅出地介绍CNN的工作原理,并结合实际代码示例,带领读者从零开始构建一个简单的CNN模型,探索其在图像分类任务中的应用。通过本文,读者不仅能够理解CNN背后的数学原理,还能学会如何利用现代深度学习框架实现自己的CNN模型。
|
26天前
|
机器学习/深度学习 人工智能 算法框架/工具
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【10月更文挑战第36天】探索卷积神经网络(CNN)的神秘面纱,揭示其在图像识别领域的威力。本文将带你了解CNN的核心概念,并通过实际代码示例,展示如何构建和训练一个简单的CNN模型。无论你是深度学习的初学者还是希望深化理解,这篇文章都将为你提供有价值的见解。
|
1月前
|
机器学习/深度学习 监控 自动驾驶
卷积神经网络有什么应用场景
【10月更文挑战第23天】卷积神经网络有什么应用场景
83 2
|
1月前
|
机器学习/深度学习 自然语言处理 算法
什么是卷积神经网络
【10月更文挑战第23天】什么是卷积神经网络
48 1
|
1月前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
79 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
|
27天前
|
机器学习/深度学习 人工智能 自动驾驶
深入解析深度学习中的卷积神经网络(CNN)
深入解析深度学习中的卷积神经网络(CNN)
41 0
|
1月前
|
机器学习/深度学习 人工智能 TensorFlow
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【10月更文挑战第32天】本文将介绍深度学习中的一个重要分支——卷积神经网络(CNN),以及其在图像识别领域的应用。我们将通过一个简单的代码示例,展示如何使用Python和TensorFlow库构建一个基本的CNN模型,并对其进行训练和测试。
|
1月前
|
机器学习/深度学习 自然语言处理 TensorFlow
深度学习中的卷积神经网络(CNN)及其应用
【10月更文挑战第26天】在这篇文章中,我们将深入探讨卷积神经网络(CNN)的基本原理、结构和应用。CNN是深度学习领域的一个重要分支,广泛应用于图像识别、语音处理等领域。我们将通过代码示例和实际应用案例,帮助读者更好地理解CNN的概念和应用。
|
1月前
|
机器学习/深度学习 算法 计算机视觉
深度学习与生活:如何利用卷积神经网络识别日常物品
【10月更文挑战第24天】在这篇文章中,我们将探索深度学习如何从理论走向实践,特别是卷积神经网络(CNN)在图像识别中的应用。通过一个简单的示例,我们将了解如何使用CNN来识别日常生活中的物体,如水果和家具。这不仅是对深度学习概念的一次直观体验,也是对技术如何融入日常生活的一次深刻反思。文章将引导读者思考技术背后的哲理,以及它如何影响我们的生活和思维方式。