社会焦点

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

字号+ 作者: 来源: 2017-05-01

如何用卷积神经网络从歌曲中提取纯人声?这里有教程+代码,人声效果器哪个好,怎样去除歌曲中的人声,纯人声无伴奏歌曲,怎么把视频中的人声放大,如何把人声和伴奏分离

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

  安妮 编译整理自 Madebyollin博客

  量子位 报道 | 公众号 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

  招聘

  我们正在招募编辑记者、运营等岗位,工作地点在北京中关村,期待你的到来,一起体验人工智能的风起云涌。

  相关细节,请在公众号对话界面,回复:“招聘”两个字。

  One More Thing…

  今天AI界还有哪些事值得关注?在量子位(QbitAI)公众号会话界面回复“今天”,看我们全网搜罗的AI行业和研究动态。笔芯~

  另外,欢迎加量子位小助手的微信:qbitbot,如果你研究或者从事AI领域,小助手会把你带入量子位的交流群里。

  追踪人工智能领域最劲内容

相关阅读:

  • 怎么把视频中的人声放大
  • 如何把视频中的人声去掉
  • 纯人声合唱团
  • goldwave消除人声教程
  • 纯人声无伴奏歌曲
  • 怎样去除歌曲中的人声
  • 人声效果器哪个好
  • 如何把人声和伴奏分离
  • 朗诵音频纯人声
  • 提取音频的人声
  • 醒耳人声乐团
  • 发烧人声歌手
  • 相关推荐:

  • 华为史上最美操作系统,你绝对不能错过的EMUI5.0
  • 国产操作系统典范:deepin操作系统
  • 娱乐办公两不误!这个笔记本能把屏幕拔下来写字
  • 斗鱼响应新规加强监管,坚持打造优质精品直播
  • SpaceX 火箭爆炸原因确定:液态氧过冷成了固态
  • 华为Mate9中国版真机秀 你绝对没发现它有两种版本
  • 99%的人都不知道的微信高效使用术?
  • 乐视网一周蒸发88亿元 贾跃亭反思节奏发展过快
  • 似乎已经战胜传统渠道的小米 今年为什么被OPPO、vivo 打败?
  • 优雅商务风,性能一鸣惊人—TCL 950体验评测
  • 转载请注明出处。


    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章