DiffGAN-TTS: High-Fidelity and Efficient Text-to-Speech with Denoising Diffusion GANs

abstract

  • 使用降噪diffusion模型完成TTS任务,引入GAN训练进一步增强生成质量。
  • 只需要4步就可以生成高质量语音,方法分为两个阶段 :(1)训练一个TTS声学模型提供先验知识,(2)训练DDPM。也可以进通过一步denoising生成语音。
  • 论文写的还是挺清楚的,包括公式推导,可以看一下细节

intro

diffusion模型的前向(diffusion process)可以看作是一个T步无参数的加噪过程,反向(denoising process)可以看作一个T步有参数的去噪过程。diffusion的假设是待去噪的分布可以用用高斯分布表示,如果想要从高斯分布中采样得到真实的分布,通常需要<小的denoising step size,大的diffusion steps>,多次少量添加噪声。这样会使得diffusion在实时任务场景不可用。
如果想要大的denoising step size,采用conditional GAN 作为非高斯多峰函数来模拟去噪分布,不仅能够提升降噪效率,还可以增加生成样本多样性和高保真度。

DiffGAN-TTS

在这里插入图片描述

  • 前向训练伪代码

def forward():
	x_t = diffusion(mel, t)
	# x_(t-1)=x_t_prev
	x_t_prev = diffusion(mel, t-1)
	x_0_pred = denoise_fn(x_t, t, cond, speaker)[:, 0]
	x_start = norm_spec(coarse_mel)
	x_t_prev_pred = q_posterior_sample(x_start, x_t, t)[:,0]
	return x_0_pred, x_t, x_t_prev, x_t_prev_pred, t

Training loss

  • generator loss = fm_loss + adv_loss + reconst_loss
    • fm_loss: 判别器输入真实&预测特征的中间层一范数
    • adv_loss: 判别器将预测特征误判为真实特征的范数
    • reconst_loss:x_0_pred和mel的范数
  • discriminator loss = real_loss + fake_loss
    • real_loss: D(x_t, x_t_prev, s, t)
    • fake_loss: D(x_t, x_t_prev_pred, s, t)
  • 补充:只是使用到diffusion的加噪和去噪过程,没有计算x_t和标准高斯分布的距离(diffusion常用的loss)
  • diffusion按照随机时间步 t t t预测x_t的特征,和真实的mel经过diffusion的结果,经由判别器判别,监督生成优化,避免陷入单高斯分布。

Active shallow diffusion mechanism

在这里插入图片描述

  • 为了加速推理过程,提出一种active shallow diffusion mechanism,此方法需要两个步骤的训练:
    • stage1: 训练fastspeech-based 声学模型,输出corse mel (记为 x 0 ^ \widehat{x_0} x0 )作为强先验;

    • stage2: stage1的声学模型参数固定,加diffusion结构,对 corse mel进行加工
      损失函数修改

    • before
      在这里插入图片描述

    • now
      在这里插入图片描述

  • inference阶段,decoder预测 corse mel (记为 x 0 ^ \widehat{x_0} x0 ),经过一步diffusion加噪声处理成 x 1 ^ \widehat{x_1} x1 ,然后再通过一步降噪预测 x 0 x_0 x0

猜你喜欢

转载自blog.csdn.net/qq_40168949/article/details/130107218