GenerSpeech: 通用跨领域文本到语音风格迁移
黄荣杰, 任奕, 刘敬林, 崔晨曦, 赵周 | 浙江大学, 海深智慧实验室
这是 GenerSpeech (NeurIPS'22) 的 PyTorch 实现:一个致力于高保真零样本风格迁移的跨领域自定义语音文本到语音模型。
我们在此存储库中提供了我们的实现和预训练模型。
访问我们的演示页面获取音频样本。
新闻
- 2022年12月: GenerSpeech (NeurIPS 2022) 在Github发布。
主要特点
- 面向富有表现力的文本到语音的多层次风格迁移。
- 增强模型泛化到未分布(OOD)风格参考。
快速入门
我们提供了一个使用 GenerSpeech 生成高保真样本的示例。
要在您自己的数据集上进行尝试,只需在安装了 NVIDIA GPU 和 CUDA cuDNN 的本地机器上克隆此存储库并遵循以下说明。
支持的数据集和预训练模型
您可以使用我们提供的预训练模型 这里 和数据 这里。各文件夹的详细信息如下:
模型 | 数据集 (16 kHz) | 描述 |
---|---|---|
GenerSpeech | LibriTTS, ESD | 声学模型 (配置) |
HIFI-GAN | LibriTTS, ESD | 神经声码器 |
编码器 | / | 情感编码器 |
更多支持的数据集即将推出。
依赖项
可以创建和激活一个名为 generspeech
的合适的 conda 环境:
conda env create -f environment.yaml
conda activate generspeech
多GPU
默认情况下,此实现将使用 torch.cuda.device_count()
返回的所有 GPU 并行工作。您可以在运行训练模块之前通过设置 CUDA_DEVICES_AVAILABLE
环境变量来指定要使用的 GPU。
推理(零样本TTS)
这里我们提供了一个使用 GenerSpeech 进行语音合成的管道。
- 准备 GenerSpeech(声学模型):下载并将检查点放在
checkpoints/GenerSpeech
- 准备 HIFI-GAN(神经声码器):下载并将检查点放在
checkpoints/trainset_hifigan
- 准备 情感编码器:下载并将检查点放在
checkpoints/Emotion_encoder.pt
- 准备 数据集:下载并将统计文件放在
data/binary/training_set
- 准备 参考音频路径 (16k): 默认为 GenerSpeech 使用 ASR + MFA 获得参考的文本和语音对齐。
CUDA_VISIBLE_DEVICES=$GPU python inference/GenerSpeech.py --config modules/GenerSpeech/config/generspeech.yaml --exp_name GenerSpeech --hparams="text='here we go',ref_audio='assets/0011_001570.wav'"
生成的 wav 文件默认保存在 infer_out
文件夹中。
训练您自己的模型
数据准备和配置
- 在配置文件中设置
raw_data_dir
、processed_data_dir
、binary_data_dir
,并下载数据集到raw_data_dir
。 - 检查配置文件中的
preprocess_cls
。数据集结构需要符合处理器preprocess_cls
,或者您可以根据您的数据集重新编写它。我们在modules/GenerSpeech/config/generspeech.yaml
中提供了一个 Libritts 处理器示例。 - 下载全局情感编码器到
emotion_encoder_path
。更多细节请参考此分支。 - 预处理数据集
# 预处理步骤:统一文件结构。
python data_gen/tts/bin/preprocess.py --config $path/to/config
# 对齐步骤:MFA 对齐。
python data_gen/tts/bin/train_mfa_align.py --config $path/to/config
# 二值化步骤:二值化数据以提高 IO 速度。
CUDA_VISIBLE_DEVICES=$GPU python data_gen/tts/bin/binarize.py --config $path/to/config
您还可以通过 NATSpeech 构建数据集,该工具共享一个通用的 MFA 数据处理过程。 我们还提供了我们处理过的数据集(16kHz LibriTTS+ESD)。
训练 GenerSpeech
CUDA_VISIBLE_DEVICES=$GPU python tasks/run.py --config modules/GenerSpeech/config/generspeech.yaml --exp_name GenerSpeech --reset
使用 GenerSpeech 进行推理
CUDA_VISIBLE_DEVICES=$GPU python tasks/run.py --config modules/GenerSpeech/config/generspeech.yaml --exp_name GenerSpeech --infer
感谢
此实现使用了以下 Github 仓库中的部分代码: FastDiff, NATSpeech, 如我们的代码所述。
引用
如果您在研究中发现此代码有用,请引用我们的工作:
@inproceedings{huanggenerspeech,
title={GenerSpeech: Towards Style Transfer for Generalizable Out-Of-Domain Text-to-Speech},
author={Huang, Rongjie and Ren, Yi and Liu, Jinglin and Cui, Chenye and Zhao, Zhou},
booktitle={Advances in Neural Information Processing Systems}
}
免责声明
禁止任何组织或个人未经他人同意使用本文中提到的任何技术生成他人的语音,包括但不限于政府领导、政治人物和名人。如果您不遵守此条款,您可能违反版权法。