Skip to content

Voice Cloning with your personal data.zh

syq163 edited this page Dec 22, 2023 · 3 revisions

为了响应社区需求,我们很开心地发布了声音克隆功能,并提供了两个教程示例!

注意事项:

  1. 该功能至少需要一张 Nvidia GPU 显卡
  2. 目标声音的数据至关重要!详细要求将在下一节中提供。
  3. 目前,该功能仅支持中文和英文,这意味着你可以使用中文数据或英文数据进行训练,从而得到一个能够说两种语言的音色模型
  4. 尽管EmotiVoice支持情感控制,但如果想要你的声音传达情感,训练数据也需要富有情感。
  5. 在仅使用你的数据进行训练后,来自EmotiVoice的原始声音将被改变。这意味着新的模型将完全根据你的数据进行定制。如果想使用EmotiVoice的2000+个原始声音,建议使用原始的预训练模型。

训练数据的详细需求

  1. 音频数据应该有较高质量,需要清晰无失真的单个人语音。时长或句数暂时不做强制要求,几句话也行,不过推荐在100句话以上。
  2. 与每个音频对应的文本应该与语音的内容严格相符。在进行训练之前,原始文本会使用G2P转换为音素。需要注意停顿(sp*)和多音字的转换结果,它们对训练质量影响很大。
  3. 如果希望你的声音传达情感,训练数据也需要富有情感。此外,**标签'prompt'**的内容应该根据每个音频进行修改。提示词的内容可以包括情感、语速以及说话风格等任何形式的文本描述。
  4. 然后,你会得到一个名为 data directory 的目录,包含两个子目录,分别是 trainvalid。每个子目录都有一个datalist.jsonl 文件,且每行的格式为: {"key": "LJ002-0020", "wav_path": "data/LJspeech/wavs/LJ002-0020.wav", "speaker": "LJ", "text": ["<sos/eos>", "[IH0]", "[N]", "engsp1", "[EY0]", "[T]", "[IY1]", "[N]", "engsp1", "[TH]", "[ER1]", "[T]", "[IY1]", "[N]", ".", "<sos/eos>"], "original_text": "In 1813", "prompt": "common"}

分布训练步骤:

中文请参考 DataBaker Recipe,英文请参考:LJSpeech Recipe。以下是概要:

  1. 准备训练环境——只需要配置一次。

    # create conda enviroment
    conda create -n EmotiVoice python=3.8 -y
    conda activate EmotiVoice
    # then run:
    pip install EmotiVoice[train]
    # or
    git clone https://github.com/netease-youdao/EmotiVoice
    pip install -e .[train]
  2. 参考 Detailed requirements for training data 进行数据准备,推荐参考示例DataBaker RecipeLJSpeech Recipe中的方法和脚本。

  3. 接下来,运行以下命令创建一个用于训练的目录:python prepare_for_training.py --data_dir <data directory> --exp_dir <experiment directory>

    替换 <data directory> 为准备好的数据目录的实际路径, <experiment directory> 为实验目录的期望路径。

  4. 可以根据服务器配置和数据的情况修改 <experiment directory>/config/config.py 。完成修改后,通过运行以下命令启动训练过程 torchrun --nproc_per_node=1 --master_port 8018 train_am_vocoder_joint.py --config_folder <experiment directory>/config --load_pretrained_model True。这个命令将使用指定的配置文件夹启动训练过程,并加载任何指定的预训练模型)。目前该方法适用于Linux,Windows可能会遇到问题!

  5. 在完成一些训练步骤后,选择某个checkpoint,运行以下命令确认效果是否符合预期: python inference_am_vocoder_exp.py --config_folder exp/DataBaker/config --checkpoint g_00010000 --test_file data/inference/text。别忘了修改data/inference/text中speaker字段的内容。如果结果满意,就可以随意使用了!我们提供了一个修改版的demo page: demo_page_databaker.py来体验用DataBaker克隆后的音色效果。

  6. 如果结果不尽人意,可以继续训练,或者检查你的数据和环境。当然,欢迎在社区讨论,或者提交issue!

运行时间的参考信息:

我们提供如下运行时间信息和硬件配置信息,供大家参考:

  • Pip包的版本:Python 3.8.18, torch 1.13.1, cuda 11.7
  • GPU卡型号:NVIDIA GeForce RTX 3090, NVIDIA A40
  • 训练耗时:训练一万步,大概需要1-2个小时。

它甚至可以不用GPU显卡,只用CPU来训练。请静候佳音!