Plachtaa / VITS-fast-fine-tuning

This repo is a pipeline of VITS finetuning for fast speaker adaptation TTS, and many-to-many voice conversion
Apache License 2.0
4.69k stars 703 forks source link

解决CJE下的中文大佐音问题 #501

Open shirubei opened 10 months ago

shirubei commented 10 months ago

问题:同样的数据,在C模型下可以说是100分,而在CJE下训练出来的中文,就像日本人捏着嗓子说出蹩脚的中文的感觉。 也有其他网友提了类似的问题。 Windows下,按照https://github.com/Plachtaa/VITS-fast-fine-tuning/blob/main/LOCAL.md 的说明,只是跳过了 add auxiliary data 这一步,使用C模型的话,生成的语音感觉质量非常高,差不多可以打100分。 而同样的语音数据,用CJE模型,还是一样的操作步骤,最终得到的中文语音,就像日本人捏着嗓子说出蹩脚的中文的感觉。 所以怀疑,是不是CJE模型本身有问题,或者说是使用CJE模型时处理上有问题(有个网友说CJE模型采用罗马字注音,C模型采用的时汉语注音导致的)?

追记: 看到 #428 网友 @AnyaCoder 的说明,重新来过一遍,果然用CJE的训练出来很不错的声音了。用的标贝的那些语音文件,1个epoch做完直接验证就已经很不错了。感谢!

关键在于,每跑一步之前都确认一下.py程序里面的用的是不是CJE模型里面的那个finetune_speaker.json/modified_fine_tune_speaker.json,没有问题的话最后应该就可以了。 估计是训练的时候读取的配置文件乱了(比如,CJE模型,用到却是纯中文C的配置文件或者反过来)导致了大佐音。

追记2(总结了一下本贴中几个来回讨论的结果):

以下这几步都是统一用的configs/finetune_speaker.json python scripts/denoise_audio.py python scripts/long_audio_transcribe.py python scripts/short_audio_transcribe.py python scripts/resample.py python preprocess_v2.py

最后的preprocess_v2.py,它还根据configs/fine_tune_speaker.json 生成了configs/modified_fine_tune_speaker.json

finetune_speaker_v2.py(通过util.py读取配置文件) VC_inference.py 这2个都是从configs/modified_fine_tune_speaker.json里读取设置参数

至于怎么判断CJE模型和C模型的配置文件对不对,具体可以从以下2点来判断应该比较快(当然它们的差异不止这2处,比如sampling_rate等) 1 C模型配置文件中的 text_cleaners 应该为 chinese_cleaners CJE模型配置文件中的 text_cleaners 应该为 cjke_cleaners2 2 C模型配置文件中的"symbols" 不包含 "a", "b", "c","d" CJE模型配置文件中的"symbols" 包含 "a", "b", "c","d"

保证了这些应该就能得到比较满意的模型了。

shirubei commented 10 months ago

307

shirubei commented 10 months ago

274

shirubei commented 9 months ago

444

shirubei commented 9 months ago

428

zachx121 commented 9 months ago

"几处代码里面那些取配置文件的地方前后不一致" 请问这个方便给几个示例吗?什么地方有这个问题?感谢!

shirubei commented 9 months ago

"几处代码里面那些取配置文件的地方前后不一致" 请问这个方便给几个示例吗?什么地方有这个问题?感谢!

具体说,就是我发现那几个程序去找的配置文件名不全一样,比如,有的是看config.json,有的是看finetune_speaker.json,或者它们用的配置文件在不同的目录下。这样就可能导致问题的发生。我就是通过统一那几个程序所使用的配置文件,从而把问题解决了的。

lvsh2012 commented 9 months ago

"几处代码里面那些取配置文件的地方前后不一致" 请问这个方便给几个示例吗?什么地方有这个问题?感谢!

具体说,就是我发现那几个程序去找的配置文件名不全一样,比如,有的是看config.json,有的是看finetune_speaker.json,或者它们用的配置文件在不同的目录下。这样就可能导致问题的发生。我就是通过统一那几个程序所使用的配置文件,从而把问题解决了的。

大佬,你方便把改过的配置重新发一下吗,我看了preprocess_v2.py 和 scripts/short_audio_transcribe.py 貌似没问题。我用纯C底模 运行 python preprocess_v2.py --languages C 之后,发现 final_annotation_train.txt 的标注是如下这样的,不知道是否有问题

./custom_character_voice/guan/processed_8.wav|2|ㄇㄡˇㄒㄧㄥˋ ㄍㄨㄢˉㄇㄧㄥˊ ㄩˇ ㄗˋㄩㄣˊㄓㄤˇ ㄏㄜˊㄉㄨㄥˉ ㄒㄧㄝˋ ㄌㄧㄤˊㄖㄣˊ。 ./custom_character_voice/guan/processed_9.wav|2|ㄇㄡˇㄕˋ ㄩˇ ㄒㄩㄥˉ ㄏㄨㄢˋㄋㄢˋㄩˇㄍㄨㄥˋ ㄓㄨㄥˉㄕㄣˉ ㄒㄧㄤˉㄅㄢˋ。 ./custom_character_voice/guan/processed_10.wav|2|ㄍㄨㄢˋㄇㄡˇ ㄙㄨㄟˋ ㄧˉㄐㄧㄝˋㄨˇㄈㄨˉ ㄧˇ ㄆㄛˇ ㄓˉ ㄓㄨㄥˉㄧˋ ㄦˊ ㄗˋㄓㄥˋ ㄙㄨㄛˇㄨㄟˋ ㄗㄜˊㄇㄨˋㄓˉㄑㄧㄣˉ ㄉㄜˊ ㄑㄧˊㄌㄧㄤˊ ㄇㄨˋㄗㄜˊ ㄓㄨˇㄓˉㄔㄣˊ ㄉㄜˊ ㄩˇ ㄇㄧㄥˊㄓㄨˇㄍㄨㄢˋ ㄇㄡˇ ㄆㄧㄥˊㄕㄥˉㄓˉㄩㄢˋ ㄗㄨˊㄧˇ ㄘㄨㄥˊㄐㄧㄣˉㄨㄤˇㄏㄡˋ ㄍㄨㄢˋㄇㄡˇ ㄓˉㄇㄧㄥˋ ㄐㄧˋ ㄕˋ ㄌㄧㄡˊㄒㄩㄥˉ ㄓˉㄇㄧㄥˋㄍㄨㄢˋ ㄇㄡˇ ㄓˉㄑㄩˉ ㄐㄧˋㄨㄟˋ ㄌㄧㄡˊㄒㄩㄥˉ ㄓˉㄑㄩˉ ㄉㄢˋ ㄆㄧㄥˊ ㄑㄩˉㄕˇ ㄐㄩㄝˊㄨˊ ㄦˋㄒㄧㄣˋ。 ./custom_character_voice/guan/processed_11.wav|2|ㄍㄨㄢˉㄇㄡˇ ㄗㄞˋ ㄌㄠˇㄐㄧㄚˉ ㄒㄧㄝˋㄌㄧㄤˊ ㄧㄣˉ ㄎㄢˋㄅㄨˋㄍㄨㄢˋ ㄏㄠˊㄑㄧㄤˊ ㄑㄧˉㄧㄚˉ ㄒㄧㄤˉㄌㄧˇ ㄅㄞˇㄒㄧㄥˋ ㄧˊㄋㄨˋㄓˉㄒㄧㄚˋ ㄕㄚˉ ㄌㄜ˙ ㄋㄚˋ ㄙˇ。 ./custom_character_voice/guan/processed_12.wav|2|ㄨㄤˊㄇㄧㄥˋ ㄐㄧㄤˉㄏㄨˊ ㄓˋㄐㄧㄣˉㄧˇㄧㄡˇ ㄨˇㄌㄧㄡˋㄋㄧㄢˊ ㄌㄜ˙ ㄒㄧㄤˇ ㄨㄛˇ ㄍㄨㄢˉ ㄇㄡˇㄎㄨㄥˉ ㄧㄡˇ ㄧˉㄕㄣˉ ㄅㄣˇㄌㄧㄥˇ ㄑㄩㄝˋ ㄓˇㄋㄥˊ ㄌㄨㄛˋㄉㄠˋ ㄊㄧㄢˉㄧㄚˊ ㄆㄧㄠˉㄅㄛˊ。

shirubei commented 9 months ago

"几处代码里面那些取配置文件的地方前后不一致" 请问这个方便给几个示例吗?什么地方有这个问题?感谢!

具体说,就是我发现那几个程序去找的配置文件名不全一样,比如,有的是看config.json,有的是看finetune_speaker.json,或者它们用的配置文件在不同的目录下。这样就可能导致问题的发生。我就是通过统一那几个程序所使用的配置文件,从而把问题解决了的。

大佬,你方便把改过的配置重新发一下吗,我看了preprocess_v2.py 和 scripts/short_audio_transcribe.py 貌似没问题。我用纯C底模 运行 python preprocess_v2.py --languages C 之后,发现 final_annotation_train.txt 的标注是如下这样的,不知道是否有问题

./custom_character_voice/guan/processed_8.wav|2|ㄇㄡˇㄒㄧㄥˋ ㄍㄨㄢˉㄇㄧㄥˊ ㄩˇ ㄗˋㄩㄣˊㄓㄤˇ ㄏㄜˊㄉㄨㄥˉ ㄒㄧㄝˋ ㄌㄧㄤˊㄖㄣˊ。 ./custom_character_voice/guan/processed_9.wav|2|ㄇㄡˇㄕˋ ㄩˇ ㄒㄩㄥˉ ㄏㄨㄢˋㄋㄢˋㄩˇㄍㄨㄥˋ ㄓㄨㄥˉㄕㄣˉ ㄒㄧㄤˉㄅㄢˋ。 ./custom_character_voice/guan/processed_10.wav|2|ㄍㄨㄢˋㄇㄡˇ ㄙㄨㄟˋ ㄧˉㄐㄧㄝˋㄨˇㄈㄨˉ ㄧˇ ㄆㄛˇ ㄓˉ ㄓㄨㄥˉㄧˋ ㄦˊ ㄗˋㄓㄥˋ ㄙㄨㄛˇㄨㄟˋ ㄗㄜˊㄇㄨˋㄓˉㄑㄧㄣˉ ㄉㄜˊ ㄑㄧˊㄌㄧㄤˊ ㄇㄨˋㄗㄜˊ ㄓㄨˇㄓˉㄔㄣˊ ㄉㄜˊ ㄩˇ ㄇㄧㄥˊㄓㄨˇㄍㄨㄢˋ ㄇㄡˇ ㄆㄧㄥˊㄕㄥˉㄓˉㄩㄢˋ ㄗㄨˊㄧˇ ㄘㄨㄥˊㄐㄧㄣˉㄨㄤˇㄏㄡˋ ㄍㄨㄢˋㄇㄡˇ ㄓˉㄇㄧㄥˋ ㄐㄧˋ ㄕˋ ㄌㄧㄡˊㄒㄩㄥˉ ㄓˉㄇㄧㄥˋㄍㄨㄢˋ ㄇㄡˇ ㄓˉㄑㄩˉ ㄐㄧˋㄨㄟˋ ㄌㄧㄡˊㄒㄩㄥˉ ㄓˉㄑㄩˉ ㄉㄢˋ ㄆㄧㄥˊ ㄑㄩˉㄕˇ ㄐㄩㄝˊㄨˊ ㄦˋㄒㄧㄣˋ。 ./custom_character_voice/guan/processed_11.wav|2|ㄍㄨㄢˉㄇㄡˇ ㄗㄞˋ ㄌㄠˇㄐㄧㄚˉ ㄒㄧㄝˋㄌㄧㄤˊ ㄧㄣˉ ㄎㄢˋㄅㄨˋㄍㄨㄢˋ ㄏㄠˊㄑㄧㄤˊ ㄑㄧˉㄧㄚˉ ㄒㄧㄤˉㄌㄧˇ ㄅㄞˇㄒㄧㄥˋ ㄧˊㄋㄨˋㄓˉㄒㄧㄚˋ ㄕㄚˉ ㄌㄜ˙ ㄋㄚˋ ㄙˇ。 ./custom_character_voice/guan/processed_12.wav|2|ㄨㄤˊㄇㄧㄥˋ ㄐㄧㄤˉㄏㄨˊ ㄓˋㄐㄧㄣˉㄧˇㄧㄡˇ ㄨˇㄌㄧㄡˋㄋㄧㄢˊ ㄌㄜ˙ ㄒㄧㄤˇ ㄨㄛˇ ㄍㄨㄢˉ ㄇㄡˇㄎㄨㄥˉ ㄧㄡˇ ㄧˉㄕㄣˉ ㄅㄣˇㄌㄧㄥˇ ㄑㄩㄝˋ ㄓˇㄋㄥˊ ㄌㄨㄛˋㄉㄠˋ ㄊㄧㄢˉㄧㄚˊ ㄆㄧㄠˉㄅㄛˊ。

用C模型的话,这个应该是没有问题啊。它采用的是中文注音的方式。 如果是CJE的话,用的标注方式是另外的一种,像下面这样的 ./custom_character_voice/STD/processed_118.wav|1|p⁼iŋ↓↑ts⁼ə↑ iɛ↓↑ xweɪ↑ wən↓↑ t⁼a↓ mɑŋ↓↑sə↑.

lvsh2012 commented 9 months ago

我复现了你的操作,纯C,跳过辅助数据,但是生成还是有大佐的调调

530

tom20180101 commented 9 months ago

@shirubei ,能贴出来你修改的地方吗? 看了下每一步的py文件,貌似没啥需要修改的呀,thanks

shirubei commented 9 months ago

就是在所有执行到的py文件里头查找那个.json文件,把它改成统一指向某个地方的就行啊

lvsh2012 commented 9 months ago

我检查了以下几个文件:

音频处理的,都是统一的configs/finetune_speaker.json

python scripts/denoise_audio.py python scripts/long_audio_transcribe.py python scripts/short_audio_transcribe.py python scripts/resample.py

数据预处理的,也是 configs/finetune_speaker.json

python preprocess_v2.py

训练py的里面没有

推理VC_inference.py 是手动传的。 项目里面还有其他 和 finetune_speaker.json 一样的配置文件吗,没有找到啊

@shirubei @tom20180101

shirubei commented 9 months ago

我检查了以下几个文件:

音频处理的,都是统一的configs/finetune_speaker.json

python scripts/denoise_audio.py python scripts/long_audio_transcribe.py python scripts/short_audio_transcribe.py python scripts/resample.py

数据预处理的,也是 configs/finetune_speaker.json

python preprocess_v2.py

训练py的里面没有

推理VC_inference.py 是手动传的。 项目里面还有其他 和 finetune_speaker.json 一样的配置文件吗,没有找到啊

@shirubei @tom20180101

我之前说的有些问题。以下面的为准。

你上面这个是对的,补充一下,就是preprocess_v2.py,它还根据fine_tune_speaker.json 生成了modified_fine_tune_speaker.json 后续的 finetune_speaker_v2.py(通过util.py获得配置参数)和 最后的推理 VC_inference.py 也是从modified_fine_tune_speaker.json里读取的设置参数

主要是得怎么判断CJE模型和C模型的配置文件对不对,CJE和C模型的配置文件finetune_speaker.json是不一样的。

具体可以从以下2点来判断应该比较快(当然它们的差异不止这2处,比如sampling_rate等) 1 C模型配置文件中的 text_cleaners 应该为 chinese_cleaners CJE模型配置文件中的 text_cleaners 应该为 cjke_cleaners2 2 C模型配置文件中的"symbols" 不包含 "a", "b", "c","d" CJE模型配置文件中的"symbols" 包含 "a", "b", "c","d"

保证了这些应该就能得到比较满意的模型了。