VoiceCraft: 野外零样本语音编辑与文本转语音
TL;DR
VoiceCraft 是一种 token 填充神经编解码语言模型,在包括有声书、网络视频和播客在内的真实场景数据上,于语音编辑和**零样本文本转语音(TTS)**任务中均达到了最先进的性能。
要克隆或编辑一个未见过的声音,VoiceCraft 仅需几秒钟的参考音频。
如何运行推理
除了在 Colab 中运行 Gradio 之外,有三种方式:
- More flexible inference beyond Gradio UI in Google Colab. see quickstart colab
- with docker. see quickstart docker
- without docker. see environment setup. You can also run gradio locally if you choose this option
- 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.py 或 inference_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 本身中。
- To try Speech Editing
- 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.ipynb 和 inference_tts.ipynb
Gradio
Run 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 上使用。
如何使用
- (可选)选择模型
- 加载模型
- 转录
- (可选)调整一些参数
- 运行
- (可选)在 Long TTS 模式下逐部分重新运行
一些功能
智能转录:只写入你想要生成的内容
TTS 模式:Zero-shot TTS
编辑模式:语音编辑
Long TTS 模式:长文本的简易 TTS
训练
要训练一个 VoiceCraft 模型,你需要准备以下部分:
- 语音及其转录文本
- 使用例如 Encodec 将语音编码为代码
- 将转录文本转换为音素序列,以及一个音素集(我们将其命名为 vocab.txt)
- 清单(即元数据)
步骤 1、2、3 在 ./data/phonemize_encodec_encode_hf.py 中处理,其中
- 通过 HuggingFace 下载 Gigaspeech。请注意,你需要签署协议才能下载该数据集(需要你的认证令牌)
- 音素序列和 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.py、data/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},
}
免责声明
任何组织或个人均禁止未经本人同意,使用本文提及的任何技术来生成或编辑他人的语音,包括但不限于政府领导人、政治人物和名人。如果您不遵守此项规定,可能会违反版权法。