Giter Site home page Giter Site logo

tacotronv2_wavernn_chinese's Introduction

TacotronV2 + WaveRNN


update at 2020-10-3 添加微调分支adaptive

  1. 开源中文语音数据集标贝(女声)训练中文TacotronV2,实现中文到声学特征(Mel)转换的声学模型。在GTA模式下,利用训练好的TacotronV2合成标贝语音数据集中中文对应的Mel特征,作为声码器WaveRNN的训练数据。在合成阶段,利用TactornV2和WaveRNN合成高质量、高自然度的中文语音。
  2. THCHS-30任选一个speaker的语音数据集,微调TacotronV2中的部分参数,实现说话人转换branch adaptive
  3. Tensorflow serving + Flask 部署TacotronV2中文语音合成服务。

由于TacotronV2TacotronV2中采用Location sensitive attention,对长句字的建模能力不好(漏读、重复),尝试了GMM attentionDiscrete Graves AttentionissueForward attention,能有效地解决对长句的建模能力,加快模型收敛速度。

tensorflow-gpu的版本为1.14.0

测试语音合成的效果

**参照requirements.txt**安装相应的库

git clone https://github.com/lturing/tacotronv2_wavernn_chinese.git
cd tacotronv2_wavernn_chinese
python tacotron_synthesize.py --text '现在是凌晨零点二十七分,帮您订好上午八点的闹钟。'
#合成的wav、attention align等在./tacotron_inference_output下
#由于在inference阶段,模型中的dropout没有关闭,相同的输入text,合成的wav的韵律等有轻微的不同

训练TacotronV2模型

训练数据集预处理

中文标点符号处理

对于中文标点符号,只保留',。?!'四种符号,其余符号按照相应规则转换到这四个符号之一。

中文到拼音转换code

利用字拼音文件词拼音文件,实现中文到拼音转换,能有效消除多音字的干扰。具体步骤如下:

  1. 对于每个句子中汉字从左到右的顺序,优先从词拼音库中查找是否存在以该汉字开头的词并检查该汉字后面的汉字是否与该词匹配,若满足条件,直接从词库中获取拼音,若不满足条件,从字拼音库中获取该汉字的拼音。
  2. 对于数字(整数、小数)、ip地址等,首先根据规则转化成文字,比如整数2345转化为二千三百四十五,再转化为拼音。
  3. 由于输入是文字转化而来的拼音序列,所以在合成阶段,允许部分或全部的拼音输入。

注优先从词文件中寻找拼音,也会带来错误的拼音(也许先分词能解决),所以本项目支持中文和拼音混合输入

TacotronV2训练数据集预处理

修改hparams.py标贝数据集的路径

dataset = '/home/spurs/tts/dataset/bznsyp', #标贝数据集的根目录,其wav文件在 dataset/bznsyp下
base_dir = '/home/spurs/tts/dataset',
feat_out_dir = 'training_data_v1',
tacotron_input = '/home/spurs/tts/dataset/bznsyp/training_data_v1/train.txt', 

执行如下脚本,生成TacotronV2的训练数据集

python tacotron_preprocess.py

训练TacotronV2模型

执行如下脚本,训练TacotronV2模型

python tacotron_train.py

TacotronV2合成Mel频谱

TacotronV2生成Mel文件,利用griffin lim算法恢复语音,修改脚本 tacotron_synthesize.py 中text

python tacotron_synthesize.py

或命令行输入

python tacotron_synthesize.py --text '国内知名的视频弹幕网站,这里有最及时的动漫新番。'

TacotronV2 pretrained model

改进部分

由于TacotornV2中采用的注意力机制是Location sensitive attention,对长句子的建模能力不太好,尝试了以下注意力机制:

由于语音合成中的音素(拼音)到声学参数(Mel频谱)是从左到右的单调递增的对应关系,特别地,在合成阶段,对forward attention中的alignments的计算过程的特殊处理,能进一步提高模型对长句子的语音合成效果,以及控制语速。

说话人转换(speaker adaptive)

TactronV2支持finetune,固定decoder层前的参数(embedding层、CHBG、encoder层等),用新数据集(数据量很少)训练从checkpoint中恢复的模型,达到speaker adpative的目的。

训练WaveRNN模型

Wavernn训练数据集准备

利用训练好的TacotronV2对标贝语音数据集在GTA(global teacher alignment)模式下,生成对应的Mel特征。需要注意的如下:

  • TacotronV2中的mel输出的范围为[-hparmas.max_abs_value, hparams.max_abs_value],而WaveRNN中的mel的范围[0, 1],故需要将TacotronV2输出mel特征变为[0, 1]范围内。
  • TacotronV2中的hop_size为275,需要将WaveRNN中的voc_upsample_factors的值改为(5, 5, 11)(注上采样的比例, 或者(x, y, z),并且x * y * z = hop_size)。
  • Wavernn中voc_mode设为RAW,bits为10,故需要将wav文件转换到相应格式。
python wavernn_preprocess.py #利用训练好的TacotronV2生成Wavernn的训练数据

Wavernn模型训练

训练前需要切换到pytorch conda环境,例如:

conda activate torch1.0 #切换到pytorch分支

训练模型

python wavernn_train.py

Wavernn模型评估

python wavernn_gen.py --file path_to_mel_generated_by_tacotronv2 

Wavernn pretrained model

服务部署

website
采用Tensorflow Serving + Docker 来部署训练好的TacotronV2语音服务,由于需要对文本进行处理,还搭建了Flask后台框架,最终的语音合成的请求过程如下:
请求过程:页面 -> Flask后台 -> Tensorflow serving
响应过程:Tensorflow serving -> Flask后台 -> 页面

额外参照文献

tacotronv2_wavernn_chinese's People

Contributors

lturing avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tacotronv2_wavernn_chinese's Issues

您好,请教一下训练时长问题

您好,我用标贝公开数据集训练tacotronvV2,在单gpu机器上已经跑了6天了才到120k,当前loss4.8。
是我机器性能问题吗,这也太慢了。请问您训练到收敛大概多长时间呢?
谢谢!!

您好,真心请教一下,WaveRNN从头开始训练自己训练的话大概要多久才能收敛呀?我目前训练425k个step了,但是效果还不理想,看loss震荡有点大。(我是单卡2080Ti训练,batchsize是64),谢谢!

您好,真心请教一下,WaveRNN从头开始训练自己训练的话大概要多久才能收敛呀?我目前训练425k个step了,但是效果还不理想,看loss震荡有点大,生成的音频效果也在震荡。(我是单卡2080Ti训练,batchsize是64),谢谢!
Loss曲线:(纵轴Loss,横轴是epoch数):
31a6e8c899b5e9e5f479d0fc641843c

350k steps时生成的测试语音样本:
1b1317569a15bfc099d13892ddd2501

400k steps时生成的测试语音样本:
2bccfba6a7efa4e1dc6874c85644243

425k steps时生成的测试语音样本:
dd08aaaf9076eb58eb8f23fe9ebe4a1

用ST-CMDS小数据集speaker adapter训练的问题

作者您好!
我照着您分享的speaker adapter分支对THCHS30数据集的D8说话人finetune,效果很好。然后为了实现多说话人的转换,我从ST-CMDS数据集找了个低沉男声数据,照着您的流程finetune,loss下降很快1000k时候0.3,5000k 0.2,我训练到10000k结束loss0.15还有继续降的趋势。但是无论500k还是5000k合成的语音都不清晰。原样本是不含杂音的,发音也清楚,不知道是样本量太小?还是我哪里参数没弄对呢?
数据集是ST-CMDS的00183I,低沉男声,包括120个音频每个长2~4s,采样率16k采样大小16bit,和D8都是一样的。
数据处理都是和D8一样的,除了trim_silence设置为False,因为想保留一定空白部分用于后续谱减法去噪。
我贴几个语音您听一下:
原训练样本
https://machine-audit-model.oss-cn-beijing.aliyuncs.com/test/20170001P00183I0024.wav
500k合成
https://machine-audit-model.oss-cn-beijing.aliyuncs.com/test/step-500-b54e37b5b95123ec77feafee9400f5bb-wav-from-mel.wav
2500k合成
https://machine-audit-model.oss-cn-beijing.aliyuncs.com/test/step-2500-b54e37b5b95123ec77feafee9400f5bb-wav-from-mel.wav
5000k合成
https://machine-audit-model.oss-cn-beijing.aliyuncs.com/test/step-5000-b54e37b5b95123ec77feafee9400f5bb-wav-from-mel.wav
10000k合成
https://machine-audit-model.oss-cn-beijing.aliyuncs.com/test/step-10000-b54e37b5b95123ec77feafee9400f5bb-wav-from-mel.wav

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

非常感谢您上传的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的启蒙者,在这里致以我最高敬意!

如何增加symbol?

感谢作者的出色工作!

请问作者,如何在原有模型的基础上,可以动态增减或者修改 inputs_embedding symbols,而不用删除原有的ckpt重投开始训练新模型?
谢谢!

train.txt

您好,在train.txt中“audio-000001.npy|mel-000001.npy|46200|168”代表什么?

声码器是griffin lim算法,还是wavernn呢?

您好!
请问语音合成部分,直接用的griffin lim算法吗?还是用wavernn的训练模型?
python tacotron_synthesize.py --text '国内知名的视频弹幕网站,这里有最及时的动漫新番。'——这个输出的结果是griffin lim还是wavernn?
谢谢!

关于多说话人训练wavernn

作者您好!
之前按照您分享的方法我已经成功实现了4个说话人的语音合成,女声效果较好,男声杂音重些。非常感谢您的分享!
后续我想用多说话人训练一个通用wavernn,这样就不用每次都finetune了。然后现在有几个问题再请教下:

  1. 直接训练wavernn,就得用原语音计算所得mel作为wavernn输入,而没有tacotron生成mel数据了。这样效果会好吗?
    用原语音计算所得mel作为wavernn输入,就非GTA模式了是吧?
  2. 我从AISHEEL-3数据集中挑选了相对清晰都45个说话人,语音时长共20小时,其中每个说话人时长0.35-0.55h,而且女声较多男声只10个左右,这样的比例训练出的wavernn会不会对男声效果不好呢?可是我也找不出其他音色优秀的男声了。。

同一个文本内容,多次转换结果不一致问题

作者您好!
我在测试的时候发现,之前用d8训练好的tacotron模型,通过tacotron_synthesize.py直接合成语音。
开始trim_top_db=22,合成语音A;然后改为25,合成语音B;然后又改回22,合成语音C和A明显不同;再改回25,合成语音D和B也明显不同。这样来回试了多次,每次都不一样。
请问这是什么原因呢?

推理耗时问题

你好,我测试了你提供的预训练模型,运行tacotron_synthesize.py。80字符长度的文本生成语音要15秒(已经去掉画图代码)。请问这个推理耗时主要在哪?有什么提升性能的办法

关于requirements中的tensorflow_serving包

首先感谢作者的分享~
requirements里的tensorflow_serving包现在找不到啊,目前我只尝试了adaptive分支的代码,不装这个包好像也没问题,可以正常训练和合成,想问一下这个包具体在哪里用到了?作者可以提供一个打包吗?

~ % pip install tensorflow_serving
ERROR: Could not find a version that satisfies the requirement tensorflow_serving (from versions: none)
ERROR: No matching distribution found for tensorflow_serving

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

非常感谢作者分享代码!这两天一直在尝试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,想问一下大概多少时常的音频才足够呢?

关于speaker adapter的训练问题

作者你好,我听了你demo中speak adapter的效果,感觉音色还可以,加上wavernn应该会更流畅。麻烦请教一下你提到的固定encoder参数的训练方法,finetune的时候直接将encodr中的is_training参数改成False就可以了么?也就是下面代码中的is_training

`encoder_cell = TacotronEncoderCell(
EncoderConvolutions(is_training, hparams=hp, scope='encoder_convolutions'),
EncoderRNN(is_training, size=hp.encoder_lstm_units,
zoneout=hp.tacotron_zoneout_rate, scope='encoder_LSTM'))

        self.encoder_outputs = encoder_cell(embedded_inputs, input_lengths)

        #For shape visualization purpose
        self.enc_conv_output_shape = encoder_cell.conv_output_shape

        #Decoder Parts
        #Attention Decoder Prenet
        prenet = Prenet(is_training, layers_sizes=hp.prenet_layers, drop_rate=hp.tacotron_dropout_rate, scope='decoder_prenet')
        #Attention Mechanism

        attention_mechanism = ForwardLocationSensitiveAttention(hp.attention_dim, self.encoder_outputs, 
                            hparams=hp, is_training=is_training or is_evaluating, memory_sequence_length=input_lengths, 
                            smoothing=hp.smoothing)
        `

关于speaker adaptive的问题

您好,我利用您的代码以及预训练的模型,结合THCHS30数据集里的D8说话人进行说话人的fine-tune.

发现训练fine-tune了2000步(即使是我后来训练到了接近5k个step)(batch_size=32)之后loss基本维持在0.8左右不动了,远远没达到您在别的issue里面说的在2000步左右就达到了0.49的loss。

与之对应的现象是:
利用fine-tune之后的模型生成短句子(比如:“你今天晚饭吃什么。”)都很正常,音色也是D8说话人的音色,但是句子稍微长一点(比如:“你今天晚饭吃什么,我吃了一整只炸鸡。”)就只有前几秒有合成的语音(只合成出 “你今天晚饭” 这几个字的声音),后几面全是空白。

我的操作是:
1、把symbol.py里的train.txt设置为您提供的train.txt。
2、把feeder.py里的txt设置为D8数据对应的train_1.txt
3、在tacotron_hparams.py里设置tacotron_fine_tuning=True
4、直接运行python tacotron_train.py就可以开启fine-tune训练。

**PS:**对于THCHS30的D8说话人的wav数据集我没有施加额外的预处理,我完全是按照您的步骤来tacotron_preprocess的。

然后就出现了上述的现象,我看您提供fine-tune之后的D8说话人的demo的语音长度有10来秒,质量也很不错,按理来说我fine-tune训练出来的模型对长句子应该也是好使的呀....

这是从206500 steps训练到210800 steps的align图:
step-210800-align

下图是长句子生成的align和Mel 频谱(句子:国内最知名的弹幕网站,):
step-210800-886f70458fd0cf953d6575fbe177e540-align
step-210800-886f70458fd0cf953d6575fbe177e540-mel-pred

这是w我训练过程中的log:
Terminal_train_log.txt

这种现象看着像是训练没收敛好的原因,但是按理来说我的数据集、预训练模型、代码、参数都保持跟您一致,又不应该出现这种情况。我实在是束手无策了..... : (

还请您帮忙分析一下出现这种现象的可能的原因,非常感谢您!

有关语种的问题

感谢您的开源,我有两个疑问,希望能得到解答。

  1. 目前预训练的model可以读中文和数字。但是数字无法单个读(现在是读数的模式),而且0字无法读出来。
  2. 请问要怎样才能实现中英都可读。譬如:Hey, 你好。而不是只读中文。

关于attention问题

您好!
我看您描述中[由于TacotronV2TacotronV2中采用Location sensitive attention,对长句字的建模能力不好(漏读、重复),尝试了GMM attention、Discrete Graves Attentionissue、Forward attention,能有效地解决对长句的建模能力,加快模型收敛速度。]
我直接执行tacotron_train.py从头训练到230k,结果长句的合成效果很不好,短句ok。所以默认还是Location sensitive attention吗?
想请教下最终您采用哪种attention机制呢?如果我想挨个尝试需要修改哪里呢?谢谢!

关于wavernn preprocess 的语料准备

你好,老大,
我有两个问题:
(1)我的t2的avg_loss 大概在0.44,是否可以进入 wavernn 训练阶段?
(2)运行 preprocess 之前,是否要修改 attention.py 里的“if not self.is_training and False”这行

敬请老大不吝赐教

尝试生成训练数据,运行python tacotron_preprocess.py

本地运行 tacotron_preprocess.py,出现如下错:
concurrent.futures.process.BrokenProcessPool: A child process terminated abruptly, the process pool is not usable anymore
我用的是cpu版的tensorflow,是内存不足导致的还是多进程池导致的,目前不太清楚,望指教!!!

关于使用tacotron2训练过拟合的问题,wavernn调用的问题

首先感谢大佬的贡献,在复现代码的时候碰到如下问题
1, 使用200条数据集替换D8拟合时,按照文档要求调整了haparms.py 中的参数

   fmin = 55, 
   fmax = 7600, 
   trim_silence = True, 
trim_fft_size = 2048, 
trim_hop_size = 512, 
trim_top_db = 18, 
    num_mels = 80, 
num_freq = 401, 
rescale = True, 
rescaling_max = 0.999, #Rescaling value
    use_lws=False, 
silence_threshold=2, 

#Mel spectrogram
n_fft = 1024, #Extra window size is filled with 0 paddings to match this parameter
hop_size = 200, #For 22050Hz, 275 ~= 12.5 ms (0.0125 * sample_rate)
win_size = 800, #For 22050Hz, 1100 ~= 50 ms (If None, win_size = n_fft) (0.05 * sample_rate)
sample_rate = 16000, #22050 Hz (corresponding to ljspeech dataset) (sox --i <filename>)
frame_shift_ms = None, #Can replace hop_size parameter. (Recommended: 12.5)
magnitude_power = 2., #The power of the spectrogram magnitude (1. for energy, 2. for power)

tacotron_hparams.txt

在训练到第200 轮的时候 合成语音可以清晰发音,随着训练轮数增加,loss降低在0.5左右,但是合成的声音不能辨别,请问这块问题出在哪里,应该如何调整

  1. 如何使用wave rnn合成语音呢?
    这边跑了wavernn_gen.py文件,只输出了模型评估,但是没听到合成的语音

希望作者帮忙解答一下,谢谢~

Email : [email protected]

如何加载 gmm attention

老师好,
我尝试加载 gmm attention, 修改了 tacotron_gmm.py , 头部改成如下,但无法运行。请教解决方案。谢谢!

import tensorflow as tf
from tacotron.utils.symbols import symbols
from tacotron.utils.infolog import log
from tacotron.models.helpers import TacoTrainingHelper, TacoTestHelper
from tacotron.models.modules import *
from tensorflow.contrib.seq2seq import dynamic_decode
from tacotron.models.Architecture_wrappers_gmm import TacotronEncoderCell, TacotronDecoderCell
from tacotron.models.custom_decoder import CustomDecoder
from tacotron.models.gmm_attention import GMMAttention

=====================================================

Traceback (most recent call last):
File "tacotron_train.py", line 66, in
main()
File "tacotron_train.py", line 63, in main
train(args, log_dir, hparams)
File "tacotron_train.py", line 33, in train
tacotron_train(args, log_dir, hparams)
File "/home/tts/lturing/tacotron/train.py", line 238, in tacotron_train
return train(log_dir, args, hparams)
File "/home/tts/lturing/tacotron/train.py", line 109, in train
model, stats = model_train_mode(args, feeder, hparams, global_step)
File "/home/tts/lturing/tacotron/train.py", line 73, in model_train_mode
is_training=True)
File "/home/tts/lturing/tacotron/models/tacotron_gmm.py", line 102, in initialize
swap_memory=hp.tacotron_swap_with_cpu)
File "/usr/local/lib/python3.7/site-packages/tensorflow/contrib/seq2seq/python/ops/decoder.py", line 455, in dynamic_decode
swap_memory=swap_memory)
File "/usr/local/lib/python3.7/site-packages/tensorflow/python/ops/control_flow_ops.py", line 3501, in while_loop
return_same_structure)
File "/usr/local/lib/python3.7/site-packages/tensorflow/python/ops/control_flow_ops.py", line 3012, in BuildLoop
pred, body, original_loop_vars, loop_vars, shape_invariants)
File "/usr/local/lib/python3.7/site-packages/tensorflow/python/ops/control_flow_ops.py", line 2937, in _BuildLoop
body_result = body(*packed_vars_for_body)
File "/usr/local/lib/python3.7/site-packages/tensorflow/contrib/seq2seq/python/ops/decoder.py", line 398, in body
decoder_finished) = decoder.step(time, inputs, state)
File "/home/tts/lturing/tacotron/models/custom_decoder.py", line 132, in step
prev_max_attentions=cell_state.max_attentions)
AttributeError: 'TacotronDecoderCellState' object has no attribute 'max_attentions'
ERROR:tensorflow:==================================
Object was never used (type <class 'tensorflow.python.ops.tensor_array_ops.TensorArray'>):
<tensorflow.python.ops.tensor_array_ops.TensorArray object at 0x7fa1e86055d0>
If you want to mark it as used call its "mark_used()" method.
It was originally created here:
.............

err, "a mismatch between the current graph and the graph")

您好,我想restore您预训练的tacotron 模型进行finetune,但是报了这个错误:

err, "a mismatch between the current graph and the graph")
tensorflow.python.framework.errors_impl.InvalidArgumentError: Restoring from checkpoint failed. This is most likely due to a mismatch between the current graph and the graph from the checkpoint. Please ensure that you have not altered the graph expected based on the checkpoint. Original error:

2 root error(s) found.
(0) Invalid argument: Assign requires shapes of both tensors to match. lhs shape= [172,128] rhs shape= [191,128]
[[node save/Assign_42 (defined at /home/pxdevice/xue/Tacotron2/tacotron/train.py:129) ]]
[[save/RestoreV2/_68]]
(1) Invalid argument: Assign requires shapes of both tensors to match. lhs shape= [172,128] rhs shape= [191,128]
[[node save/Assign_42 (defined at /home/pxdevice/xue/Tacotron2/tacotron/train.py:129) ]]
0 successful operations.
0 derived errors ignored.

提示graph不匹配,是不是意味着我得自己从头训练自己的模型?还是我有哪些细节没注意修改过来?我对tensorflow不是很熟悉,还希望您帮忙解答一下,非常感谢您!

gmm_attention

  • 我对您代码中gmm_attention非常感兴趣,在调用代码中出现一些问题,您能给我一下指导么?具体traceback如下
    image

推理多路并发

请问一下,用了tensorflow serving 部署模型比不用快了多少,能够支持多少路并发,有这方面的实验数据吗?

生成的音频内容重复

作者您好,我是头一次接触音频方面的东西。就直接下载的您的完整代码仓库,用tacotron_model.ckpt-206500这个模型生成语音,如果文本长一点就会重复,例如“华为积极开展与产业界,开发者,学术界,产业标准组织的密切合作..........”,也就是您demo里的文本,生成的语音听起来是这样的"华为为为为为积极极极极极........."这样子,请问这是为什么呢?

关于w小样本speaker_adapter训练和wavernn生成的问题

作者你好,我有两个问题想要咨询一下:
1.我尝试用某个人的音频,finetune了tacotron2模型。训完模型以后,尝试生成这个人音色的音频,但是,即使是短语句基于griffin_lim生成的音频都有10多分钟,开头几秒会有合成的声音,后面基本就是噪音。这是为什么呢?
2.用wavernn合成音频的时候,速度很慢,而且经常报显存不足的错误,这块有什么参数可以调整的么?

关于attention

你好,请问关于Forward attention,Discretized Graves attention的改进有相关的论文或者介绍吗?

如何加快合成速度?

作者您好,我用的是您的tacotron_model.ckpt-206500模型。例如在本机执行python tacotron_synthesize.py --text '现在是凌晨零点二十七分。'需要4-5秒钟的时间,请问有什么方法可以加快语音合成的速度呢?谢谢!

关于音色和语速

作者大大,想问一下,为什么模型得到的音频文件听起来,无论是音色还是语速(情感)和标贝数据集的听起来差异那么大呢?比较不自然,有什么可改进的方法吗?还有怎么样可以增加标点符号之间的停顿间隔呢,现在听起来有些急促。抱歉一下子向您问了这么多可能会很蠢的问题,实在是不太懂。

不能用多GPU并行训练

作者你好!最近在学习你的项目,碰到训练时的问题:不能用多GPU并行训练
参数设置如下:

  • tacotron_hparams.py
    tacotron_num_gpus = 3, #Determines the number of gpus in use for Tacotron training.
  • tacotron_train.py
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0,2,3"
  • 运行代码时候,也有指定GPU,使用export CUDA_VISIBLE_DEVICES=0,2,3
  • 运行的状态如下,使用了0号GPU,另外两个有开启但是没有导入数据训练。
  • wg6PwF.png
  • 想问问作者你有没有碰到这样这样的问题,如果有的话是怎么解决的?以及能否跟你要一份的你的环境配置(tf-gpu,cuda驱动版本以及cudatoolkit版本),谢谢作者!

潜在的bug

如果输入的文字没有标点符号结尾,那么生成的pred_mel.shape就会恒等于(40000, 80),最后导致程序一直卡在wav合成的这一步

分享一下音色finetune的结果

用朋友的声音录制了前100句标贝文本,然后在此数据上finetune train了 50epoch(基于标贝训练好的basemodel),耗时几分钟。这个是结果:
finetune_examples.zip
其中一个听起来好像还可以?
另一个我自己的声音录制finetune的有点糟糕,
语速没掌控好,以及还会导致发音错误,应该也是我录制的时候发音不准以及语速不均匀导致的?
以及100句是多了还是少了。如果要严格限制语速及发音,自然应该越少越好(如10句),这样才能保证自行录制的音频去训练不太影响basemodel本就已经学好了的发音。


思考:
这种finetune的方法是不是存在不合理性?因为要求录制要语速节奏均匀以及发音标准,否则会影响model的发音。
应该是学多了,只想它学音色而不学习音素的发音。

ValueError: None values not supported.

作者大大,我在将attention换成GMMattention的时候总是会出现ValueError: None values not supported.的错误,我在报错的位置附近添加if hp.predict_linear:或if not hp.predict_linear:错误就莫名其妙消失了,但最后又出现了
Exiting due to exception: Restoring from checkpoint failed. This is most likely due to a Variable name or other graph key that is missing from the checkpoint. Please ensure that you have not altered
2 root error(s) found.
(0) Not found: Key Tacotron_model/optimizer/Tacotron_model/inference/CBHG_postnet/CBHG_postnet_highwaynet_1/H/kernel/Adam not found in checkpoint
[[node save/RestoreV2 (defined at \tacotronv2_wavernn_muke_nan_gmm\tacotron\train.py:128) ]]
[[save/RestoreV2/_519]]
(1) Not found: Key Tacotron_model/optimizer/Tacotron_model/inference/CBHG_postnet/CBHG_postnet_highwaynet_1/H/kernel/Adam not found in checkpoint
[[node save/RestoreV2 (defined at \tacotronv2_wavernn_muke_nan_gmm\tacotron\train.py:128) ]]
0 successful operations.
0 derived errors ignored.
我想问下,是我之前的改动导致这个错误么?而且ValueError: None values not supported.这个报错是在计算loss和optimizer中的gradients时候出现的,为啥添加if hp.predict_linear:错误就会消失呢?

不好意思,向您问了这么多问题,刚开始学习语音合成,不是很懂

关于GMM attention

你好,我想问下
image

这几步实现了么?在现有代码上修改为GMM attention需要做哪些改动啊?

forward attention question?

forward attention训练的时候多少步对齐图效果就比较好了,我下面这样是正常的吗?
image

请教一下,对wavernn微调结果存在杂音

您好,我用THCHS-30中D8的男声,照着您给出的adaptive分支finetune,2500step的时候loss大概0.48,用griffin lim算法合成的语音和您给出的demo效果差不多:
接着我用finetune的TacotronV2处理D8数据,加载Wavernn pretrained model对Wavernn finetune,从预训练模型的617k跑到625k,loss从3.5降至2.5,合成的语音有很大杂音:
参数我只把wavernn_hparams.py的fmin = 95改成55,其他没动。
会是哪些参数我没弄对吗?loss只到2.5也不对吧至少不得1以下。。。求指导!谢谢谢谢!

咨询Tensorflow Serving 的pb模型

作者你好!最近在学习你的项目。有两个疑问得麻烦咨询下你:1、是否需要将训练好的tacotron模型转换成Tensorflow Serving 的pb模型,如果要转换的时候,是否有相应的脚本?2、方便的话能否提供你的.pb模型能够跟我的对比一下。
谢谢作者。

关于GMM attention训练请教

楼主你好,我参考你的gmm实现,然后在训练的过程中发现,loss曲线波动比较大,波动前后alignment对齐就没有了,训练不太稳定,请问有什么好的建议吗?

image
image

讨论输入输出的text label会引发的声调错误

果不其然,老哥你的train.txt和我一样存在脏数据:

audio-000054.npy|mel-000054.npy|92400|336|与女演员拍吻戏,陈小春不怕应采儿吃醋。|y u3 n v3 y an3 y uan2 p ai1 w en3 x i4 , ch en2 x iao3 ch un1 b u4 p a4 y ing1 c ai3 er2 ch i1 c u4 。

其中“”和“应”声调都错误了,应这里没多大关系,使用场景比较小。但是b u4,这个影响多了一点,不怕的不应该发第二声。随后你会发现所有的bu4后面只要接到字是第四声,那都会导致bu4这个音发音错误(举例:步数和部队)

现在任何开源的工具都没法确保转的拼音是100%正确的,pypinyin, g2pM, g2pC以及老哥这里采用的查字典的方式。

我想的解决办法是,还是用标贝人工校正过的拼音去train,但是标贝把33连音处理成了23。emmm...这样的话在模型训练好后,有33连音也得处理成23。苦恼...

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.