SVC总结与思考
开头&目录:
SVC,全称Singing Voice Conversion(歌声转换),是VC领域的一个具体应用,主要为:将一段源歌声的音色转换成目标歌手的音色,同时尽可能保留原始的歌词、旋律和演唱技巧。这里在看了部分相关模型之后从以下几个方面做一个简短的总结并阐述一下我自己的理解:
1.歌声本质
2.模型框架
3.人声&伴奏分离
4.内容特征提取器
5.音色合成器
6.声码器
7.数据集
1.歌声本质:
这里首先要明确一点,目前主要的SVC做法是分离人声(干声)与伴奏,只把干声输入到网络中,最后再把网络的输出加上伴奏,这样能够避免复杂的伴奏对特征分离产生影响。
这里对于歌声本质的理解参考了:https://arxiv.org/abs/1803.06841 。这篇文章里对音乐风格迁移的项目区分为了:1)音色风格迁移;2)演奏风格迁移;3)作曲风格迁移。其中,前两点是与SVC有关的,简单的来说,音色就是声音的个性,在SVC中音色就是用来区分说话的人的;而演奏风格是指歌手是怎么唱这一段音乐的,与声音的F0曲线有关。所以SVC的实质就是学习不同歌手的音色以及唱歌习惯,并进行转换。
下面列出主要的歌声特征类别,以便于理解网络到底学习了什么:
(1)语言内容
- 定义:语言内容反映了一段歌声中说了什么,也就是歌词是什么;
- 特点:与说话人音色和旋律等都无关;
- 提取方法:SVC中通常用Hubert、ContentVec、SPIN、WavLM、Whisper等算法来提取内容特征,也就是网络中常说的内容编码器;
- 作用:SVC使用内容编码器来保证转换后的歌词正确和语义一致。这里要注意的是,一个SVC模型能够适用于哪些模型就是由内容编码器实现的,具体在特征提取器部分会讲;
(2)说话人特征
- 定义:反映了说话者身份、声纹和音色特征;
- 特点:只和说话人的声音有关,与时间长度,旋律,说话内容都无关;
- 提取方法:常用ECAPA、x-vector、d-vector等声纹提取器,或者在网络中用一个向量来表示,让网络自己去学习。
- 作用:说话人特征是SVC中实现歌声转换的关键,决定了谁唱这首歌
(3)音高
- 定义:反应了唱歌时的基频、控制旋律和韵律
- 提取方法:RMVPE、CREPE、YIN算法等,这里目前常用深度学习F0估计模型,较少使用传统的基频估计方法;
- 作用:用来保持歌声的音调起伏和演奏风格;
(4)韵律
- 定义:语音的节奏、重音、时长、强弱、停顿等
- 提取方法:Praat、Energy envelope、声门开合率(GCI检测)
- 作用:是对韵律的多维度分析,但是目前SVC中使用的较少
(5)能量/响度
- 定义:语音强弱或响度
- 提取方法:RMS能量计算等
- 作用:让网络学习声音的强弱,在目前的SVC中使用较少。
(6)声学特征
- 定义:传统的Mel频谱等
- 提取方法:MFCC、Mel-spectrogram等
- 作用:在网络中Mel频谱一般用于解码生成和损失函数部分,较少作为特征使用。
(7)语速/节奏
- 定义:语音的速度快慢以及节奏模式
- 提取方法:Forced Alignment、节奏检测算法
- 作用:用来强制对其音素时长,目前使用也较少
这些特征中,最常用的就是前三个,还有许多特征如共振峰、颤音、滑音等,在目前的SVC模型中都考虑和使用较少,就没有列在上面。
2.模型框架
目前主要的模型框架就是VITS和Diffusion:
1.VITS:主要是由特征提取器、先验编码器、后验编码器,flow和解码器组成。这个框架的训练过程为提取语音特征输入到先验编码器中,将原始音频输入到后验编码器中,并将后验的输出与先验的输出的KL散度作为损失函数之一,最终根据Teacher Forcing的思想,将后验的结果用于训练flow;在推理的时候抛弃后验编码器,直接用先验编码器+flow。这里的flow通常是用于输出Mel频谱,然后再输入解码器(通常是HIFIGAN)生成最终的音频。部分模型也会把flow换成Diffusion。
具体看过VITS的模型可以发现,这里的先验编码器和后验编码器的方式就和GAN十分相似,所以VITS的损失函数部分也会和GAN一样有判别器损失。
2.Diffusion:在DIffusion出现之后,有的模型就直接使用Diffusion输出Mel频谱,再通过HIFIGAN生成音频。其中,模型通常会把特征提取器所得到的特征通过不同的方式进行融合,如DiffSVC中借用了FastSpeech2的网络来生成Diffusion的条件。
很多论文中所用的模型都是基于这两个框架(其中VITS用的最多),他们做的只是把其中的一些部分进行改进,所以,对于框架部分我们不做过多的讨论,而是对于每个部分进行具体的介绍总结。
3.人声&伴奏分离
这一部分用于模型的前处理部分,用于分离干声和伴奏,通常使用Spleeter、Demucs v4等,具体的网络原理不做介绍。前处理还包括降噪和切片等部分,这些也能够很容易在网络上找到开源的小工具。注意,前处理部分十分重要,需要有足够纯净的干声才能够训练出好的模型。
4.内容特征提取器
对于歌声的特征,可以根据上面的介绍选择所需要的特征(部分模型会提供特征的选择),这里主要说明内容特征提取器:虽然Hubert、ContentVec、SPIN、WavLM、Whisper等算法以及衍生版本大部分都会提取SSL特征,但是毕竟模型在使用的时候是不训练这些模型或者在官方版本的参数基础上进行训练的,所以能够适用的语言还是由官方版本训练用到的语言决定的。内容编码器所能适用的语言直接决定了这个SVC模型所能适用的语言,因此很多模型会提供多个编码器来选择,可以具体查看内容编码器所支持的语言范围(我在So-VITS解读的博客中也列出了部分内容编码器的主要支持语言)。
5.声音合成器
在很多不同的框架中,有一个相同的做法,就是先生成Mel频谱,再用解码器解码为音频,这是由于Mel频谱是压缩且稳定的中间特征,能够大大降低声音合成器的学习难度和维度。还有一点就是现在的声码器(就是解码器)以及能够高保真地从Mel还原音频。所以现在地声音合成器地任务普遍为生成Mel频谱。
常用的方式就是通过一个编码器融合原始音频中与说话人无关的特征(内容特征、Pitch、能量,F0特征、响度特征等)和目标说话人的特征,然后输出到生成式模型中(flow或者diffusion)来生成对应的mel频谱。但是不管是那个框架,都对数据的质量和数量有较大的需求,并且都很难训练。如何降低数据需求和计算时间也是目前很多网络考虑的问题。
6.声码器
声码器就是通过输入的mel频谱还原音频,通常为HiFi-GAN、Parallel WaveGAN、WaveGlow、BigVGAN、StylrMelGAN等声码器。声码器通常是冻结的预训练模型,不参与模型训练。但是如果有音色迁移和风格强化等特殊需求,也会对声码器进行微调。
7.数据集
SVC有许多公开的数据集,通常为:
-
NUS-48E:多个歌手的英文歌曲,标注齐全
-
VCTK Singing:多说话人的英文数据集
-
DAMP:多人多风格的翻唱歌曲,英语为主
-
SVCC 2022/2023:SVCC比赛提供的官方数据集,多语言(这个比赛也有提供部分的框架,如SVCC T02)
-
VCTK:多说话人的语音数据(非歌声)
-
OpenSinger:腾讯发布的中文歌声数据集,多说话人
-
PopCS:清华大学发布的包含中文流行歌手演唱的干声数据,标注齐全
-
SVCC中文赛道:SVCC官方数据集
还有许多模型会拿非歌声的数据集进行预训练。