bfs18 / e2_tts

50 stars 7 forks source link

训练LibriTTS_R的效果 #6

Closed ABC0408 closed 1 month ago

ABC0408 commented 1 month ago

我用libritts训练了模型,看loss像是收敛了

image

下面是我用LJSpeech的数据进行推理的结果: https://drive.google.com/drive/folders/1_mkx0ze_Y0P1uX3kCjAWu3rgHGhyUQeP?usp=sharing 我有两个疑问:

  1. 和你给出来的用LJSpeech训练推理出的效果相比,我合成的*-full.wav前面的效果怎么都差挺多的。
  2. 是不是因为数据量还是少的原因,克隆的效果还可以再提高。比如要几万小时的数据吗?
bfs18 commented 1 month ago

@ABC0408

  1. 250k step太少了,端到端TTS的训练指标对效果没有参考价值,因为合成的谱phone的边界和gt的不对齐。*-full前面那段是prompt,那一段算loss的时候被mask掉了,我猜测是因为模型能区分出有gt mel的区域和没有gt mel的区域,而有gt mel的区域没有算loss优化,所以效果不好。
  2. 我认为libritts的数据量应该是够的,一般来说数据越多效果会越好,但模型规模也要随之增大,要实验确定一下。
ABC0408 commented 1 month ago

@ABC0408

  1. 250k step太少了,端到端TTS的训练指标对效果没有参考价值,因为合成的谱phone的边界和gt的不对齐。*-full前面那段是prompt,那一段算loss的时候被mask掉了,我猜测是因为模型能区分出有gt mel的区域和没有gt mel的区域,而有gt mel的区域没有算loss优化,所以效果不好。
  2. 我认为libritts的数据量应该是够的,一般来说数据越多效果会越好,但模型规模也要随之增大,要实验确定一下。

我用的8卡,训练了大概300个epoch,效果和250k步的时候差不多,如果loss没有太大参考的话,梯度也基本上都是收敛了。

image

我用奥巴马的音色也合成了两条,音色是像的,就是自然度还差点。 test_output_444k.zip 请问,如何要是加大模型的话,建议修改哪些参数?

bfs18 commented 1 month ago

@ABC0408 感谢提供zero shot的结果 加大模型主要改backbone的参数,比如 https://github.com/bfs18/e2_tts/blob/2a3c19259aac46ff050de818a2947dd487f3772f/config/e2_tts.yaml#L52

    backbone:
      class_path: rfwave.dit.DiTRFE2ETTSMultiTaskBackbone
      init_args:
        input_channels: 512
        output_channels: 100
        dim: 512
        intermediate_dim: 2048
        num_layers: 24
        num_heads: 8
bfs18 commented 1 month ago

@ABC0408 prompt用2-3s的音频效果可能会更好,训练的时候随机mask的区域,最小200帧(mix_context),最大300帧(max_context)。 https://github.com/bfs18/e2_tts/blob/2a3c19259aac46ff050de818a2947dd487f3772f/rfwave/dataset.py#L52 min_context和max_context可以根据需求改一下,e2的论文是根据比例mask的。也可以改prompt。

SWivid commented 1 month ago

@bfs18 hello~ 你在这个repo试过cfg同时drop text和cond吗,我看具体实现是“clutter only text” 我复刻了一版你这种结构的,出正常句子的训练要快不少,但是音色细节也差一些 有zero-shot能力,但无论是集内还是集外音色都是像,但是细听细节有问题

不知道是不是cfg的原因

bfs18 commented 1 month ago

@SWivid 我一开始的cfg实现有点问题,直接对text和mel cond的拼接特征算了mean,这个mean作为cfg的条件,结果比现在的略差。 我认为可能不是cfg的问题,我试过不用cfg也是可以正常出声音的。

ABC0408 commented 1 month ago

@bfs18

@ABC0408 感谢提供zero shot的结果 加大模型主要改backbone的参数,比如

https://github.com/bfs18/e2_tts/blob/2a3c19259aac46ff050de818a2947dd487f3772f/config/e2_tts.yaml#L52

    backbone:
      class_path: rfwave.dit.DiTRFE2ETTSMultiTaskBackbone
      init_args:
        input_channels: 512
        output_channels: 100
        dim: 512
        intermediate_dim: 2048
        num_layers: 24
        num_heads: 8

@bfs18 我用这个参数跑了一下,loss大概看着都差不多 image 克隆奥巴马的音色效果好像更自然了一些,就是第二句话in being comparatively modern. 最后一个单词好像有一个重复,比较奇怪。 test_output_large2.zip 我在想如果像StyleTTS2那样引入ASR的对齐,那样loss就有参考意义了,模型学起来应该更简单一点。

bfs18 commented 1 month ago

@ABC0408 奥巴马的效果不错,感谢提供实验结果~ 按我的经验,跑的久一些,稳定性会提高,丢字重复的可能性会低一些。grad norm 0.14其实还可以,LJ我跑了2000个epoch,在400k step的grad norm和800k step的差不多,都是0.06左右,但800k的稳定性和效果明显要好。

bfs18 commented 1 month ago

@ABC0408 libritts_r的ckpt贴到readme里提个pull request可否

ABC0408 commented 1 month ago

@ABC0408 libritts_r的ckpt贴到readme里提个pull request可否

@bfs18 好的,我在最开始的参数下再训练一下,打算训练1000个Epoch再上传。

bfs18 commented 1 month ago

@ABC0408 感恩