VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)是一种语音合成方法,它使用预先训练好的语音编码器 (vocoder声码器) 将文本转化为语音。
VITS 的工作流程如下:
(1)将文本输入 VITS 系统,系统会将文本转化为发音规则。
(2)将发音规则输入预先训练好的语音编码器 (vocoder),vocoder 会根据发音规则生成语音信号的特征表示。
(3)将语音信号的特征表示输入预先训练好的语音合成模型,语音合成模型会根据特征表示生成合成语音。
VITS 的优点是生成的语音质量较高,能够生成流畅的语音。但是,VITS 的缺点是需要大量的训练语料来训练 vocoder 和语音合成模型,同时需要较复杂的训练流程。
论文链接:论文地址
VITS-fast-fine-tuning是在原始VITS(VITS源码)基础上开发出的一站式多speaker训练的傻瓜式版本,简单易用,可以基于VITS-fast-fine-tuning半小时内无需标注训练任意角色的语音,并提供了基础的预训练模型,可以在预训练模型上进行二次训练,实现任意角色的语音生成。
代码地址如下:VITS-fast-fine-tuning源码
训练步骤如下:
(1)准备预训练数据,按照制定格式和路径进行存放,数据无需标注
(2)对数据进行预处理,采用whisper模型进行语音提取和切分,形成标注数据。
whisper的内容详见:whisper
(3)使用提出的带标注的数据进行语音合成训练
conda环境准备详见:annoconda
conda create -n vits python=3.9
activate vits
pip install imageio==2.4.1
pip install --upgrade youtube-dl
pip install moviepy
cd VITS-fast-fine-tuning
pip install -r requirements.txt
mkdir monotonic_align
python setup.py build_ext --inplace
cd ..
mkdir pretrained_models
mkdir video_data
mkdir raw_audio
mkdir denoised_audio
mkdir custom_character_voice
mkdir segmented_character_voice
数据下载地址:数据集合包
下载完成后:
注意,如果使用其他文件,命名规则如下:
视频:./video_data/
长音频:./raw_audio/
短音频:./custom_character_voice/
1.其中短音频的格式是:
├───aaa
├ ├───xxx.wav
├ ├───...
├ └───zzz.wav
├───bbb
├ ├───xxx.wav
├ ├───...
├ └───zzz.wav
├───...
├
└───Character_name_n
├───xxx.wav
├───...
└───zzz.wav
质量要求:2秒以上,10秒以内,尽量不要有背景噪音。
数量要求:一个角色至少10条,最好每个角色20条以上。
2.以角色名命名的长音频文件,音频内只能有单说话人,背景音会被自动去除。
命名格式为:{角色名}_{数字}.wav
同一个角色可以放多个音频,数字不同
(例如:aaa_001.wav, bbb_001.wav),必须是.wav文件。
3.以角色名命名的长视频文件,视频内只能有单说话人,背景音会被自动去除。
命名格式为:{角色名称}_{数字}.mp4
(例如:aaa_332452.mp4, bbb_957315.mp4),必须是.mp4文件。
python video2audio.py
python denoise_audio.py
python long_audio_transcribe.py --languages "CJE" --whisper_size medium
python short_audio_transcribe.py --languages "CJE" --whisper_size medium
python preprocess_v2.py
参数--add_auxiliary_data选择:
如果总样本少于100条时增加,即最后一行改为如下命令执行:
python preprocess_v2.py --add_auxiliary_data True
为保证模型可以二次训练,修改 finetune_speaker_v2.py文件中的代码
utils.save_checkpoint(net_g, None, hps.train.learning_rate, epoch, os.path.join(hps.model_dir, "G_{}.pth".format(global_step)))
utils.save_checkpoint(net_g, None, hps.train.learning_rate, epoch,
os.path.join(hps.model_dir, "G_latest.pth".format(global_step)))
在保存推理模型的同时,保存判别模型。
启动训练命令如下:
python finetune_speaker_v2.py -m "./OUTPUT_MODEL" --max_epochs "300"
其中参数300为训练300个epochs,可以根据实际情况调整,一般建议200以上
将VC_inference.py文件中的
parser.add_argument("--model_dir", default="./OUTPUT_MODEL/G_latest.pth", help="directory to your fine-tuned model")
改为(如训练300个epochs):
parser.add_argument("--model_dir", default="./OUTPUT_MODEL/G_300.pth", help="directory to your fine-tuned model")
运行启动命令:
python VC_inference.py
启动的语音生成界面如下:
输入文字点击generate即可体验语音生成效果