ITADN
jasonppy/VoiceCraft
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

VoiceCraft: 野外零样本语音编辑与文本转语音

Paper HuggingFace Colab Replicate YouTube demo Demo page jasonppy%2FVoiceCraft | Trendshift

TL;DR

VoiceCraft 是一种 token 填充神经编解码语言模型,在包括有声书、网络视频和播客在内的真实场景数据上,于语音编辑和**零样本文本转语音(TTS)**任务中均达到了最先进的性能。

要克隆或编辑一个未见过的声音,VoiceCraft 仅需几秒钟的参考音频。

如何运行推理

除了在 Colab 中运行 Gradio 之外,有三种方式:

  1. More flexible inference beyond Gradio UI in Google Colab. see quickstart colab
  2. with docker. see quickstart docker
  3. without docker. see environment setup. You can also run gradio locally if you choose this option
  4. As a standalone script that you can easily integrate into other projects. see quickstart command line.

当你在 docker 镜像内部或已安装所有依赖项时,请检出 inference_tts.ipynb

如果你想进行模型开发,例如训练/微调,我推荐遵循 环境设置训练

新闻

:star: 03/15/2025: 将推理采样从 topp=1 更改为 topk=40,大幅提升了编辑和 TTS 性能

:star: 04/22/2024: 330M/830M TTS Enhanced Models 已上线 here,请通过 gradio_app.pyinference_tts.ipynb 加载!Replicate 演示已上线,特别感谢 @chenxwh

:star: 04/11/2024: VoiceCraft Gradio 现已在 HuggingFace Spaces 上线 here! 特别感谢 @zuev-stepan, @Sewlell, @pgsoar @Ph0rk0z.

:star: 04/05/2024: 我在 gigaspeech 和 1/5 的 librilight 上,使用 TTS 目标对 giga330M 进行了微调。权重在这里。请确保最大提示 + 生成长度 <= 16 秒(由于计算资源有限,我们在训练数据中丢弃了长于 16 秒的语音)。更强的模型即将推出,敬请期待!

:star: 03/28/2024: giga330M 和 giga830M 的模型权重已上传至 HuggingFace🤗 此处!

待办事项

  • 代码库上传
  • 环境配置
  • 语音编辑和 TTS 的推理演示
  • 训练指南
  • RealEdit 数据集和训练清单
  • 模型权重
  • 关于训练/微调的更好指南
  • Colab 笔记本
  • HuggingFace Spaces 演示
  • 命令行
  • 提高效率

QuickStart Colab

:star: 若要使用 VoiceCraft 尝试语音编辑或 TTS 推理,最简单的方式是使用 Google Colab。 运行说明位于 Colab 本身中。

  1. To try Speech Editing
  2. To try TTS Inference

快速入门 命令行

:star: 若要将其作为独立脚本使用,请查看 tts_demo.py 和 speech_editing_demo.py。 请务必先 配置你的环境。 如果不带参数,它们将运行本仓库其他位置用作示例的标准演示参数。 你可以使用命令行参数来指定独特的输入音频、 目标转录文本和推理超参数。运行帮助命令以获取更多信息: python3 tts_demo.py -h

QuickStart Docker

:star: 若要尝试使用 VoiceCraft 进行 TTS 推理,你也可以使用 docker。感谢 @ubergarm@jayc88 使这成为可能。

已在 Linux 和 Windows 上测试,并且应该适用于任何安装了 docker 的主机。

# 1. clone the repo on in a directory on a drive with plenty of free space
git clone git@github.com:jasonppy/VoiceCraft.git
cd VoiceCraft

# 2. assumes you have docker installed with nvidia container container-toolkit (windows has this built into the driver)
# https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/1.13.5/install-guide.html
# sudo apt-get install -y nvidia-container-toolkit-base || yay -Syu nvidia-container-toolkit || echo etc...

# 3. First build the docker image
docker build --tag "voicecraft" .

# 4. Try to start an existing container otherwise create a new one passing in all GPUs
./start-jupyter.sh  # linux
start-jupyter.bat   # windows

# 5. now open a webpage on the host box to the URL shown at the bottom of:
docker logs jupyter

# 6. optionally look inside from another terminal
docker exec -it jupyter /bin/bash
export USER=(your_linux_username_used_above)
export HOME=/home/$USER
sudo apt-get update

# 7. confirm video card(s) are visible inside container
nvidia-smi

# 8. Now in browser, open inference_tts.ipynb and work through one cell at a time
echo GOOD LUCK

Environment setup

conda create -n voicecraft python=3.9.16
conda activate voicecraft

pip install -e git+https://github.com/facebookresearch/audiocraft.git@c5157b5bf14bf83449c17ea1eeb66c19fb4bc7f0#egg=audiocraft
pip install xformers==0.0.22
pip install torchaudio==2.0.2 torch==2.0.1 # this assumes your system is compatible with CUDA 11.7, otherwise checkout https://pytorch.org/get-started/previous-versions/#v201
apt-get install ffmpeg # if you don't already have ffmpeg installed
apt-get install espeak-ng # backend for the phonemizer installed below
pip install tensorboard==2.16.2
pip install phonemizer==3.2.1
pip install datasets==2.16.0
pip install torchmetrics==0.11.1
pip install huggingface_hub==0.22.2
# install MFA for getting forced-alignment, this could take a few minutes
conda install -c conda-forge montreal-forced-aligner=2.2.17 openfst=1.8.2 kaldi=5.5.1068
# install MFA english dictionary and model
mfa model download dictionary english_us_arpa
mfa model download acoustic english_us_arpa
# pip install huggingface_hub
# conda install pocl # above gives an warning for installing pocl, not sure if really need this

# to run ipynb
conda install -n voicecraft ipykernel --no-deps --force-reinstall

如果你在运行过程中遇到版本问题,请查看 environment.yml 以进行精确匹配。

Inference Examples

查看 inference_speech_editing.ipynbinference_tts.ipynb

Gradio

Run in colab

Open in Colab

本地运行

环境配置完成后,安装额外的依赖项:

apt-get install -y espeak espeak-data libespeak1 libespeak-dev
apt-get install -y festival*
apt-get install -y build-essential
apt-get install -y flac libasound2-dev libsndfile1-dev vorbis-tools
apt-get install -y libxml2-dev libxslt-dev zlib1g-dev
pip install -r gradio_requirements.txt

从终端或 gradio_app.ipynb 运行 gradio 服务器:

python gradio_app.py

它已准备好在 默认 URL 上使用。

如何使用

  1. (可选)选择模型
  2. 加载模型
  3. 转录
  4. (可选)调整一些参数
  5. 运行
  6. (可选)在 Long TTS 模式下逐部分重新运行

一些功能

智能转录:只写入你想要生成的内容

TTS 模式:Zero-shot TTS

编辑模式:语音编辑

Long TTS 模式:长文本的简易 TTS

训练

要训练一个 VoiceCraft 模型,你需要准备以下部分:

  1. 语音及其转录文本
  2. 使用例如 Encodec 将语音编码为代码
  3. 将转录文本转换为音素序列,以及一个音素集(我们将其命名为 vocab.txt)
  4. 清单(即元数据)

步骤 1、2、3 在 ./data/phonemize_encodec_encode_hf.py 中处理,其中

  1. 通过 HuggingFace 下载 Gigaspeech。请注意,你需要签署协议才能下载该数据集(需要你的认证令牌)
  2. 音素序列和 encodec 代码也使用该脚本提取。

一个运行示例:

conda activate voicecraft
export CUDA_VISIBLE_DEVICES=0
cd ./data
python phonemize_encodec_encode_hf.py \
--dataset_size xs \
--download_to path/to/store_huggingface_downloads \
--save_dir path/to/store_extracted_codes_and_phonemes \
--encodec_model_path path/to/encodec_model \
--mega_batch_size 120 \
--batch_size 32 \
--max_len 30000

其中 encodec_model_path 可在 此处 获取。该模型在 Gigaspeech XL 上训练,具有 56M 参数,4 个码本,每个码本有 2048 个代码。详细信息在我们的 论文 中描述。如果在提取过程中遇到 OOM,请尝试减小 batch_size 和/或 max_len。 提取的代码、音素和 vocab.txt 将存储在 path/to/store_extracted_codes_and_phonemes/${dataset_size}/{encodec_16khz_4codebooks,phonemes,vocab.txt}

至于 manifest,请从此处下载 train.txt 和 validation.txt,并将它们放置在 path/to/store_extracted_codes_and_phonemes/manifest/ 下。如果您想使用我们预训练的 VoiceCraft 模型,请也从此处下载 vocab.txt(以便音素到 token 的匹配方式相同)。

现在,您可以开始训练了!

conda activate voicecraft
cd ./z_scripts
bash e830M.sh

准备你自己的自定义数据集也是同样的流程。请确保如果

微调

你也需要像训练一样执行步骤 1-4,并且如果你微调一个预训练模型,我建议使用 AdamW 进行优化以获得更好的稳定性。查看脚本 ./z_scripts/e830M_ft.sh

如果你的数据集引入了 giga 检查点中不存在的新音素(这很有可能),请确保在构建词汇表时将原始音素与你数据中的音素结合起来。并且你需要调整 --text_vocab_size--text_pad_token,使得前者大于或等于你的词汇表大小,而后者与 --text_vocab_size 具有相同的值(即 --text_pad_token 始终是最后一个 token)。此外,由于文本嵌入现在的大小不同,请确保你修改了权重加载部分,以免崩溃(你可以跳过加载 text_embedding 或仅加载现有部分,并随机初始化新的部分)

许可证

代码库采用 CC BY-NC-SA 4.0 许可证(LICENSE-CODE),模型权重采用 Coqui Public Model License 1.0.0 许可证(LICENSE-MODEL)。请注意,我们使用了来自其他仓库的一些代码,这些代码采用不同的许可证:./models/codebooks_patterns.py 采用 MIT 许可证;./models/modules./steps/optim.pydata/tokenizer.py 采用 Apache License, Version 2.0;我们使用的 phonemizer 采用 GNU 3.0 许可证。

致谢

我们感谢 Feiteng 的 VALL-E 复现,并感谢 audiocraft 团队开源了 encodec

引用

@article{peng2024voicecraft,
  author    = {Peng, Puyuan and Huang, Po-Yao and Mohamed, Abdelrahman and Harwath, David},
  title     = {VoiceCraft: Zero-Shot Speech Editing and Text-to-Speech in the Wild},
  journal   = {arXiv},
  year      = {2024},
}

免责声明

任何组织或个人均禁止未经本人同意,使用本文提及的任何技术来生成或编辑他人的语音,包括但不限于政府领导人、政治人物和名人。如果您不遵守此项规定,可能会违反版权法。