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

简介:
本文来自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
相关文章
|
8月前
|
机器学习/深度学习 PyTorch TensorFlow
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic,深度学习探索者。深耕TensorFlow与PyTorch,分享框架对比、性能优化与实战经验,助力技术进阶。
|
9月前
|
传感器 机器学习/深度学习 算法
【UASNs、AUV】无人机自主水下传感网络中遗传算法的路径规划问题研究(Matlab代码实现)
【UASNs、AUV】无人机自主水下传感网络中遗传算法的路径规划问题研究(Matlab代码实现)
237 0
|
9月前
|
机器学习/深度学习 传感器 算法
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
609 2
|
8月前
|
机器学习/深度学习 数据采集 存储
概率神经网络的分类预测--基于PNN的变压器故障诊断(Matlab代码实现)
概率神经网络的分类预测--基于PNN的变压器故障诊断(Matlab代码实现)
1117 0
|
8月前
|
机器学习/深度学习 传感器 算法
基于GA-HIDMSPSO优化CNN-SVM分类预测的研究(Matlb代码实现)
基于GA-HIDMSPSO优化CNN-SVM分类预测的研究(Matlb代码实现)
238 0
|
8月前
|
机器学习/深度学习 人工智能 算法
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
339 0
|
8月前
|
机器学习/深度学习 存储 算法
淘宝图片搜索接口开发实战:从 CNN 特征提取到商品匹配(附避坑手册 + 可复用代码)
本文详解淘宝图片搜索接口开发全流程,涵盖CNN特征提取、商品匹配、参数配置及400/429等高频报错解决方案,附合规避坑指南与可复用代码,助你高效实现图像搜商品功能。
|
8月前
|
传感器 机器学习/深度学习 数据采集
【航空发动机寿命预测】基于SE-ResNet网络的发动机寿命预测,C-MAPSS航空发动机寿命预测研究(Matlab代码实现)
【航空发动机寿命预测】基于SE-ResNet网络的发动机寿命预测,C-MAPSS航空发动机寿命预测研究(Matlab代码实现)
551 0
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
492 17
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将从网络安全漏洞、加密技术和安全意识三个方面进行探讨,旨在提高读者对网络安全的认识和防范能力。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,帮助读者更好地保护自己的网络信息安全。
370 10

热门文章

最新文章