lturing/tacotronv2_wavernn_chinese

分享一下音色finetune的结果

leijue222 opened this issue · 3 comments

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


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

你finetune时,有对比 固定和不固定tacotron中encoder的参数的差异?(感觉固定这部分参数,应该就不影响发音)
除了标贝数据集外,可以再加其它的数据集,训练一个多说话人的basemodel(感觉这样能达到解耦合)。然后,再finetune。
录的时候,最好保持语速均匀。

你finetune时,有对比 固定和不固定tacotron中encoder的参数的差异?(感觉固定这部分参数,应该就不影响发音)

试了一下,固定encoder的参数后,训练结果会更糟糕。

除了标贝数据集外,可以再加其它的数据集,训练一个多说话人的basemodel(感觉这样能达到解耦合)。然后,再finetune。
录的时候,最好保持语速均匀。

我的basemodel是一男一女两个人,100句的数据可能偏少了,1000句效果会更好点。
但是录制1000句的数据有点灾难。我录制100句花了30~60分钟。1000句至少两天了,而且缺少录音棚和专业设备,以及专业的发音和语速控制。


所以我今天又想另一个方法:voice clone或者voice conversion。但这种方法目前好像都是用某个数据集训练一个模型发A的声音。然后不管输入B还是C,都转成A的声音,这样的一个使用场景。

这个场景跟我有点相悖了,我是想把训练好的TTS都音色换成任意一个路人的音色(仅需极少量的数据)。

你finetune时固定encoder,是下面这种?(固定embedding + encoder)
encoder_outputs = self.encoder(embedded_inputs, text_lengths)
encoder_outputs = encoder_outputs.detach()