VITS

1.三种生成模型(GAN、VAE、FLOW)

  生成模型:图像、文本、语音等数据,都可以看做是从一个复杂分布中采样得到的。从简单分布中随机采样一个z,经过生成器Generator后生成一个复杂样本X,这个过程就叫做生成。

  Gan(生成竞争网络):从简单分布中经过生成器G生成一个假的样本,再通过鉴别器D检测生成样本和真实样本的区别,直到鉴别器D无法区分生成样本和真实样本。

  VAE(变分自编码器):先从简单分布中采样z,再利用z生成x,人为设计一个从z到x的分布。用KL距离去拟合两个分布的相似度。

  FLOW:直接构建两个分布之间直接的映射函数,从简单分布z到复杂分布x

2.模型整体架构:接近VAE模型

  由语音得到的后验分布和由文字得到的先验分布的维度可能会不同,需要用Monotonic Alignment Search强制对齐,能够将文本序列的分布拓展到和语音序列分布的长度;

  输入:短时傅里叶变换

  损失:KL损失,输入和左侧输出的梅尔频谱损失(重构损失)

3.config文件解释

  segment_size:对语音进行采样时的采样点数目

  c_mel:重构损失权重

  c_kl:KL损失权重

  filter_length/hop_length/win_length:短时傅里叶变换数据

  add_blank:加上停顿

  model:包含Textencoder

4.文本编码器(TEXTEncoder):

  对文本序列进行编码

  text[B,T]->embedding{B,T,192]->transpose[B,192,T]->attention[B,192,T]->projection[B,192*2,T]->split[B,192.T]*2(一个均值一个方差的log)

  Attention为多头注意力层,由六个多头注意力层组成,每层两个头,每层的输入输出都是[B,192,T]

5.相对位置编码:

   早期的位置编码采用一个固定的公式计算(sin/cos)

    只加入到K,V中,可选窗口,只关注周围的token

6.音频编码后验编码器

   将输入音频转换成后验分布

    输入:频谱特征;说话人id

    对频谱特征做一维卷积,加入说话人特征进行waveNet,再进行一维卷积,split之后得到后验分布的均值和方差;

    waveNet有多个空洞卷积组成:在卷积核中加上0(10101);kernel长度为kd-d+1;为了保证卷积前后长度不变,Padding=(kd-d)/2;增大感受野

7.flow部分的实现

   从后验分布到先验分布的转换函数;四层ResidualCouplingLayer +Flip;每层都会加入说话人信息;

8.音频解码Decoder:

   训练时对长度固定的切片进行解码;测试时对全部的采样值进行解码;relu+ConvTransposed1d+reblocks;

9.随机时长预测:

   单独训练,输入文本每个符号持续的帧数d(强制对齐结果),设计一个去量化随机变量u,对连续变量d-u进行建模,u为(0,1)的随机分布;d-u的分布通过一个flow来进行映射(flow++):

 

  d为预测的周期(文本持续时间);

  conv-flow:

  coupling transforms基本流程:

  (1):将输入数据X分割成X0,X1两个部分

  (2):利用神经网络从X0中学习一组参数theta=NN(X0)

  (3):是用以theta参数的函数G对X1处理得到Y1

  (4):Y0=X0,将Y0,Y1进行拼接得到Y

10.鉴别器:

  在训练过程中是用多尺度鉴别器(类似GEN),由多组鉴别器拼接得到;

  鉴别器内部为多个conv1d,或是reshape之后变成二维信号,使用多个Conv2d;

  

11.生成器工作流程:

  SynthesizeTrn;

  

  

    

  

  

  

posted @ 2025-05-04 14:23  爱露查  阅读(36)  评论(0)    收藏  举报