Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

用自定义数据集做adaptive合成的问题 #41

Closed
coranholmes opened this issue Dec 4, 2020 · 6 comments
Closed

用自定义数据集做adaptive合成的问题 #41

coranholmes opened this issue Dec 4, 2020 · 6 comments

Comments

@coranholmes
Copy link

coranholmes commented Dec 4, 2020

非常感谢作者分享代码!这两天一直在尝试adaptive分支的代码,也围观了你和其他人在 #35 的讨论,我自己跑出实验结果后,有些问题想进一步请教作者。具体生成的结果可以在这里 下载(提取码: b53t)。

我使用的训练语料不是公开语料,而是游戏中提取的语音,一共1639条,但是平均长度要小于D8,且开头结尾的空白(静默)部分要比D8长,而且声优说话似乎比较抑扬顿挫,句子结尾部分会比较轻。所有语音总长度一个小时出头的样子。训练都是使用代码中提供的默认参数,average loss基本也和作者在README中写的差不多。

生成的结果主要有两个问题,一个是吞音严重,另一个是 #35 中提到的机械空洞的感觉。

首先是吞音问题,可以听step-3000-训练语料中无的句子(吞音严重).wav这个文件,生成的句子就是样例中的'哈尔滨今天晴,十度到二十二度,南风三级,空气质量良。',很多词直接就没了。
我有以下几个怀疑:

  1. 参数设置问题:作者提到trim_top_db用来去掉音频首尾的静音部分,需要根据数据集自行调整,我想问一下作者设置的默认值22具体是什么含义,如何根据数据集调整?比如我这个开头空白长,我应该调成30还是300呢?
  2. 训练语料不够,因为如果是生成语料库中有的语音就基本无吞音,相对也自然(机械空洞感较低),可以听step-3000-训练预料中有的句子.wav这个音频。但是生成语料库中无的句子就经常会碰到吞音,所以我猜测是不是还需要加大训练量?
  3. 训练步数不够,这个可以听一下step-3000-训练语料中无的句子(吞音严重).wavstep-5000-训练语料中无的句子(吞音严重).wav,感觉区别不大,甚至5000的还更差一些,这是咋回事呢……

另外关于机械空洞感的问题,我猜测可能的原因是:

  1. griffin-lim算法的问题,请问作者可以在adaptive分支里再介绍一下训练好的tacotron2模型之后怎么用waveRNN来生成语音吗?
  2. 训练步数不够,这个可以听一下step-3000-训练语料中无的句子(机械空洞感重)-text只要足够努力.wavstep-5000-训练语料中无的句子(机械空洞感重)-text只要足够努力.wav,感觉区别不大……

关于以上两个问题,能请作者指教一下吗?谢谢!

另外,我之后打算从头开始训练tacotron2和waveRNN,想问一下大概多少时常的音频才足够呢?

@lturing
Copy link
Owner

lturing commented Dec 4, 2020

听了你给的训练语料中的句子,感觉句子中有很多的停顿,不知道对应的文本中,停顿的地方有加标点符号?

  1. trim_top_dp,你可以设定不同的值,然后分别把mel图画出来,人工挑选(首尾最好没有静音或者很短)
  2. 吞音的问题,感觉跟你的训练数据有关。因为你的每个句子中有很多停顿(建议利用相关的工具,将一个句子分割成多个句子)
  3. 训练步数越大,模型越倾向于 过拟合,不是步数越大越好,因为你的训练集很小

wavernn将mel频谱合成wav,你可以参照master分支中的步骤。你如果需要合成你自己训练集中的音色,在finetune完tacotron后,还需要finetune wavernn。

如果从头开始训练tacotron等,关于数据量,起码要覆盖大部分的声韵母。数据量我也不太清楚,你可以先用的数据试试。

嗯嗯,推荐你用类似fastspeechV2 等非自回归模型,我这边可以只用10句新说话人的数据就能克隆出其音色。

@coranholmes
Copy link
Author

coranholmes commented Dec 5, 2020

我之前主要做NLP,没搞过语音,还在学习中,感谢你的耐心回复(^o^)/~
关于语料的问题,我其实特地找了几个比较长的句子让你听,平均的长度其实比较短的没这么长,停顿的地方都有标点的,但是我感觉声优的说话方式和标准数据集里的还是不太一样,感觉他每次读到逗号或者句号的地方声音都会变轻(就是特别的抑扬顿挫,但是标准数据集里一般声音都比较平),停顿也比标准数据集里要长,我是不是应该把一个逗号或者句号改成两个逗号或者句号训练会好一些?
trim_top_dp 这个参数我回头再试一试调整一下~
另外你提到的这个fastspeech2,之后打算开源中文版的吗?期待一下~如果不打算开源的话,能贴一下你参考的repo吗?我之后也打算学习一下。
谢谢♪(・ω・)ノ

@lturing
Copy link
Owner

lturing commented Dec 5, 2020

停顿的地方对应的标点符号repeat,你可以试试。
不好意思,fastspeech代码还不能开源。

@lturing lturing closed this as completed Dec 5, 2020
@blackeyecircles
Copy link

@lturing 请问是否方便指点一下fastspeechV2极少数据克隆音色的思路,我理解需要至少需要所有韵母+音调组合才能合成,谢谢!

听了你给的训练语料中的句子,感觉句子中有很多的停顿,不知道对应的文本中,停顿的地方有加标点符号?

1. trim_top_dp,你可以设定不同的值,然后分别把mel图画出来,人工挑选(首尾最好没有静音或者很短)

2. 吞音的问题,感觉跟你的训练数据有关。因为你的每个句子中有很多停顿(建议利用相关的工具,将一个句子分割成多个句子)

3. 训练步数越大,模型越倾向于 过拟合,不是步数越大越好,因为你的训练集很小

wavernn将mel频谱合成wav,你可以参照master分支中的步骤。你如果需要合成你自己训练集中的音色,在finetune完tacotron后,还需要finetune wavernn。

如果从头开始训练tacotron等,关于数据量,起码要覆盖大部分的声韵母。数据量我也不太清楚,你可以先用的数据试试。

嗯嗯,推荐你用类似fastspeechV2 等非自回归模型,我这边可以只用10句新说话人的数据就能克隆出其音色。

@lturing
Copy link
Owner

lturing commented Dec 9, 2020

fastspeechv2实现音色克隆,你可以先用thchs30(中文多人语音数据集)或者vctk(英文多人语音数据集)训练一个多说话人的fastspeech,作为预训练的模型,然后再用少量的新说话人finetune模型。@blackeyecircles

@blackeyecircles
Copy link

非常感谢,我学习和尝试一下这个的实现,感谢提供思路!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants