菜单

核心组件

相关源文件

本页面介绍了基于SV2TTS(Speaker Verification to Text-To-Speech Synthesis)框架的实时语音克隆系统中三个核心组件。这些组件构成了一个处理流水线,能够仅用几秒钟的参考音频进行语音克隆。有关系统安装说明,请参阅安装和设置,有关使用界面的信息,请参阅用户界面

组件概述

SV2TTS框架包含三个可独立训练并按顺序工作的组件,用于语音克隆。

  1. 说话人编码器(Speaker Encoder):将参考音频转换为捕捉说话人身份的固定长度的语音嵌入。
  2. 合成器(Synthesizer):接收文本和说话人嵌入,生成代表目标语音的梅尔频谱图。
  3. 声码器(Vocoder):将梅尔频谱图转换为听起来自然的音频波形。

来源:synthesizer_preprocess_embeds.py, encoder_preprocess.py, synthesizer_preprocess_audio.py, vocoder_train.py

组件交互与数据流

下图说明了推理过程中数据在系统中的流动方式。

来源:synthesizer_preprocess_embeds.py, encoder_train.py, synthesizer_train.py, vocoder_train.py

说话人编码器

说话人编码器将原始音频转换为固定长度的说话人嵌入,该嵌入捕捉了语音特征,并且与文本无关。

架构与功能

说话人编码器使用基于LSTM的神经网络,并通过广义端到端(GE2E)损失进行训练,将频谱图映射到一个判别性嵌入空间,在这个空间中,同一说话人的发音会聚集在一起。

关键文件与函数

组件文件路径描述
预处理encoder/preprocess.py准备用于训练的音频数据集
模型定义encoder/model.py基于LSTM的神经网络架构
训练实现encoder/train.pyGE2E损失和训练循环的实现
推理接口encoder/inference.py用于生成嵌入的函数

在推理过程中,该过程由embed_utterance()处理,它会

  1. 通过语音活动检测对音频进行预处理
  2. 将其转换为梅尔频谱图
  3. 将其通过编码器网络
  4. 返回一个标准化的256维嵌入向量。

来源:encoder_preprocess.py, encoder_train.py

合成器

合成器是修改过的Tacotron 2模型,它根据说话人嵌入从文本生成梅尔频谱图。

架构与功能

合成器将说话人嵌入添加到标准的Tacotron 2架构中,以根据特定声音对生成的语音进行条件处理。它负责

  • 文本处理和语音转换
  • 文本与音频之间的基于注意力的对齐
  • 生成与目标语音特征匹配的频谱图

关键文件与函数

组件文件路径描述
预处理synthesizer/preprocess.py准备训练数据,包括嵌入创建
模型定义synthesizer/models/tacotron.py修改过的Tacotron 2架构
训练实现synthesizer/train.py训练循环和损失计算
推理接口synthesizer/inference.py用于生成频谱图的函数

预处理流水线包括

  1. 音频分割与清理 synthesizer/preprocess.py112-181
  2. 梅尔频谱图提取 synthesizer/preprocess.py184-224
  3. 与说话人嵌入的集成 synthesizer/preprocess.py229-258

来源:synthesizer_preprocess_audio.py, synthesizer_preprocess_embeds.py, synthesizer_train.py

声码器

声码器将梅尔频谱图转换为波形,它实现了一个修改过的WaveRNN架构,并针对实时性能进行了优化。

架构与功能

声码器通过以下方式工作:

  1. 对梅尔频谱图进行上采样以匹配音频采样率
  2. 使用循环神经网络生成音频样本
  3. 采用稀疏softmax等技术实现高效推理。

关键文件与函数

组件文件路径描述
模型定义vocoder/models/fatchord_version.pyWaveRNN架构实现
训练实现vocoder/train.py训练循环和损失计算
推理接口vocoder/inference.py用于生成音频的函数

声码器可以基于以下任一数据进行训练:

  • 真实对齐的梅尔频谱图
  • 合成器生成的梅尔频谱图

选择哪种数据会影响输出质量以及声码器补偿合成器伪影的能力。

来源:vocoder_train.py

系统集成

这三个组件被设计为独立工作,但又可以无缝集成。

系统的模块化提供了许多优势:

  • 组件可以独立训练
  • 预训练模型可以被替换或单独微调
  • 该架构足够灵活,可以适应不同的语音克隆场景。

来源:.gitignore, encoder_train.py, synthesizer_train.py, vocoder_train.py

训练数据流

三个组件的训练过程遵循一个顺序模式。

  1. 说话人编码器训练:

    • 使用LibriSpeech、VoxCeleb1和VoxCeleb2等数据集
    • 专注于区分不同的说话人
  2. 合成器训练:

    • 需要带有文本转录的文本-音频对
    • 使用编码器嵌入将合成条件化到说话人身份
  3. 声码器训练:

    • 可以基于真实或合成器生成的频谱图进行训练
    • 学习从频谱图生成逼真的波形。

每个组件都需要不同的数据类型和预处理步骤,具体细节在其各自的wiki页面中有说明:说话人编码器合成器声码器

来源:encoder_preprocess.py, synthesizer_preprocess_audio.py, synthesizer_preprocess_embeds.py, vocoder_train.py