基于SV2TTS的中文语音克隆合成实践

简介:

2017年初,Google 提出了一种新的端到端的语音合成系统——Tacotron,Tacotron打破了各个传统组件之间的壁垒,使得可以从<文本,声谱>配对的数据集上,完全随机从头开始训练。本文复现了一篇Tacotron系列的论文,使模型可以克隆人的声音,并且完成文本到声音的转换。

参考论文:
Transfer Learning from Speaker Verification to Multispeaker Text-To-Speech Synthesis
原文的github实现:link

论文概述:

这篇论文主要目的是克隆说话人的声音,并且将文本以说话人的声音转成音频。
模型结构:


模型分为3个模块构成,encoder模块,systhesis模块,vocoder模块。
encoder模块将说话人的声音转换成speaker embedding,synthesis模块将文本转换成mel-spectrogram,vocoder模块将mel-spectrogram转换成waveform。Github上已经有英文是实践,这里主要记录下中文的实践及各模块的结果。

Encoder

Encoder模型可以选择pretrained的,这里为了实践操作整个模型我用了data_aishell的400人的中文数据重新训练,结果如下:

这个是用visdom可视化看到的图。
在这里插入图片描述

这个是encoder自动生成的降维之后的图。
在这里插入图片描述
可以看到55000步的时候已经有了比较不错的结果,模型能将不同人的embedding投影到向量空间的不同地方,当然可能由于数据相对于原文实现的数据比较少,所以在同样维度的向量空间效果会更加明显一些,不过和刚开始对比已经有了很大的进步:
在这里插入图片描述

Synthesis

这里数据选用了清华的data_thchs30,选用该数据集的目的是因为只有这个数据集有拼音,方便处理。
在这里为了方便,把数据集处理成libspeech的格式,其中有一步需要对每一条transcript进行处理,得到alignment(对齐),这一步很耗费时间。
这个是处理好的中文数据的第一条:
在这里插入图片描述第一部分是文件名,第二部分是拼音,第三部分是alignment。
然后跑synthesis模型,这里可以选择在给的pretrained模型的基础上做fine-tuning,也可以直接从头训。作者给的观点是如果你有300h左右的语料库最好重新训。所以这里我直接fine-tuning,设定20W步,训练过程分为pre-processing和train。
pre_processing使用audio产生这三个文件:
在这里插入图片描述
每一个文件夹中的文件都是npy格式,代表各个部分的向量表示。
下面是train的结果:
在这里插入图片描述
先是训练中loss的图:
在这里插入图片描述
mel-spectrogram:
在这里插入图片描述
然后是eval中loss的图:
在这里插入图片描述
这里每一次eval都会生成一个wav文件:
在这里插入图片描述

可以看到alignment已经能看到了,但是有的对齐也不是很好,eval的loss也比训练的loss多一些。
这里听声音的话,已经能合成人声,但是由于synthesis这一步合成时采用的是Griffin-Lim,所以会有杂音,这里只需要听韵律就行了。

Vocoder

最后一块了,这里输入采用synthesis训好的模型产生的mel-spectrogram。
训练过程:
在这里插入图片描述
这里同样采用fine-tuning,由于采用了wavenet所以这里loss不会像之前synthesis一样降到0.几。
训练出来的结果只包括一个模型的pt文件和一堆合成的样本。

整体测试

这样这个模型就算训练完成了。整体测试一下:
选取人声:
在这里插入图片描述
输入一段文本:
在这里插入图片描述
合成声音:
在这里插入图片描述
听了一下,说话人声音很像,但是合成的声音会有杂音。拿出来WaveNet单独发声发现是WaveNet训练的不够好,之后准备重新训WaveNet看一看效果会不会有进步。
(从开始看tacotron1,2,WaveNet的论文和复现,到SV2TTS的论文与复现,到自己做出来结果,陆陆续续花了一个多月的时间,记录一下方便以后复习。)

  • 10
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 42
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值