lturing / tacotronv2_wavernn_chinese

tacotronV2 + wavernn 实现中文语音合成(Tensorflow + pytorch)

Home Page:https://lturing.github.io/tacotronv2_wavernn_chinese/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

非常感谢LZ专门上传的speaker adaptive分支!迟到的感谢!

xuexidi opened this issue · comments

非常感谢您上传的speaker adaptive分支,我已经成功验证了speaker adaptive,同时我利用THCHS30的D8说话人数据fine-tune了您预训练的WaveRNN模型,可以实现D8说话人的高清语音合成。非常感谢您!

不过与此同时我发现了一个很神奇的现象(经过我反复验证都有此现象),不知道您有没有发现,在此请教您一下:
【注】为控制变量,以下合成的均为同一句话:“国内知名的动漫网站,这里有最及时的动漫新番。”

【1】我分两次单独把您的master分支和adaptive分支下载下来,放在两个不同的文件夹,这里暂且把master分支称为origin,把adaptive分支称为fine。
【2】对于同一个您预训练好的标贝数据集对应的tacotron_model.ckpt-206500模型,我在master分支文件夹下运行tacotron_synthesize.py,合成的声音清晰、无异常。 在adaptive分支文件夹下运行tacotron_synthesize.py,合成的声音清晰,但是会带有稍重的管道回声(类似于把嘴靠近水管口说话产生的的那种回声感)。
【3】我对比了master分支和adaptive分支的synthesize部分的代码,没发现有什么差异。master分支和adaptive分支最明显的差异是tacotron_hparams.py里的一些fmin等参数的差别,但是我看synthesize的时候并没有用到fmin这些参数,所以没想明白是什么原因导致了这个神奇的现象。
【4】紧接着,我用同一个您预训练好的D8说话人fine-tune之后的tacotron_model.ckpt-3000模型,出现了相反的情况:我在master分支文件夹下运行tacotron_synthesize.py,合成的声音清晰,但是会带有稍重的管道回声。 在adaptive分支文件夹下运行tacotron_synthesize.py,合成的声音清晰、无异常。(我自己fine-tune出来的D8说话人的tacotron_model.ckpt-3000模型也有这个现象)。

合成的语音我整理打包附上:
wav_compare.zip

包内文件解释:
fine:adaptive分支
origin:master分支
Biao:标贝数据集对应的tacotron_model.ckpt-206500模型
2:to
bad:语音高清清晰,但有管道回声感
good:语音高清,无异常

fineBiao_2_fineBiao_bad.wav----------利用adaptive分支文件夹里自带的标贝数据集对应的tacotron_model.ckpt-206500模型,在adaptive分支文件夹下运行tacotron_synthesize.py合成的语音,bad。

fineBiao_2_originBiao_good.wav----------利用adaptive分支文件夹里自带的标贝数据集对应的tacotron_model.ckpt-206500模型,在master分支文件夹下运行tacotron_synthesize.py合成的语音,good。

originBiao_2_originBiao_good.wav----------利用master分支文件夹里自带的标贝数据集对应的tacotron_model.ckpt-206500模型,在master分支文件夹下运行tacotron_synthesize.py合成的语音,good。

originBiao_2_fineBiao_bad.wav----------利用master分支文件夹里自带的标贝数据集对应的tacotron_model.ckpt-206500模型,在adaptive分支文件夹下运行tacotron_synthesize.py合成的语音,bad。

fineD8_2_fineD8_good.wav----------利用adaptive分支文件夹里自带的D8说话人fine-tune之后的tacotron_model.ckpt-3000模型,在adaptive分支文件夹下运行tacotron_synthesize.py合成的语音,good。

fineD8_2_originD8_bad.wav----------利用adaptive分支文件夹里自带的D8说话人fine-tune之后的tacotron_model.ckpt-3000模型,在master分支文件夹下运行tacotron_synthesize.py合成的语音,bad。

小白翻来覆去看代码没发现master分支和adaptive分支synthesize部分的代码有啥差异,特此麻烦您如果有空还请您帮忙分析以下是啥原因,非常感谢!

--------------------------先后请教了您好几次,您是我的入门TTS的启蒙者,在这里致以我最高敬意!

造成这个的原因还是fmin,合成wav的流程是,txt -> mel(tacotron) -> mel_to_linear(梅尔频谱到线性频谱) -> griffin-lim算法迭代恢复相位信息 -> 逆短时傅立叶变换 -> wav。
mel_to_linear(以master分支为例)对应代码为 ref1 -> ref2 -> ref3
可以看到ref3用到了fmin。你可以用IDE(vscode 或者 eclipse)看看ref1调用的过程

对于你的问题,例如:
1)fineBiao_2_fineBiao_bad.wav----------利用adaptive分支文件夹里自带的标贝数据集对应的tacotron_model.ckpt-206500模型,在adaptive分支文件夹下运行tacotron_synthesize.py合成的语音,bad。

2)fineBiao_2_originBiao_good.wav----------利用adaptive分支文件夹里自带的标贝数据集对应的tacotron_model.ckpt-206500模型,在master分支文件夹下运行tacotron_synthesize.py合成的语音,good。

只需将1)改为:
fineBiao_2_fineBiao_bad.wav----------利用adaptive分支文件夹里自带的标贝数据集对应的tacotron_model.ckpt-206500模型,在adaptive分支文件夹下 (同时修改tacotron_hparams.py中的fmin由55改为95) 运行tacotron_synthesize.py合成的语音

就可以了

造成这个的原因还是fmin,合成wav的流程是,txt -> mel(tacotron) -> mel_to_linear(梅尔频谱到线性频谱) -> griffin-lim算法迭代恢复相位信息 -> 逆短时傅立叶变换 -> wav。
mel_to_linear(以master分支为例)对应代码为 ref1 -> ref2 -> ref3
可以看到ref3用到了fmin。你可以用IDE(vscode 或者 eclipse)看看ref1调用的过程

对于你的问题,例如:
1)fineBiao_2_fineBiao_bad.wav----------利用adaptive分支文件夹里自带的标贝数据集对应的tacotron_model.ckpt-206500模型,在adaptive分支文件夹下运行tacotron_synthesize.py合成的语音,bad。

2)fineBiao_2_originBiao_good.wav----------利用adaptive分支文件夹里自带的标贝数据集对应的tacotron_model.ckpt-206500模型,在master分支文件夹下运行tacotron_synthesize.py合成的语音,good。

只需将1)改为:
fineBiao_2_fineBiao_bad.wav----------利用adaptive分支文件夹里自带的标贝数据集对应的tacotron_model.ckpt-206500模型,在adaptive分支文件夹下 (同时修改tacotron_hparams.py中的fmin由55改为95) 运行tacotron_synthesize.py合成的语音

就可以了

@lturing
一语点醒梦中人!
非常感谢您这么耐心解答!
那这么说,如果我合成的Mel谱图,直接用WaveRNN生成语音的话,应该就不会有这种管道回声的现象了,明天去试试。

非常感谢您的无私解答!谢谢!

@xuexidi
您好!请问您用THCHS30的D8说话人数据fine-tune预训练WaveRNN模型,有改变什么参数设置吗?
我也是用adaptive分支TacotronV2的finetune模型处理D8数据,生成predicted_mel和wavernn_training_data.txt,然后加载作者的Wavernn预训练模型finetune,从预训练模型的617k跑到633k,loss从3.5降至2.5,合成的语音有很大杂音。
参数我只把wavernn_hparams.py的fmin = 95改成55,其他没动。

看的您说合成了D8说话人的高清语音,求指教!

@yannier912
你好!我微调WaveRNN的时候没修改参数,fmin保持95。我在633k时候loss大概也是2.5。WaveRNN我训练到了1000k左右loss为2.3。但是我尝试听了一下680k左右效果已经可以了。
总体来讲finetune的WaveRNN没有 @lturing 给的高清,会有一点点底噪,但是质量还是很不错。

@xuexidi
感谢回复!那应该就是我的训练step还不够了(本以为会和TacotronV2一样finetune几k就够)……
结果有一点底噪,但应该比Griffin Lim好吧?Griffin Lim结果有回音的感觉。
另外再问下您是在gup训练的吗,跑到1000k大概用了多久呢?
感谢感谢!!

@xuexidi
感谢回复!那应该就是我的训练step还不够了(本以为会和TacotronV2一样finetune几k就够)……
结果有一点底噪,但应该比Griffin Lim好吧?Griffin Lim结果有回音的感觉。
另外再问下您是在gup训练的吗,跑到1000k大概用了多久呢?
感谢感谢!!

@yannier912
您客气了。
虽然有一点点底噪,但是比Griffin Lim好非常多,仅仅只是有一点点底噪。底噪用Adobe Audition稍微批量处理一下,就跟作者提供的模型一样干净,非常纯净。
Griffin_lim确实有回音,稍微电音感。
是单GPU训练,batchsize=32。速度大概是3.5steps/s,我当时就放在那边跑了一个周日。

另外:WaveRNN收敛的质量不是很稳定,可能再680k得时候生成得质量会比690k好,我是靠听训练过程中合成得音频质量来挑选WaveRNN模型。

@xuexidi
嗯嗯了解了,我就继续训练看看,因为从625k就差不多稳定在loss2.5左右,我以为训练不动了。
另外中间结果我也会关注的,谢谢分享!~

@xuexidi
嗯嗯了解了,我就继续训练看看,因为从625k就差不多稳定在loss2.5左右,我以为训练不动了。
另外中间结果我也会关注的,谢谢分享!~

@yannier912
你好,我今天过来看了一下,我用WaveRNN进行fine-tune到628k时候生成的的语音已经很不错了。之前说的带有一点点底噪的用的是625k生成的。
我去听了一下D8说话人的原始音频,本身就带有一些底噪的。
作者分享的预训练模型还是很给力的。

再次感谢作者! @lturing

@xuexidi
您好,不好意思刚看到~上次您说对WaveRNN训练到1000k loss2.3左右,680k时候效果就很好了,这是D8 finetune的结果吗,还是从头训练呢?
“我用WaveRNN进行fine-tune到628k时候生成的的语音已经很不错了”,所以您用D8 finetune只到628k就可以了吗?我在628k的时候合成的会有一阵一阵“撕拉撕拉”的噪音,现在到660k剩一丢丢底噪,但661k和662k又开始有大噪音了。当前训练到662k,loss在2.4

@xuexidi
您好,不好意思刚看到~上次您说对WaveRNN训练到1000k loss2.3左右,680k时候效果就很好了,这是D8 finetune的结果吗,还是从头训练呢?
“我用WaveRNN进行fine-tune到628k时候生成的的语音已经很不错了”,所以您用D8 finetune只到628k就可以了吗?我在628k的时候合成的会有一阵一阵“撕拉撕拉”的噪音,现在到660k剩一丢丢底噪,但661k和662k又开始有大噪音了。当前训练到662k,loss在2.4

@yannier912
你好!
"上次您说对WaveRNN训练到1000k loss2.3左右,680k时候效果就很好了,这是D8 finetune的结果吗"-----------------是的D8 finetune的结果。

““我用WaveRNN进行fine-tune到628k时候生成的的语音已经很不错了”,所以您用D8 finetune只到628k就可以了吗?我在628k的时候合成的会有一阵一阵“撕拉撕拉”的噪音,现在到660k剩一丢丢底噪,但661k和662k又开始有大噪音了。当前训练到662k,loss在2.4”-----------WaveRNN收敛过程中的质量确实总是在波动。我只能挑一个效果好的出来用。

我今天听了一下992k时候的模型,loss为2.3左右,听不出底噪。
再往前的模型生成的语音我没继续听,但我觉得不需要训练到这么久,往前的680+k、700+k或者800+k应该都会有效果很不错的模型出现。

@xuexidi
感谢耐心解答!那您刚说的fine-tune到628k时候效果很不错,是不是写错啦~ 628k应该不够的~
吓我一跳,我以为您628k就可以了 而我660k还不行,以为又哪里有问题哈哈
那我继续训练估计效果还会更好,谢谢!~

@xuexidi > 感谢耐心解答!那您刚说的fine-tune到628k时候效果很不错,是不是写错啦~ 628k应该不够的~
吓我一跳,我以为您628k就可以了 而我660k还不行,以为又哪里有问题哈哈
那我继续训练估计效果还会更好,谢谢!~

@yannier912
您客气了!
您没理解错,我听了628k的WaveRNN模型合成的语音,效果已经不错了,只是有点底噪。
从628k~992k之间的合成的语音质量也一直在波动,但总体良品率在提高。
然后我直接跳到992k听了一下,发现听不出有底噪。
跳到998k听反而会出现各种噪声。
1000k又恢复正常(干净无底噪)。
反复循环...

所以我觉得您在628k没出现好音质也正常,这东西有时候炼丹看运气...... :)

@xuexidi
哈哈是的,确实一直会有波动,反正中间参数都有保存,最后挑着看看吧~

@xuexidi 您好!打扰问一下,除了THCHS30的D8,您有用其他数据集speaker adaptive吗?
因为想实现多个不同音色说话人转换,我又分别试了ST-CMDS和AISHELL的清晰男声finetune tacotron,但效果都不好,带比较重都杂音,跟D8效果差特别多