前文讲到OpenVoicev2,补充下细节,然后梳理使用的基础模型VITS:
📓
melo-tts 生成原始音频:
- OpenVoice 版本1不依赖melo-tts, 升级后的V2版本依赖melo-tts, 主要是生成原始音频质量加强了(由melo-tts生成);
- 默认配置使用了TransformerCouplingBlock list作为flow 和 reverse flow, 而第一版的OpenVoice 模型使用的 ResidualCouplingBlock ;
- melo-tts的模型权重支持多语言,更具语言区分,比如 ZH: myshell-ai/MeloTTS-Chinese, EN_NEWEST: myshell-ai/MeloTTS-English-v3;
音色转换生成目标音频:
- 通过训练好的音色抽取器抽取目标说话者的音色 (myshell-ai/OpenVoiceV2/converter);
- 生成的原始音频信息通过 训练抽取好的基础说话者的音色(myshell-ai/OpenVoiceV2/base_speakers/ses),将原始音频中的音色去除 (flow);
- 将去除原始音色的音频 和 抽取好的目标说话者的音色 合并 (reverse flow); 最终通过 vocoder(也是论文中的Decoder,使用的 HiFi-Gan模型)合成目标音频。
额外注意的是,由melo-tts生成原始音频sample rate是 44100, 而通过音色提取器 提取 并且 生成目标音频sample rate是 22050
前提知识这里简单概括如下:
AE(Autoencoder): 自编码器是自监督系统,其训练目标是通过降维来压缩(或编码)输入数据,然后使用该压缩后的表示准确重建(或解码)其原始输入。无泛化生成能力,但是可以执行特定任务:常用于数据压缩、图像去噪、异常检测和面部识别等任务。
VAE(Variational Autoencoder) :与其他自编码器(Autoencoder(AE)的区别在于它们对潜在空间进行编码的独特方式,以及可以应用其概率编码的不同用例,即随机生成训练数据的变体。具有泛化生成能力。
CVAE(Conditional Variational Autoencoder): 条件变分自编码器 可以以特定输入为条件进行输出,而不仅仅是随机生成训练数据的变体。这是通过将监督学习(或半监督学习)的元素与常规自编码器的传统无监督训练目标相结合来实现的。具有指定特征的泛化能力。
-
VAE 与 GAN的区别:
VAE 经常与生成式对抗网络 (GAN) 进行比较,GAN 是另一种模型架构,用于生成类似于训练数据的样本,尤其是图像。
与 VAE 类似,GAN 是结合两种神经网络的联合架构:一个生成器网络,负责输出与训练数据集中的图像相似的图像样本,另一个判别器网络,负责确定特定图像是训练数据中的“真实”图像还是来自生成器网络的“虚假”图像。
这两个网络在零和博弈中进行对抗性训练:来自判别器的反馈用于改进生成器的输出,直到判别器不再能够区分真假样本。
就图像合成而言,两者各有优劣:
- GAN 可以生成更清晰的图像,但由于两种复合模型之间的对抗性权衡,在训练中并不稳定。
- VAE 更容易训练,但由于其根据训练数据的“平均”特征生成图像的性质,往往会生成比较模糊的图像。
-
VAE-GAN 两者结合 顾名思义,VAE-GAN 是变分自编码器 (VAE) 和生成式对抗网络 (GAN) 的混合体。通过用判别器网络替换 VAE 模型的重建损失项,来降低 VAE 生成图像的模糊性,提高生成质量。
VITS 使用了 条件变分自编码器 (Conditional Variational Autoencoder (CVAE)) 和生成式对抗网络 (Generative adversarial network(GAN)) 两个模型架构。 至于VAE和GAN的细节可以关注下baby-llm这个学习项目中的对应模块PR学习资料:
- VAE: https://github.com/ai-bot-pro/baby-llm/tree/main/modules/VAE | PR: https://github.com/ai-bot-pro/baby-llm/pull/13
- GAN: https://github.com/ai-bot-pro/baby-llm/tree/main/modules/GAN | PR: https://github.com/ai-bot-pro/baby-llm/pull/12
这篇文章是讲解VITS,是现在工业上TTS常用的基础方案(NAR模型,成本相对AR模型低, 推理快,生成质量尽可能追平或超越SOTA AR模型)。作者来自韩国现代汽车公司的 AIR 实验室(人工智能研究实验室),论文结合了以前的研究成果:
- 2018. FloWaveNet : A Generative Flow for Raw Audio
- 2020. Glow-TTS: A Generative Flow for Text-to-Speech via Monotonic Alignment Search
- 2020. HiFi-GAN: Generative Adversarial Networks for Efficient and High Fidelity Speech Synthesis
后续作者还研究了加入扩散模型来生成语音,不需要使用分类器指导的目标说话者的任何转录。
Guided-TTS 将无条件扩散概率模型(unconditional Diffusion Model)与单独训练的音素分类器(phoneme classifier )相结合,用于分类器指导。无条件扩散模型学习在没有任何上下文的情况下从未转录的语音数据中生成语音。对于 TTS 合成,使用在大规模语音识别数据集上训练的音素分类器来指导扩散模型的生成过程。
VITS
- 2021. Conditional Variational Autoencoder with Adversarial Learning for End-to-End Text-to-Speech | paper coder
主要贡献:
- 提出了一种并行的端到端 TTS 方法,它可以生成比当前两阶段模型更自然的音频;
- 采用通过归一化流程和对抗性训练过程增强的变分推理,提高了生成模型的表达能力;
- 一个随机持续时间预测器(stochastic duration predictor)来从输入文本中合成具有不同节奏的语音;
- 通过对潜在变量的不确定性建模和随机持续时间预测器,表达了自然的一对多关系,其中文本输入可以以不同的音调(pitches)和节奏(rhythms)以多种方式说出。
通过利用条件变分自编码器 CVAE,模型特点:
- 学习直接从文本合成原始波形,而不需要额外的输入条件;
- 使用动态编程方法 MAS 来搜索最佳对齐方式,而不是与计算损失相比,不需要任何外部对齐器;
- 并行生成样本;
- 高效的端到端训练方法, 并且生成质量优于最好的公开可用的两阶段模型。附两阶段的数据处理过程(在后续的研究论文中称之为级联方法(cascaded),见VALL-E系列论文研究):
- 第一阶段是从预处理的文本中生成中间语音表示,例如梅尔谱图(mel-spectrograms)或语言特征(linguistic features)
- 第二阶段是生成以中间表示为条件的原始波形。
- 两阶段的相关模型大都是独立开发的。
结构:
PS: achatbot 集成了OpenVoiceV2 with meloTTS(meloTTS代码大部分来自VITS,Flow 采用 Transformer Encoder 结构来自 VITS2: Improving Quality and Efficiency of Single-Stage Text-to-Speech with Adversarial Learning and Architecture Design | paper code