jaywalnut310 / vits

VITS: Conditional Variational Autoencoder with Adversarial Learning for End-to-End Text-to-Speech
https://jaywalnut310.github.io/vits-demo/index.html
MIT License
6.48k stars 1.21k forks source link

> > @FanhuaandLuomu 输入为拼音的声母、韵母序列; 之前由于担心插入blank,会使输入序列变成2倍长度,导致工程实现中耗时变长,从而影响首包延时以及RTF。现在补上blank,没有出现发音问题了,加上blank后首包延迟为100ms,整体rtf为0.03的样子,还好。 #127

Open 15755841658 opened 1 year ago

15755841658 commented 1 year ago
          >  > @FanhuaandLuomu 输入为拼音的声母、韵母序列; 之前由于担心插入blank,会使输入序列变成2倍长度,导致工程实现中耗时变长,从而影响首包延时以及RTF。现在补上blank,没有出现发音问题了,加上blank后首包延迟为100ms,整体rtf为0.03的样子,还好。

@hermanseu 是的,我之前也是加了blank 改善了吞音现象。你是用gpu 推理的吗?还是改成了流式

@FanhuaandLuomu

  1. 其实还是没搞明白吞音的根本原因在哪里。有检查过预测的隐变量的均值方差,均值特别小,方差看着有点大;只用均值作为隐变量的话,依然会有吞音的问题,想着是不是loss控制的不好导致均值学的有点偏,后面忙其他的事情就没继续做实验了。有思路的话,能否分享下~~
  2. 我这有逻辑会把训练得到的模型dump成二进制,然后c/c++读取二进制模型,在cpu上推理,流式输出。

Originally posted by @hermanseu in https://github.com/jaywalnut310/vits/issues/2#issuecomment-1396587418

MaxMax2016 commented 1 year ago

@15755841658 解决了吞音问题,https://github.com/PlayVoice/vits_chinese

JohnHerry commented 1 year ago

是不是拼音序列中空格已经编码过的话,就不用加blank了?

dzcmingdi commented 1 year ago

是不是拼音序列中空格已经编码过的话,就不用加blank了?

要的吧,训练的时候默认输入音素序列每个元素后面插入个0

JohnHerry commented 1 year ago

是不是拼音序列中空格已经编码过的话,就不用加blank了?

要的吧,训练的时候默认输入音素序列每个元素后面插入个0

我刚开始跑,现在的版本没有插入Blanks,现在训练15Ksteps了,听者效果还行。没有啥变音乱调的。

JohnHerry commented 1 year ago

是不是拼音序列中空格已经编码过的话,就不用加blank了?

要的吧,训练的时候默认输入音素序列每个元素后面插入个0

我刚开始跑,现在的版本没有插入Blanks,现在训练15Ksteps了,听者效果还行。没有啥变音乱调的。

我的当前版本不是声韵母编码,是单字符编码的。

JohnHerry commented 1 year ago

感觉声韵母编码的话,主要好处是缩短了输入长度。例如一个比较长的拼音序列的话: zhuang4 如果单字符编码,要7个input embedding tensor,加上空格得8个。 而声韵母编码只要声、韵、调,三个input embedding就好了,缩减了一半。 而假如都插入blank的话,那就是6个了,那缩短长度的作用就大打折扣了。

dzcmingdi commented 1 year ago

是不是拼音序列中空格已经编码过的话,就不用加blank了?

要的吧,训练的时候默认输入音素序列每个元素后面插入个0

我刚开始跑,现在的版本没有插入Blanks,现在训练15Ksteps了,听者效果还行。没有啥变音乱调的。

那没事了

hermanseu commented 1 year ago

是不是拼音序列中空格已经编码过的话,就不用加blank了?

要的吧,训练的时候默认输入音素序列每个元素后面插入个0

我刚开始跑,现在的版本没有插入Blanks,现在训练15Ksteps了,听者效果还行。没有啥变音乱调的。

那没事了

@dzcmingdi 我碰到的问题是:不加blank的情况下,大部分字发音是都非常好,少量的字的音会发成相近的音,总之不是当前字的音,加了blank就好了;不知道你那遇到这样的问题没?

dzcmingdi commented 1 year ago

是不是拼音序列中空格已经编码过的话,就不用加blank了?

要的吧,训练的时候默认输入音素序列每个元素后面插入个0

我刚开始跑,现在的版本没有插入Blanks,现在训练15Ksteps了,听者效果还行。没有啥变音乱调的。

那没事了

@dzcmingdi 我碰到的问题是:不加blank的情况下,大部分字发音是都非常好,少量的字的音会发成相近的音,总之不是当前字的音,加了blank就好了;不知道你那遇到这样的问题没?

目前我还没有去除blank训练过,所以我还没碰到过这种情况。

JohnHerry commented 1 year ago
    我们目前合成带噪,主要发生在输入音素序列保持标点的情况下。本来预计它有助于提升效果,比如句末的问号,叹号,句号是代表不同语气的嘛,但事实不是,合成结果个别音带噪。 我们正在试验的三组: 拼音序列带标点, 拼音序列带韵律, 拼音序列带标点和韵律。 结果 第二组效果最好,第一组效果最差。
   感觉标点符号是不发音字符,把它融进来可能会不小心学到一些奇怪的发音片段,不但没有学到情感,反而造成噪音效果。
JohnHerry commented 1 year ago

弱弱问一下? 声韵母表,都是按照 贝壳的标注方法吗? 比如 wu, 贝壳标法是空声母带一个韵母。 一般我们可以认为w是声母,u是韵母。 这两种标法哪种效果好?

JohnHerry commented 1 year ago

是不是拼音序列中空格已经编码过的话,就不用加blank了?

要的吧,训练的时候默认输入音素序列每个元素后面插入个0

我刚开始跑,现在的版本没有插入Blanks,现在训练15Ksteps了,听者效果还行。没有啥变音乱调的。

那没事了

@dzcmingdi 我碰到的问题是:不加blank的情况下,大部分字发音是都非常好,少量的字的音会发成相近的音,总之不是当前字的音,加了blank就好了;不知道你那遇到这样的问题没

请问您是怎么做这种覆盖测试的?测试每个汉字的发音?中间加韵律吗?