在我们的论文中,我们提出了Daft-Exprt,这是一种多演讲者的声学模型,可推动任何文本上的跨言论韵律转移的最新动态。这是语音综合中最具挑战性,很少直接解决的任务之一,尤其是对于高度表达的数据。 Daft-Exprt使用胶片调节层在策略中策略性地注入不同部分的体系结构中的各个部分。该模型明确编码了传统的低级韵律特征,例如音高,响度和持续时间,也可以编码更高的韵律信息,这些信息有助于在高度表现力的风格中产生令人信服的声音。说话者的身份和韵律信息通过对抗性训练策略来阐明,该策略可以使言语的准确转移。实验结果表明,DAFT-EXPRT在跨语义串扰的韵律转移任务上明显胜过强大的基线,同时产生的自然性与最先进的表达模型相当。此外,结果表明该模型从韵律表示中丢弃说话者身份信息,并始终以所需的语音产生语音。请访问我们的演示页面以获取与纸质实验有关的音频样本。
全面披露:此存储库中提供的模型与论文评估中的模型不同。该论文的模型接受了专有数据的培训,该数据使我们公开发布它。
我们将LJ语音数据集和ESD数据集(ESD)(ESD)的组合预先培训。
访问此存储库的发行版,以下载预训练的模型,并使用相同的模型收听韵律转移示例。
要求:
我们建议将Conda用于Python环境管理,例如下载和安装Miniconda。
创建您的python环境并使用makefile安装依赖项:
conda create -n daft_exprt python=3.8 -yconda activate daft_exprtcd environmentmake所有Linux/conda/pip依赖项将由makefile安装,存储库将以可编辑模式安装为PIP包。
要求:
使用关联的Dockerfile构建Docker映像:
docker build -f environment/Dockerfile -t daft_exprt . 此快速启动指南将说明如何使用此存储库的不同脚本到:
所有脚本都位于脚本目录中。
DAFT-EXPRT源代码位于DAFT_EXPRT目录中。
脚本中使用的配置参数均在hparams.py中启动。
作为一个快速启动示例,我们考虑使用22kHz LJ语音数据集和Zhou等人的16KHz情感语音数据集(ESD)。
这结合了总共11位演讲者。所有说话者数据集必须在同一根目录中。例如:
/data_dir
LJ_Speech
ESD
spk_1
...
spk_N
在此示例中,我们使用上一节中构建的Docker映像:
docker run -it --gpus all -v /path/to/data_dir:/workdir/data_dir -v path/to/repo_dir:/workdir/repo_dir IMAGE_ID
源代码期望每个说话者数据集的特定树结构:
/speaker_dir
metadata.csv
/wavs
wav_file_name_1.wav
...
wav_file_name_N.wav
Metadata.csv必须格式化如下:
wav_file_name_1|text_1
...
wav_file_name_N|text_N
鉴于每个数据集都有自己的命名法,因此该项目不提供现成的通用脚本。
但是,脚本format_dataset.py已经提出了格式LJ和ESD的代码:
python format_dataset.py
--data_set_dir /workdir/data_dir/LJ_Speech
LJ
python format_dataset.py
--data_set_dir /workdir/data_dir/ESD
ESD
--language english
在本节中,代码将:
为了预处理所有可用的格式数据(即在此示例中LJ和ESD):
python training.py
--experiment_name EXPERIMENT_NAME
--data_set_dir /workdir/data_dir
pre_process
这将使用为22kHz音频设置的默认超参数进行预处理数据。
与实验相关的所有输出都将存储在/workdir/repo_dir/trainings/EXPERIMENT_NAME中。
您还可以针对特定扬声器进行数据预处理。例如,仅考虑ESD扬声器:
python training.py
--experiment_name EXPERIMENT_NAME
--speakers ESD/spk_1 ... ESD/spk_N
--data_set_dir /workdir/data_dir
pre_process
过程预处理功能需要几个参数:
--features_dir :将存储预处理数据的绝对路径。默认为/workdir/repo_dir/datasets--proportion_validation :将在验证集中进行的示例的比例。默认为每位扬声器0.1 %。--nb_jobs :用于Python多处理的内核数。如果设置为max ,则使用所有CPU内核。默认为6 。请注意,如果这是您第一次预处理数据,则此步骤将需要几个小时。
您可以通过增加--nb_jobs参数来减少计算时间。
预处理完成后,启动培训。培训所有预处理数据:
python training.py
--experiment_name EXPERIMENT_NAME
--data_set_dir /workdir/data_dir
train
或者,如果您在预处理过程中针对特定的发言人(例如ESD发言人):
python training.py
--experiment_name EXPERIMENT_NAME
--speakers ESD/spk_1 ... ESD/spk_N
--data_set_dir /workdir/data_dir
train
与实验相关的所有输出都将存储在/workdir/repo_dir/trainings/EXPERIMENT_NAME中。
火车功能需要几个参数:
--checkpoint :DAFT-EXPRT检查点的绝对路径。默认为""--no_multiprocessing_distributed :禁用Pytorch多处理分布式培训。默认为False--world_size :分布式培训的节点数量。默认为1 。--rank :分布式培训的节点等级。默认为0 。--master :用于设置分布式培训的URL。默认为tcp://localhost:54321 。这些默认值将使用机器上的所有可用GPU在迭代0开始启动新的培训。
该代码假设机器上只有1个GPU。
默认批处理大小和梯度积累超参数设置为值,以从纸张中复制48个批处理大小。
该代码还支持张板记录。显示记录输出:
tensorboard --logdir_spec=EXPERIMENT_NAME:/workdir/repo_dir/trainings/EXPERIMENT_NAME/logs
培训完成后,您可以创建一个用于Vocoder微调的数据集:
python training.py
--experiment_name EXPERIMENT_NAME
--data_set_dir /workdir/data_dir
fine_tune
--checkpoint CHECKPOINT_PATH
或者,如果您在预处理和培训期间针对特定的发言人(例如ESD发言人):
python training.py
--experiment_name EXPERIMENT_NAME
--speakers ESD/spk_1 ... ESD/spk_N
--data_set_dir /workdir/data_dir
fine_tune
--checkpoint CHECKPOINT_PATH
微调数据集将存储在/workdir/repo_dir/trainings/EXPERIMENT_NAME/fine_tuning_dataset中。
有关如何将DAFT-EXPRT用于TTS合成的示例,请运行脚本Synthesize.py。
python synthesize.py
--output_dir OUTPUT_DIR
--checkpoint CHECKPOINT
脚本中使用默认句子和参考话语。
该脚本还提供了:
--batch_size :并行处理句子的过程--real_time_factor :估计daft-exprt实时因素性能给定选定的批量大小--control :执行本地韵律控制 @article{Zaidi2021,
abstract = {},
journal = {arXiv},
arxivId = {2108.02271},
author = {Za{"{i}}di, Julian and Seut{'{e}}, Hugo and van Niekerk, Benjamin and Carbonneau, Marc-Andr{'{e}}},
eprint = {2108.02271},
title = {{Daft-Exprt: Robust Prosody Transfer Across Speakers for Expressive Speech Synthesis}},
url = {https://arxiv.org/pdf/2108.02271.pdf},
year = {2021}
}
对此存储库的任何贡献都非常欢迎!
如果您有任何反馈,请将其发送到[email protected]。
©[2021] Ubisoft Entertainment。版权所有