当前位置:   article > 正文

AI数字人:基于VITS模型的中文语音生成训练

vits

1 VITS模型介绍

        VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)是一种结合变分推理(variational inference)、标准化流(normalizing flows)和对抗训练的高表现力语音合成模型。

        VITS模型是韩国科学院在2021年6月提出的,VITS通过隐变量而非频谱串联起来语音合成中的声学模型和声码器,在隐变量上进行随机建模并利用随机时长预测器,提高了合成语音的多样性,输入同样的文本,能够合成不同声调和韵律的语音。

        论文地址:VITS论文

2 VITS模型结构

2.1 总体结构

  • 先验编码器:TextEncoder由多层的transformer encoder组成,预测的结果输出均值与方差。

  • 后验编码器:由conv1d+WN网络组成+conv1d组成。输出得到均值与方差,并且使用FLOW得到复杂分布z_p。通过flow后的复杂分布z_p与先验编码器后的分布进行对MAS对齐估计。得到attn硬对齐矩阵。

  • MAS对齐估计:通过mas(monotonic align search)硬对齐算法,将文本feature和序列帧feature进行一个硬对齐,拿到对齐矩阵Attn。MAS使用DP算法,假设一个文本feature其对应的帧序列符合一个高斯分布,通过DP算法做优化,计算出文本和序列的最优对齐矩阵。

  • 解码器:实际就是声码器HiFi-GAN V1的生成器。应用于多人模型时,在说话人嵌入向量之后添加一个线性层,拼接到f_{\theta }的输出隐变量z

  • 判别器:增加了一个HiFi-GAN的多周期判别器,仅在训练的时候才起作用,用于对抗generator的训练。

2.2 VITS的好处及问题

  • VAE 擅长捕捉句子整体的韵律特征,而Flow擅长重建音频的细节特征;将两者整合,进行多任务训练,实现参数与优势共享。

  • VITS 直接合成音频,实现真正意义的端到端语音合成,而不是two-stage阶段的序列到序列的合成;从而消除两个模型带来的Gap。

  • 传统两个模型的TTS系统,GAN 训练通常只应用与声码器,而VITS 中的 GAN 训练是全局的、对每个模块都有效。

  • vits虽然通过sdp解决了one-to-many的问题,但是从合成结果来看,因为对韵律,语调等feature是统一建模的,没有进行拆分细粒度,因此针对英文这种语调丰富的语言,其语调建模的学习的比较平均化,针对风格发音人来说,整体合成效果来看无法得到较好的语调,比较单一,语调较平。

2.3 VITS主要包括3块

  • 条件变分自编码器(Variational AutoEncoder,VAE)

VAE(Variational Autoencoder)是一种深度生成模型,同时也被视为一种自编码器。它的结构包含两部分:编码器和解码器。

编码器的功能是将输入数据转换为一组潜在空间的高维向量。这些潜在向量通常被称为“隐变量”或“latent vectors”。

解码器则是利用编码器产生的潜在向量来重建原始输入数据。这个过程涉及到从潜在空间中采样,以及根据采样到的潜在向量合成新数据。

VAE的核心原理是利用变分推断(variational inference),这是一种统计学方法,旨在找到一个简单且接近真实分布的概率密度函数。在这个框架下,VAE试图学习数据的内在分布,而不是直接优化对数似然函数。这允许VAE在不完全了解数据分布的情况下进行有效的数据生成和学习。

在VAE的训练过程中,首先通过编码器提取输入数据的潜在向量,然后从中生成样本来计算与原始输入的重构误差。这个误差作为损失函数的一部分,通过反向传播算法更新网络权重和偏置,以最小化损失。这样,VAE能够学习到数据的潜在表示,并且在实际应用中表现出良好的泛化能力和性能。

总结来说,VAE的学习目标是在不完美地知道数据分布的情况下,通过学习数据的内在分布来生成新的数据,同时在一定程度上保持原有数据的特性。这种架构不仅适用于图像、声音等传统领域,而且在降维和特征提取方面也表现出了优势。

  • 从变分推断中产生的对齐估计
  • 生成对抗训练

2.4 语音合成里程碑

VITS 语音合成完全端到端TTS的里程碑,主要突破点如下:

  • 首个自然度超过2-stage架构SOTA的完全E2E模型。MOS4.43, 仅低于GT录音0.03。声称目前公开系统最好效果。

  • 得益于图像领域中把Flow引入VAE提升生成效果的研究,成功把Flow-VAE应用到了完全E2E的TTS任务中。

  • 训练非常简便,完全E2E。不需要像Fastspeech系列模型需要额外提pitch, energy等特征,也不像多数2-stage架构需要根据声学模型的输出来finetune声码器以达到最佳效果。

  • 摆脱了预设的声学谱作为链接声学模型和声码器的特征,成功的应用来VAE去E2E的学习隐性表示来链接两个模块

  • 多说话人模型自然度不下降,不像其他模型趋于持平GT录音MOS分

3 使用vits模型进行中文语音合成训练

3.1 github项目下载:

git clone https://github.com/PlayVoice/vits_chinese

3.2 运行环境搭建

annoconda环境搭建详见:annoconda安装与使用

  1. conda create -n vits pyton=3.9
  2. conda activate vits
  3. cd vits_chinese
  4. pip install -r requirements.txt
  5. cd monotonic_align
  6. python setup.py build_ext --inplace

3.3 数据集下载

下载标贝男声数据集,采样频率为22050,下载地址如下:

标贝男声数据集(第一个包)

标贝男声数据集(第二个包)

标贝男声数据集标注数据

下载完成后,将数据集解压缩后放到“vits_chinese/data/waves”目录下,标注数据放到

“vits_chinese/data”目录下

3.4 预训练模型下载

韵律模型下载:韵律模型

下载完成后,移动到“vits_chinese/bert/”目录下

3.5 数据预处理

修改配置文件:vi config/bert_vits.json

  1. "max_wav_value": 32768.0,
  2. "sampling_rate": 22050,
  3. "filter_length": 1024,
python vits_prepare.py -c ./configs/bert_vits.json

3.6 启动训练

python train.py -c configs/bert_vits.json -m bert_vits

3.7 训练后推理

python vits_infer.py --config ./configs/bert_vits.json --model logs/bert_vits/G_700000.pth

其中G_700000.pth为训练后的模型,根据训练实际情况指定训练模型进行推理

 4 训练结果展示

经过1000个epoch训练后的语音生成效果如下:

https://download.csdn.net/download/lsb2002/87832170d

 5 预训练模型

使用标贝男声数据,使用Tasla-v100GPU,经过70万epochs训练后模型,新speaker可以在此模型上二次训练,达到快速收敛的效果。预训练模型下载地址

下载后,将模型存储到/vits_chinese/logs/bert_vits/目录下,启动二次训练

        

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号