
VoiceCraft:零样本语音编辑和文本转语音
VoiceCraft是一款新型语音模型,支持克隆语音和修改音频文本。据称其性能超越了XTTS,引起了业界关注。模型具有强大的音频克隆能力和编辑功能,专注于零样本语音编辑和文本到语音(TTS)任务。该模型采用Transformer架构,通过创新的token重排过程,结合因果掩蔽和延迟叠加技术,可零样本实现在现有音频序列内的高效生成。VoiceCraft在多种口音、风格和噪声条件下的语音编辑和TTS任务上展现出卓越性能,生成的语音自然甚至难以与原声区分。
⭐ 要尝试使用 VoiceCraft 进行语音编辑或 TTS 推理,最简单的方法是使用 Google Colab。运行说明在 Colab 上。
⭐ 要将其用作独立脚本,请查看 tts_demo.py 和 Speech_editing_demo.py。请务必先设置您的环境。如果没有参数,它们将运行此存储库中其他地方用作示例的标准演示参数。您可以使用命令行参数来指定唯一的输入音频、目标成绩单和推理超参数。运行 help 命令以获取更多信息: python3 tts_demo.py -h
⭐ 要尝试使用 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
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_speech_editing.ipynb
和inference_tts.ipynb
环境设置完成后安装其他依赖项:
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 服务器或者gradio_app.ipynb
:
python gradio_app.py
它已准备好在默认 URL上使用。
- (可选)选择型号
- 加载模型
- 录制
- (可选)调整一些参数
- 跑步
- (可选)在长 TTS 模式下逐部分重新运行
智能转录:只写您想要生成的内容
TTS 模式:零样本 TTS
编辑模式:语音编辑
长 TTS 模式:轻松对长文本进行 TTS
要训练 VoiceCraft 模型,您需要准备以下部分:
- 言论及其记录
- 使用 Encodec 将话语编码成代码
- 将转录文本转换为音素序列和音素集(我们将其命名为 vocab.txt)
- 清单(即元数据)
步骤 1、2、3 在./data/phonemize_encodec_encode_hf.py中处理,其中
- Gigaspeech 是通过 HuggingFace 下载的。请注意,您需要签署协议才能下载数据集(需要您的身份验证令牌)
- 还使用该脚本提取音素序列和编解码器代码。
运行示例:
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}
。
至于清单,请从此处下载 train.txt 和 validation.txt ,并将它们放在 下。如果您想使用我们预先训练的 VoiceCraft 模型(以便音素到标记的匹配相同),请从此处path/to/store_extracted_codes_and_phonemes/manifest/
下载 vocab.txt 。
现在,您可以开始训练了!
conda activate voicecraft
cd ./z_scripts
bash e830M.sh
准备自定义数据集的过程与此相同。请确保
您还需要执行步骤 1-4 进行训练,如果您对预训练模型进行微调以获得更好的稳定性,我建议使用 AdamW 进行优化。检查脚本./z_scripts/e830M_ft.sh
。
如果您的数据集引入了千兆检查点中不存在的新音素(这很有可能),请确保在构建词汇时将原始音素与数据中的音素相结合。并且您需要调整--text_vocab_size
和,--text_pad_token
使前者大于或等于您的词汇大小,而后者具有与相同的值--text_vocab_size
(即--text_pad_token
始终是最后一个标记)。此外,由于文本嵌入现在的大小不同,请确保修改权重加载部分,以免崩溃(您可以跳过加载text_embedding
或仅加载现有部分,并随机初始化新部分)
数据统计
相关导航


FunASR

edge-tts

ChatTTS
