TTS | NaturalSpeech2语音合成论文详解及项目实现

---------------------------------- 语音合成 相关系列直达 -------------------------------------

✨NaturalSpeech:正在更新中~

✨NaturalSpeech2:TTS | NaturalSpeech2语音合成论文详解及项目实现

本文主要讲解了微软在2023年4月发表的NaturalSpeech2语音合成论文及项目相关~

论文题目:NaturalSpeech 2: Latent Diffusion Models are Natural and Zero-Shot Speech and Singing Synthesizers

潜在扩散模型是自然和零样本的语音和歌唱合成器

论文地址:[2304.09116] NaturalSpeech 2: Latent Diffusion Models are Natural and Zero-Shot Speech and Singing Synthesizers (arxiv.org)

代码地址:lucidrains/naturalspeech2-pytorch: Implementation of Natural Speech 2, Zero-shot Speech and Singing Synthesizer, in Pytorch (github.com)

1.论文详解

论文摘要

将文本转语音 (TTS) 扩展到大规模、多说话人和野外数据集对于捕获人类语音的多样性非常重要,例如说话者身份、韵律和风格(例如唱歌)。目前大型TTS系统通常将语音量化为离散的标记,并使用语言模型逐个生成这些标记,存在韵律不稳定、单词跳跃/重复问题、语音质量差等问题。在本文中开发了 NaturalSpeech 2,这是一个 TTS 系统,它利用带有残差向量量化器的神经音频编解码器来获得量化的潜在向量,并使用扩散模型来生成这些以文本输入为条件的潜在向量。为了增强实现多样化语音合成的重要零样本能力,论文设计了一种语音提示机制,以促进扩散模型和持续时间/音高预测器中的上下文学习。将 NaturalSpeech 2 扩展到具有 44K 小时语音和歌唱数据的大规模数据集,并评估其在看不见的说话者的语音质量。NaturalSpeech 2 在零样本设置下,在韵律/音色相似性、鲁棒性和语音质量方面大大优于以前的 TTS 系统,并且仅使用语音提示即可执行新颖的零样本歌唱合成。音频示例可在此 https URL 中找到。 

1.1.介绍

传统的文本转语音 (TTS) 模型是在说话人限制数据集和录音室数据集上训练的,由于缺乏数据多样性,无法充分捕捉人类语音中说话人身份、韵律和风格的多样性。该论文建议使用大规模语料库来训练TTS模型来学习这些多样性,这可以使这些模型通过少样本或零样本技术推广到看不见的场景。

目前的大规模TTS系统通常将连续的语音波形量化为离散的标记,然后使用自回归语言模型对这些标记进行建模。这种方法存在一些局限性。首先,语音标记的序列通常很长(10 秒的语音可能有数千个标记),导致自回归模型中的错误传播和不稳定的语音输出。

其次,编解码器和语言模型之间存在权衡。具有令牌量化的编解码器(如 VQ-VAE 或 VQ-GAN)通常会导致低比特率令牌序列。虽然这简化了语言模型的生成,但也导致了高频、细粒度声学细节的丢失。相反,一些方法使用多个残差离散标记来表示语音帧,如果扁平化,这会显着增加标记序列的长度,从而对语言建模构成挑战。

1.2.背景

1.3.NaturalSpeech2

这部分介绍了NaturalSpeech2,一个自然和富有表现力/高鲁棒性的零样本声音合成的从文本到语音的系统。如图1所示

TTS | NaturalSpeech2语音合成论文详解及项目实现_第1张图片

图1:框架图

在 NaturalSpeech 2 中,首先训练神经音频编解码器使用编解码器将语音波形转换为一系列潜在向量,然后使用编解码器从这些潜在向量重建语音波形。训练音频编解码器后,编解码器编码器用于从训练集中的语音中提取潜在向量。然后将这些向量用作潜在扩散模型的目标,该模型以从音素编码器、持续时间预测器和音高预测器获得的先验向量为条件。

在推理过程中,首先使用潜在扩散模型从文本/音素序列生成潜在向量。然后使用编解码器将这些潜在向量转换为语音波形。

NaturalSpeech2包含了一个自然音频codec(一个编码器和解码器)和一个先扩散模型。

1.3.1.具有连续矢量的神经音频编解码器

论文使用一个自然语音编码解码器去转换语音文件为连续性向量去代替离散tokens,

如图2

TTS | NaturalSpeech2语音合成论文详解及项目实现_第2张图片

图2

NaturalSpeech 2 系统使用神经音频编解码器将语音波形转换为连续向量,而不是离散标记。这种方法有几个好处:

  • 与离散令牌相比,连续向量具有更低的压缩率和更高的比特率,从而确保了高质量的音频重建。
  • 每个音频帧只包含一个向量,这与使用多个标记的离散量化不同。这意味着隐藏序列的长度不会增加。

神经音频编解码器由音频编码器、残差矢量量化器 (RVQ) 和音频解码器组成:

  • 音频编码器使用卷积模块,对 16kHz 音频的总下采样率为 200,这意味着每帧对应一个 12.5ms 的语音段。
  • RVQ 将音频编码器的输出转换为多个残差向量。这些向量的总和被用作扩散模型的训练目标。
  • 音频解码器镜像音频编码器的结构,从量化矢量生成音频波形。

在实践中,为了实现正则化和效率,系统使用具有大量量化器和码本标记的残差向量量化器来近似连续向量。这种方法有两个好处:

  • 在潜伏扩散模型的训练过程中,没有必要存储内存成本高昂的连续向量。相反,系统存储用于派生连续向量的码本嵌入和量化令牌 ID。
  • 在预测连续向量时,可以基于这些量化的令牌 ID 在离散分类上添加额外的正则化损失。

 1.3.2.具有非自回归生成的潜在扩散模型

作者使用扩散模型(而不是自回归模型)来预测以文本序列为条件的量化潜在向量。这是通过由音素编码器、持续时间预测器和音高预测器组成的先前模型实现的,以提供信息量更大的隐藏向量。

扩散过程使用随机微分方程 (SDE) 进行描述。正向 SDE 将潜在向量转换为高斯噪声。反向 SDE 将高斯噪声转换回数据。常微分方程 (ODE) 也可以在反向过程中考虑。神经网络用于估计噪声数据的对数密度的分数或梯度。

在该公式中,神经网络基于 WaveNet,它以当前噪声向量、时间步长和条件信息为输入并预测数据。这种方法可以提高语音质量。用于训练扩散模型的损失函数包括数据损失项、分数损失项和基于残差向量量化器 (RVQ) 的交叉熵损失。

先前的模型由音素编码器和持续时间/音高预测器组成。音素编码器具有多个 Transformer 编码器层,经过修改以使用卷积网络。持续时间和音高预测器共享相同的模型结构,但具有不同的模型参数。在训练过程中,使用地面实况持续时间和音高信息作为学习目标。使用真值持续时间从音素编码器中扩展隐藏序列,然后将真值音高信息添加到帧级隐藏序列中,以获得最终的条件信息。在推理过程中,使用相应的预测持续时间和音高。

1.3.3用于上下文学习的语音提示TTS | NaturalSpeech2语音合成论文详解及项目实现_第3张图片

作者设计了一种语音提示机制,以鼓励上下文学习,以改进零样本生成。这种机制促使持续时间/音高预测器和扩散模型遵循语音提示中存在的各种信息,例如说话人身份。

对于给定的语音潜在序列,随机剪出一个片段作为语音提示,而其余片段形成一个新序列,作为扩散模型的学习目标。基于 Transformer 的提示编码器用于处理语音提示并生成隐藏序列。

采用两种不同的策略来利用持续时间/音高预测器和扩散模型的隐藏序列:

对于持续时间和音高预测器,将查询键值 (Q-K-V) 注意力层插入到卷积层中。卷积层的隐藏序列作为查询,键和值来自提示编码器生成的隐藏序列。

对于扩散模型,设计了两个注意力块,而不是直接关注提示编码器的隐藏序列(这可能会揭示过多的细节和影响生成)。在第一个块中,随机初始化的嵌入被用作查询序列,以处理提示隐藏序列,从而生成指定长度的隐藏序列。第二个块使用 WaveNet 层中的隐藏序列作为查询,使用第一个注意力块的结果作为键和值。第二个注意力块的结果用作 FiLM 层的条件信息,该层对扩散模型中 WaveNet 的隐藏序列执行仿射变换。

1.3.4.与 NaturalSpeech 的联系

NaturalSpeech 2 是 NaturalSpeech 系列的增强版本。虽然这两个版本都旨在合成自然声音,但它们的重点不同。NaturalSpeech 1 强调语音质量,主要使用单说话人录音室数据集来生成与人类录音相当的声音。另一方面,NaturalSpeech 2 专注于语音多样性,使用大规模、多说话人和野外数据集探索零样本合成能力。

在架构方面,NaturalSpeech 2 保留了 NaturalSpeech 1 的关键组件,例如用于波形重建的编码器和解码器,以及先前的模块(音素编码器、持续时间/音高预测器)。但是,它引入了上述几个重要的增强功能。

1.4.实验

模型各模块的各项参数

TTS | NaturalSpeech2语音合成论文详解及项目实现_第4张图片

1.4.3.模型训练和推理

NaturalSpeech 2 的音频编解码器使用 8 个 NVIDIA TESLA V100 16GB GPU 进行训练,每个 GPU 的批量大小为 200 个音频,步长为 440K。扩散模型在 16 个 NVIDIA TESLA V100 32GB GPU 上训练,每个 GPU 的潜在向量批处理大小为 6K 帧,步长为 300K 步。

1.4.4.评估指标

客观指标:

  • 韵律与提示的相似性:这衡量文本转语音 (TTS) 模型在语音提示中遵循韵律(音高和持续时间)的程度。它涉及从提示和合成语音中提取音素级持续时间和音调,并比较这些特征。
  • 韵律与地面实况的相似性:这评估了 TTS 模型与地面实况中的韵律的匹配程度。它涉及计算生成的语音和真值语音之间的音高/持续时间的 Pearson 相关性和 RMSE。
  • 字错误率(WER):使用自动语音识别(ASR)模型对生成的语音进行转录,并计算WER。

主观指标涉及人工评估,包括:

  • 清晰度分数:衡量合成语音中重复单词、跳过单词和错误句子的数量,以评估 NaturalSpeech 2 的鲁棒性。
  • 比较平均意见得分 (CMOS) 和相似性平均意见得分 (SMOS):CMOS 测量合成语音的自然度,而 SMOS 测量合成语音和提示语音之间的相似度。两者都由母语人士评分。 

1.5.结果

使用比较平均意见得分在LibriSpeech和VCTK数据集上

TTS | NaturalSpeech2语音合成论文详解及项目实现_第5张图片

 消融实验

TTS | NaturalSpeech2语音合成论文详解及项目实现_第6张图片

2.项目实现(待更)

2.0.环境设置

git clone  https://github.com/lucidrains/naturalspeech2-pytorch
pip install naturalspeech2-pytorch
python setup.py

TTS | NaturalSpeech2语音合成论文详解及项目实现_第7张图片

2.2.训练

项目中暂时只有局部代码,等完整时再实现~

Q&A

【Q&A1】NatrlalSpeech和NaturalSpeech2的主要区别

请详细查看1.3.4.与 NaturalSpeech 的连接部分

过程中遇到的问题与解决【PS】

【PS1】RuntimeError: The NVIDIA driver on your system is too old (found version 11040). Please update your GPU driver by downloading and installing a new version from the URL: http://www.nvidia.com/Download/index.aspx Alternatively, go to: https://pytorch.org to install a PyTorch version that has been compiled with your version of the CUDA driver.

查看驱动命令nvidia-smi 

TTS | NaturalSpeech2语音合成论文详解及项目实现_第8张图片

版本为470.199.02

解决办法:升级新的nvidia驱动 或者降低pytorch版本,现在的版本是2.1.2,改为1.31.1就可以啦~

参考文献

【1】Paper Review: NaturalSpeech 2: Latent Diffusion Models are Natural and Zero-Shot Speech and Singing Synthesizers | by Andrew Lukyanenko | Medium

你可能感兴趣的:(#,TTS,-,Speech,-,tts,语音合成,人工智能)