说话人编码器是SV2TTS(说话人验证到文本到语音合成)语音克隆管道中的第一个组件。它的主要功能是将几秒钟的参考音频转换为一个固定长度的向量表示,称为语音嵌入。此嵌入捕捉说话人独特的发声特征,同时丢弃语言内容,使得系统能够仅凭一小段音频样本克隆语音。
有关此组件如何与整个系统集成的更多信息,请参阅系统架构。
来源:encoder/inference.py1-179 toolbox/__init__.py9-14
说话人编码器由多个关键组件协同工作,以创建区分性的语音嵌入。
编码器使用广义端到端(GE2E)损失进行训练,该损失优化嵌入,使其对于相同的说话人相似,而对于不同的说话人不同。
来源:encoder/inference.py38-56 encoder/audio.py19-66
说话人编码器的核心是3层LSTM网络,用于处理梅尔频谱帧。
这种架构允许模型处理任意长度的发音,同时生成固定大小的嵌入。
来源:encoder/inference.py42-55 encoder/inference.py110-154
在创建嵌入之前,原始音频会经过几个预处理步骤。
这些步骤确保了一致的音频质量,以获得可靠的嵌入。
来源:encoder/audio.py19-50 encoder/params_data.py
预处理后的音频被转换为梅尔频谱。
这种时频表示捕捉了说话人识别所需的声学特性。
为了获得可靠的嵌入,尤其是在较长的发音中,
这种方法提高了对发音长度和内容变化的鲁棒性。
来源:encoder/inference.py58-107 encoder/inference.py110-154
编码器在大型多说话人数据集上进行训练。
训练数据结构化,以有效地实现GE2E损失计算。
来源:encoder/preprocess.py58-184 encoder/data_objects/speaker_verification_dataset.py10-55
训练过程使用GE2E(广义端到端)损失来优化网络。
这种方法创建了一个区分性的嵌入空间,其中同一说话人的发音聚集在一起。
来源:encoder/train.py18-125 encoder/data_objects/speaker_batch.py6-13
预训练的编码器模型可以轻松加载用于推理。
来源:encoder/inference.py14-35 toolbox/__init__.py313-321
从新的音频样本创建嵌入涉及对音频进行预处理并将其通过模型。
来源:encoder/inference.py110-154 toolbox/__init__.py177-190
在完整的语音克隆管道中,
该嵌入充当“语音身份卡”,指示合成器应该如何发声。
来源:toolbox/__init__.py196-222 toolbox/__init__.py225-311
工具箱提供了语音嵌入的可视化能力。
这些可视化有助于理解嵌入的区分性属性。
来源:encoder/inference.py161-178 toolbox/ui.py62-79 toolbox/ui.py97-135
| 参数 | 值 | 描述 |
|---|---|---|
| 嵌入大小 | 256 | 输出语音嵌入的维度 |
| 采样率 | 16,000 Hz | 编码器使用的音频采样率 |
| 梅尔通道数 | 40 | 频谱中的梅尔频率带数量 |
| 窗口长度 | 25毫秒 | 用于频谱生成的STFT窗口长度 |
| 窗口步长 | 10毫秒 | 用于频谱生成的STFT跳跃长度 |
| 部分发音帧数 | 160 | 每个部分发音的帧数(约1.6秒) |
| 模型类型 | 3层 LSTM | 核心神经网络架构 |