完全端到端语音合成JETS: Jointly Training FastSpeech2 and HiFi-GAN for End to End Text toSpeech 简单解读

abstract部分简单说了一下,一般的TTS系统都有声学部分和vocoder,通过中间特征mel谱连接,这个模型是e2e的,所以中间的声学特征不会mismatch,也不用finetune。而且移除了额外的alignment tool,实现在了espnet2上

流程图如上,和fs2+hifigan没有什么区别

不过在variance adaptor中,写的结构和开源的代码是一致的,也就是pitch和energy是音素级的,在fastspeech原始论文中是帧级的

下面简介了一下fastspeech,其中的pitch和energy是通过平均音素内的帧得到的(这个是根据duration来的),而且在upsample这个过程中,论文中使用了高斯上采样,也是就基于softmax的aligner,而不是通过普通的repeat上采样。

而且这个fastspeech部分没有mel loss,因为它要端到端,不需要中间变量mel谱,只计算了duration、pitch、energy的loss

Hfi-GAN部分没有什么特殊的,GAN部分是最小二乘的损失。


下面介绍了Alignment Learning Framework

其中h代表text embedding,m代表mel spectrogram

h_enc, m_enc就是通过1D卷积层提取出来的特征

A_soft是通过softmax得到的alignment分布

下面用的小技巧还是比较多的

首先是通过

计算了A_soft

这段是L_forward_sum的计算,稍微有点绕,这个s就是一个分割的结果,比如第一帧就是对应第一个音素, S(h)是有效分割的结果。

通过上面的解释,p(s_t|m_t)很好理解了,简单解释一下连乘和累加符号代表什么

当然熟悉ctc loss的同学可能早就明白了

这个连乘代表着从t1到t_max的一条路径,而累加呢,代表着所有可能出现的路径。

如果还不明白可以自己画个图,或者网上搜一下ctc loss,有很多讲解的文章,讲的很明白

这里注意一点,虽然公式这么写,但是真正实现时候可不能这样,时间复杂度太高,要用动态规划来优化一下。论文里也写了,Notably it can be efficiently trained with offthe-shelf CTC [25] loss implementation,就是他也是用的写好的ctc loss

然后通过MAS(glowtts和vits用的那个),算出了单调的A_hard

 为了让A_hard和A_soft尽量匹配,最小化了他们的kl距离,也就是L_bin这个损失

最后把这两部分损失加一起,就成为了L_align


我们把所有的损失总结一下:

没有mel损失的fastspeech损失

 

对抗+特征匹配+mel损失的hifigan生成器损失

 

CTC和KL损失组成的align损失

总损失:

 

里面的系数我没有具体写出来,大家可以对照论文看一下 


实验部分:

一般论文的实验部分我基本是不怎么翻译的,但是这个论文要看一下,没有看这个论文时候我也尝试复现过这样的结构,但是没有用align部分,可是效果出奇的差,主要原因是通过fastspeech生成的mel在前期是不稳定的,G和D很容易训练炸掉,然后影响fastspeech生成不好mel,形成一个恶行循环,看看这个论文怎么解决的这个问题。

用了LJSpeech 12600的train、250的val和250的eval,22k采样率,16bit。用的g2p-en的音素输入

mel谱是用于hifigan的mel loss和align的输入

80维mel,1024 fft size、256 hop size都是很常规的参数

用的结构依然是transformer,没有用conformer。256的attention dim和1024的encoder、decoder feedforward dim。Align模块也是引用了别人的文章,用的是One tts alignment to rule them all 这个论文的。vocoder一般都是截取一段进行训练,这个无论是fs2s、vits都是这样做的,全用一般显存也不够,这个论文截取了64。

对比试验选了3个,其中两个结构都是conformer的fs2+hifigan,区别:ft的是分别训练,联合finetuen,tr的是从0开始联合训练,第三个是vits

 (每次新出一个模型,老模型的mos打分都会莫名降下去)。

论文竟然就结束了,并没有解决掉我之前的问题,回来还是去espnet的代码里看看espnet怎么做的吧,怎么从0进行训练的(未完待续

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值