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的总体框架还是一样的,只是将部分编码器的组件改成了现在效果更好的编码器,所以能够实现跨语言和零样本的学习,达到更好的效果。

posted @ 2025-07-17 19:13  爱露查  阅读(31)  评论(0)    收藏  举报