1、引言
对于制作人、DJ以及任何想分离音频进行单独演奏的人来说,将已经混音后的歌曲拆分为人声和伴奏一直是较为困难的事。
目前有很多传统方法可以执行此操作,比如Au中的中置声道提取,通过左右声道“相减”来提取音乐或人声;或是通过带阻滤波消除频率范围在500Hz~1KHz的人声。但是以上两种方法处理后的音频在大多数情况都不尽人意。随着AI技术的发展,出现了基于神经网络的人声分离框架Spleeter。
2、Spleeter背景
来自法国的音乐流媒体公司 Deezer 开源了一个音轨分离框架 Spleeter,它是基于Tensorflow的 Python 库,带有用于 2、4 和 5 个词干分离的预训练模型。只需输入一段命令就可以将音乐的人声和各种乐器声分离,支持 mp3、wav、ogg 等常见音频格式。
从功能上,目前预训练模型为2Stems(分离出人声/伴奏),4Stems(分离出人声/鼓/贝斯/其他),5Stems(人声/鼓/贝斯/钢琴/其他)。性能上,4Stems在使用GPU加速的情况下可以在1s左右分离完成100s的音乐。从效果上来看,Spleeter的各项指标均优于目前的其他开源模型。
3、实现原理
1)U-Net网络
U-Net是弗莱堡大学计算机科学系为生物医学图像分割而开发的卷积神经网络。该网络基于全卷积网络,主要思想是通过连续层补充收缩网络,其中池操作被上采样操作符取代,连续的卷积层可以学习这些信息并提高输出的精确性。现如今其架构经过修改和扩展,可以使用更少的训练图像并产生更精确的分割。
该网络由一条收缩路径和一条扩张路径组成,构成了 U 形架构。收缩路径是一个典型的卷积网络,每个卷积后面跟随一个整流线性单元(ReLU)和一个最大池化操作。在收缩期间,空间信息减少而特征信息增加,在扩张期间,扩展路径通过一系列上卷积串联操作,将特征和空间信息与来自收缩路径的特征相结合。
2)Spleeter整体框架
Spleeter基于频域进行音轨分离。其网络结构中,每条音轨对应着一个U-Net网络结构,例如4Stems对应4个U-Net网络。U-Net网络的输入输出均为音频幅度谱。训练时计算出音轨的幅度谱与标准幅度谱的距离。预测时则稍有不同,通过多条音轨的幅度谱计算出每条音轨占据输入音频的能量比例,即每条音轨的Mask,通过输入音频频谱乘以Mask得到各个音轨的输出频谱,最终计算得到WAV音频文件。
3)Spleeter模型训练
训练时的一组数据为(音乐,伴奏,人声),要求三者在时间轴上尽量完全一致,提取三者频谱并计算出幅度谱。将音乐幅度谱分别输入到人声U-Net和伴奏U-Net中,得到预测的人声U-Net和伴奏U-Net,分别计算预测结果和标准结果的距离并取均值。其中伴奏U-Net和人声U-Net内部参数会随着数据输入不断更新。
4)Spleeter模型预测
预测过程没有标准的人声和伴奏,只有混合后的音乐。当预测出伴奏和人声的幅度谱之后,Spleeter将两者分别进行平方,得到人声能量Engv和伴奏能量Enga,然后使用Maskv = Engv/( Engv +Enga)计算出每个时刻人声在各个频段音乐的占比,同时使用Maska= Enga /( Engv +Enga)计算出每个时刻伴奏在各个频段音乐的占比。利用输入的音乐频谱分别乘以Maskv和Maska得到人声和伴奏频谱,最后使用逆STFT得到人声和伴奏的WAV音频文件。
如下是音频示例是将歌曲《我们说好的》分离为人声和伴奏:
Spleeter框架能够轻松的分离人声,对于音乐爱好者来说,Spleeter是一种能够高质量提取伴奏的方法,而对于音频研究人员来说,Spleeter可以将人声独立出来,作为歌词辨识、歌手辨识和音乐情绪辨识等相关研究的基础。
此外,如果将该框架应用到需要清晰人声的场景中,也许会产生出其不意的效果,例如将Spleeter与语音识别相结合,在清晰人声的基础上,可以提高语音识别的准确度。
随着音频处理的需求越来越高,传统的音频处理技术往往会有一定的局限性,但在AI技术的加持下,音频处理技术将会迎来一个更加崭新的发展前景。
青榴实验室---超高清音视频技术的传播者