本页面介绍了基于SV2TTS(Speaker Verification to Text-To-Speech Synthesis)框架的实时语音克隆系统中三个核心组件。这些组件构成了一个处理流水线,能够仅用几秒钟的参考音频进行语音克隆。有关系统安装说明,请参阅安装和设置,有关使用界面的信息,请参阅用户界面。
SV2TTS框架包含三个可独立训练并按顺序工作的组件,用于语音克隆。
来源: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.py | GE2E损失和训练循环的实现 |
| 推理接口 | encoder/inference.py | 用于生成嵌入的函数 |
在推理过程中,该过程由embed_utterance()处理,它会
来源: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 | 用于生成频谱图的函数 |
预处理流水线包括
来源:synthesizer_preprocess_audio.py, synthesizer_preprocess_embeds.py, synthesizer_train.py
声码器将梅尔频谱图转换为波形,它实现了一个修改过的WaveRNN架构,并针对实时性能进行了优化。
声码器通过以下方式工作:
| 组件 | 文件路径 | 描述 |
|---|---|---|
| 模型定义 | vocoder/models/fatchord_version.py | WaveRNN架构实现 |
| 训练实现 | vocoder/train.py | 训练循环和损失计算 |
| 推理接口 | vocoder/inference.py | 用于生成音频的函数 |
声码器可以基于以下任一数据进行训练:
选择哪种数据会影响输出质量以及声码器补偿合成器伪影的能力。
来源:vocoder_train.py
这三个组件被设计为独立工作,但又可以无缝集成。
系统的模块化提供了许多优势:
来源:.gitignore, encoder_train.py, synthesizer_train.py, vocoder_train.py
三个组件的训练过程遵循一个顺序模式。
说话人编码器训练:
合成器训练:
声码器训练:
每个组件都需要不同的数据类型和预处理步骤,具体细节在其各自的wiki页面中有说明:说话人编码器、合成器和声码器。
来源:encoder_preprocess.py, synthesizer_preprocess_audio.py, synthesizer_preprocess_embeds.py, vocoder_train.py