Free-SVC项目解读
Free-SVC项目解读
目录:
1.引言
2.生成器代码解读
3.判别器代码解读
4.损失函数解读
5.总体解读
1.引言:
Free-SVC是ICASSP 2025中提出的项目,对应的论文地址为:[2501.05586] FreeSVC: Towards Zero-shot Multilingual Singing Voice Conversion。本文先对具体代码和网络结构进行解读,最后在理解论文和项目的Readme中所提到的模型特点。
2.生成器代码解读:
Free-SVC还是基于VITS的框架, 这里先对生成器的每个模块分别进行解读。
2.1说话人特征编码器:
代码中提供了多种说话人特征编码器,具体为:
| 编码器类型 | 说明 | 是否训练 | 特点 |
|---|---|---|---|
ByolSpeakerEncoder |
基于 BYOL 训练的 speaker encoder | ❌(冻结) | 无监督学习,语者判别好 |
CoquiSpeakerEncoder |
来自 Coqui TTS 的 speaker encoder | ❌(冻结) | 兼容性强 |
ECAPA2SpeakerEncoder16k |
ECAPA-TDNN 架构,16kHz | ❌(冻结) | 精度高,常用于 ASV |
RawNet3SpeakerEncoder44k |
RawNet3(44.1kHz)结构 | ❌(冻结) | 原始音频端到端建模 |
DefaultSpeakerEncoder |
默认实现,一般很弱 | ✅(可训练) | 简单可微,调试用 |
这里的说话人编码器都是显式的,官方解释中用的是ECAPA2 。
2.2内容特征编码器:
项目代码中支持三种内容特征编码器:WavLM,Hubert和SPIN。
WavLM:是一种基于自监督学习的预训练模型,目的是把语音信号中的说话内容和说话人信息等因素区分开,由于是自监督学习,WavLM能够实现跨语言功能, 但是微软官方发布的WavLM主要是基于英文语音数据训练的,所以对英文的适用性最强。
Hubert:与WavLM类似,也是基于Transformer的自监督编码器,但是官方的训练代码也是英文,主要适用于英文,但是Hubert的很多衍生版本能够适用于中文等语言。
SPIN:是基于Hubert的自监督语音内容特征编码器,同时融合了ContentVec的思想,能够准确地提取纯净的内容特征,官方论文中说的就是使用SPIN编码器。
2.3 F0特征编码器
Free-SVC中调用了RMVPE进行每一帧的F0值得提取,rmvpe是一种专门为人声设计得音高(F0)提取模型,适用于说话声和歌声。
这里的F0特征只和声音本身有关,与说话人的信息无关。Rmvpe是一种基于神经网络的端到端模型,将输入的时域音频转换到频域进行特征提取,然后转换回到时域并预测每一帧的有声概率和F0值,最后根据有声概率筛选有效帧并进行平滑处理。
2.3 enc_p 先验
Free-SVC代码中有一个编码器enc_p专门用来实现内容特征和F0特征的融合。具体做法是根据有声/无声来嵌入F0值到做过卷积的内容特征中,再做卷积最终得到均值,方差以及采样的z,这里的做法就相当于VITS中的先验特征计算。
这里与传统的VITS框架不同的是,enc_p能够多接受一个输入lang_id,是在多语言模式下对于不同语言的编码,能够提升跨语言的性能。
2.4 enc_q 后验编码器
Free-svc中的enc_q与So-VIST-svc中的后验编码器一样,接受原始音频和说话人特征,输出均值,方差和采样得到的z;
2.5 flow
这里的flow与So-VITS-svc中的流模型一致,是用在后验编码器之后,接收后验编码器输出的z,spec_mask和说话人特征g,输出z_p。
2.6解码器Generator
训练代码中,对后验编码器的输出z做随机切片之后,将切片得到的z_slice和说话人特征g一起放入到HIFI-GAN解码器中。
2.7总结
总体看来在生成器部分,总体框架还是和VITS一致,只不过Free-SVC在具体的编码器上引用了更加先进的编码器,实现了更好的效果。
3.判别器代码解读:
Free-svc中的判别器就是一个标准判别器+五个周期判别器,与So-VITS-svc的判别器相同。
4.损失函数解读
这里的损失函数与So-VITS-svc一样,都是:
1.discriminator_loss:判别器的对抗损失
2.generator_loss:生成器的对抗损失
3.feature_loss:真实音频和生成音频的中间层特征图的匹配损失
4.kl_loss:先验和后验随机采样的KL散度损失。
5。真实Mel频谱和生成Mel频谱的损失。
5.总结:
Free-svc的总体框架还是一样的,只是将部分编码器的组件改成了现在效果更好的编码器,所以能够实现跨语言和零样本的学习,达到更好的效果。

浙公网安备 33010602011771号