首页 > 其他分享 >So-VITS-SVC 课程笔记

So-VITS-SVC 课程笔记

时间:2024-02-06 15:23:35浏览次数:34  
标签:loss VITS 音频 声纹 SVC 特征 spk So

课程地址,https://www.bilibili.com/video/BV1uj411v7zW/?spm_id_from=pageDriver&vd_source=1eb6e5015a1f70daa97080d8ee786d5d

 

So-VITS-SVC:SoftVC VITS Singing Voice Conversion

SoftVC,编码技术,用soft聚类来消除说话人的音色特征

VITS,核心技术

Singing Voice Conversion,使用场景

整体架构

和VITS的差别是,

VITS是从文本到声音,文本的编码长度和声音的不一样的,所以需要时长预测,强制匹配复制

SO-VITs是从声音到声音,其实更加简单了,声音的时长是相同的,直接就可以match

但是为了使用VITS,将输入的音频要转换成类似文本的特征,即消除说话人的音色特征

这样就可以套用简化的VITS模型

所以SO-VITS的核心就是如何消除音频中的说话人音色特征,形成类似文本特征编码

这就是红框中的部分

这里首先需要将音频提取4种特征,这里要用到pretrain的模型来提取

这里的spk classerifier,用于check生成的embedding已经不包含说话人特征,会根据输入的embedding预测一个spk,如果预测的和真实的不一样,即满足

这个模型的损失函数,

这里也是用GAN,和VITS一样的

discriminator部分是一样的

generator的部分,主要有两个不同

一个是Spk_loss, 这个定义Spk classerifier的loss,让预测的spk和真实的spk不一致

一个是KL-loss,这里不同的是不光要算KL(Q|P),还要算KL(P|Q)

所以网络里面,由p分布随机采样的zp,需要逆向经过flow生成zreal,然后用zreal和Q分布区计算似然,得到KL(P|Q)

 

模块

先验编码器

和VITS的先验编码器比,

a. 输入不同,这里输入更加复杂,不是简单的文本,而是音频的3种特征

PPG,音频中的文本特征

Vec,音频自编码特征,应用softvc

Pitch,基频特征

PPG和VEC在预处理的时候,都加入随机扰动,模拟音频的随机性,读一段文字,文字是不会变的,但是多次读,音频是会有差异的

然后把3种特征都处理成size-192,求和作为输入

 b. 说话人的预测器

让预测器预测出的spk和真实spk差别越大越好

所以这里加了梯度取反,给梯度加上负号,这样本来下降的,反而上升了

 后验编码器

和VITS基本一样,只是传入的说话人信息不是id,是声纹特征

 Decode部分

和VITS的不同,

a. 加入说话人的声纹信息

b. 上采样的每一步,加入基频pitch特征,用于更好的拟合非语音的声音

c. 蛇形激活函数,取代relu,更好的适应音频的周期属性

基频f0,经过上采样,copy*320,再加上多次谐波信号,形成har_source

对于输入音频,在特征维度进行正则化,layernorm?

对于size-192的特征维,求均值和方差,然后正则化

spk声纹,线性变换成scale和bias,用于叠加输入音频,达到加入声纹的目的

 flow

这里flow和VITS的基本相同

不同是在输入的时候需要增加skp声纹信息adapter

我的理解是,从zq到zp,需要正则化掉skp的声纹信息,因为p分布本身是类似文本特征的分布,不包含spk声纹

从zp到zq,需要添加目标声纹信息,用于decode

损失函数

因为GAN,这里还是要分成D和G的部分

G的部分比较复杂,

其中score_loss和feat_loss,是GAN训练生成器的时候 ,把生成的数据进行判别得到的最终score,以及中间层每层结果和real的loss

mel_loss和stft_loss,是重构损失,mel_loss就是把输入和生成的音频进行mel滤波后比较的loss

stft_loss,在不同的尺度的stft变换下的,损失计算,更加全面

 loss_kl_f, loss_kl_r,kl散度,前面说了这里不光要算q||p,还要算p||q,只是权重上p||q不那么重要,乘上0.5

这里kl散度的计算公式推导,其实和VITS里面一样,

spk_loss spk预测器的loss

 

 

标签:loss,VITS,音频,声纹,SVC,特征,spk,So
From: https://www.cnblogs.com/fxjwind/p/18004598

相关文章

  • Solution - Hangar Hurdles
    Link。感谢苏泊尔的题解,一点补充。首先呢,可以处理出中心在每个格子\((x,y)\)上的最大边长\(d_{x,y}\)。这个用一下二维前缀和统计#的个数再简单二分一下就好了,注意不能出界。然后呢我们只能上下左右移动,考虑转化成一个图论问题(?)。所以就直接相邻的格子连边就好了,因为是双......
  • Solution - Holes
    Link。暴力做是\(O(nm)\)的。怎么优化呢?I'venoslightestidea......
  • ROS问题: libQt5Core. so.5:无法打开共享对象文件:没有那个文件或目录
    当运行下面命令报错时ros2runturtlesimturtlesim_node错误信息:/opt/ros/foxy/lib/turtlesim/turtlesim_node:errorwhileloadingsharedlibraries:libQt5Core.so.5:cannotopensharedobjectfile:Nosuchfileordirectory最佳答案 我用这个方法,来自h......
  • sonarqube静态代码扫描工具常见用法
    安装服务器端的sonarqube下载地址:https://www.cnblogs.com/cxygg/p/18008738客户端有很多种比如SonarScannerCLI,JenkinsextensionforSonarQube,SonarScannerforMaven,sonarlint等创建项目后获取tokenSonarScannerCLI的使用下载地址解压后修改配置文件......
  • "resolutions" 主要用于解决依赖树中可能存在的版本冲突问题
    "resolutions":{"es6-iterator//es5-ext":"0.10.50","d//es5-ext":"0.10.50","es5-ext":"0.10.50"}这个是什么意思?这段配置是出现在package.json文件中的"resolutions"字段,它在使用Yarn2(berry)或......
  • 2.5闲话 & solution 『那是万物伊始的来途/或百川竞流的归处』
    哈哈哈我垫底了,为啥数据这么水啊哈哈我似乎发现很多人当OIer之前都没有一个稳定的网名solution-初三年前模拟测试3初三年前模拟测试3看沧海(桑田变幻)造多少(地覆天翻)似你我(进化简繁)该如何(才得一探)《普及难度》指T4动态开点李超线段树/凸壳又是一坨史,那场ABC是......
  • centos7安装sonarqube
    sonarqube里面使用了ES,ES不允许root用户运行,所以开启前创建一个非root用户useraddzhangyukunsuzhangyukunJava环境,如果需要把之前的java的安装包移动到运行用户可以读取到的地方,并且环境变量也要匹配保证java包的权限和所在路径的权限至少是755下载下载地址:htt......
  • Jackson序列化clob数据
    1.情景展示在java当中,有时候我们不得不用jdbc来读取数据库数据,而不是通过mybatis框架。这样就遇到一个问题:如果表字段的数据类型为clob时,使用springboot默认进行序列化时,会报错。如何解决?2.具体分析在springboot中,其默认的序列化类时Jackson。既然Jackson的默认序列化规......
  • flutter 美化json 输出
    由于数组和字典被一样显示不直观转为json后美化输出字符串长度超过一定长度后被控制台截断利用正则800一行切分后输出voidprettyJsonString(list){StringjsonString=jsonEncode(list);JsonEncoderencoder=JsonEncoder.withIndent('');String......
  • 32-Java中字符串、json、map之间的互相转换
    Java中字符串、json、map之间的互相转换 1.map转String、jsonObject对象packagemap;importjava.util.HashMap;importjava.util.Objects;importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONObject;publicclassMapDemo3{publicstatic......