Tortoise
Tortoise 是一个文本转语音程序,具有以下优先级:
- 强大的多语音能力。
- 高度逼真的语调和语气。
这个仓库包含了运行 Tortoise TTS 推理模式所需的所有代码。
手稿:https://arxiv.org/abs/2305.07243
Hugging Face Space
一个实时演示托管在 Hugging Face Spaces 上。如果您想避免排队,请复制 Space 并添加 GPU。请注意,仅使用 CPU 的空间无法运行此演示。
https://huggingface.co/spaces/Manmay/tortoise-tts
通过 pip 安装
pip install tortoise-tts
如果您想安装最新的开发版本,也可以直接从 git 仓库安装:
pip install git+https://github.com/neonbjb/tortoise-tts
名字的由来
我以 Mojave 沙漠的植物和动物为我的语音相关仓库命名。Tortoise 这个名字有点戏谑:这个模型非常慢。它结合了自回归解码器和扩散解码器,这两者都以低采样率著称。在 K80 上,生成一个中等长度的句子大约需要 2 分钟。
不过......现在它已经不那么慢了,我们可以在 4GB 显存上获得 0.25-0.3 RTF,并且使用流式处理可以实现小于 500 毫秒 的延迟!!!
演示
查看此页面以获取大量示例输出。
一个 Tortoise 和 GPT-3 的酷应用(与本仓库无关):https://twitter.com/lexman_ai。不幸的是,这个项目似乎已经不再活跃。
使用指南
本地安装
如果你想在自己的电脑上使用它,你必须拥有 NVIDIA GPU。
在 Windows 上,我强烈推荐使用 Conda 安装方法。据说如果你不这样做,你会花费大量时间追逐依赖问题。
首先,安装 miniconda:https://docs.conda.io/en/latest/miniconda.html
然后使用 anaconda prompt 作为终端(或其他任何配置为与 conda 一起使用的终端)运行以下命令
这将:
- 创建一个指定了最低依赖项的 conda 环境
- 激活该环境
- 使用此处提供的命令安装 pytorch:https://pytorch.org/get-started/locally/
- 克隆 tortoise-tts
- 将当前目录更改为 tortoise-tts
- 运行 tortoise python 安装脚本
conda create --name tortoise python=3.9 numba inflect
conda activate tortoise
conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia
conda install transformers=4.29.2
git clone https://github.com/neonbjb/tortoise-tts.git
cd tortoise-tts
python setup.py install
可选地,可以在基础环境中安装 pytorch,以便其他 conda 环境也能使用它。为此,只需在激活 tortoise 环境之前发送 conda install pytorch...
行即可。
注意: 当你想使用 tortoise-tts 时,你必须确保已激活
tortoise
conda 环境。
如果你在 Windows 上,你可能还需要安装 pysoundfile:conda install -c conda-forge pysoundfile
Docker
根据你的用例,这是一个轻松上手的好方法。
git clone https://github.com/neonbjb/tortoise-tts.git
cd tortoise-tts
docker build . -t tts
docker run --gpus all \
-e TORTOISE_MODELS_DIR=/models \
-v /mnt/user/data/tortoise_tts/models:/models \
-v /mnt/user/data/tortoise_tts/results:/results \
-v /mnt/user/data/.cache/huggingface:/root/.cache/huggingface \
-v /root:/work \
-it tts
这将为你提供一个交互式终端,在一个准备好进行 tts 的环境中。现在你可以探索 tortoise 提供的不同 tts 接口。
例如:
cd app
conda activate tortoise
time python tortoise/do_tts.py \
--output_path /results \
--preset ultra_fast \
--voice geralt \
--text "Time flies like an arrow; fruit flies like a banana."
Apple Silicon
在搭载 M1/M2 芯片的 macOS 13+ 上,你需要安装 PyTorch 的 nightly 版本,正如官方页面所述,你可以这样做:
pip3 install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cpu
确保在激活环境后执行此操作。如果你不使用 conda,命令如下所示:
python3.10 -m venv .venv
source .venv/bin/activate
pip install numba inflect psutil
pip install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cpu
pip install transformers
git clone https://github.com/neonbjb/tortoise-tts.git
cd tortoise-tts
pip install .
请注意,DeepSpeed 在 Apple Silicon 上被禁用,因为它不起作用。--use_deepspeed
参数将被忽略。由于 MPS 不支持 Pytorch 中的所有操作,可能需要在以下命令前添加 PYTORCH_ENABLE_MPS_FALLBACK=1
使其正常工作。
do_tts.py
这个脚本允许你用一个或多个声音说一句话。
python tortoise/do_tts.py --text "I'm going to speak this" --voice random --preset fast
执行 socket 流式传输
python tortoise/socket_server.py
将在端口 5000 进行监听
更快的推理 read.py
此脚本提供了阅读大量文本的工具。
python tortoise/read_fast.py --textfile <your text to be read> --voice random
read.py
此脚本提供了阅读大量文本的工具。
python tortoise/read.py --textfile <your text to be read> --voice random
这将把文本文件分成句子,然后逐个将它们转换为语音。生成后,它将输出一系列语音片段。一旦所有片段生成完毕,它还将它们组合成一个单一文件并输出。
有时 Tortoise 会搞砸输出。你可以通过使用 --regenerate
参数重新运行 read.py
来重新生成任何不好的片段。
API
Tortoise 可以通过编程方式使用,如下所示:
reference_clips = [utils.audio.load_audio(p, 22050) for p in clips_paths]
tts = api.TextToSpeech()
pcm_audio = tts.tts_with_preset("your text here", voice_samples=reference_clips, preset='fast')
要使用 deepspeed:
reference_clips = [utils.audio.load_audio(p, 22050) for p in clips_paths]
tts = api.TextToSpeech(use_deepspeed=True)
pcm_audio = tts.tts_with_preset("your text here", voice_samples=reference_clips, preset='fast')
要使用 kv 缓存:
reference_clips = [utils.audio.load_audio(p, 22050) for p in clips_paths]
tts = api.TextToSpeech(kv_cache=True)
pcm_audio = tts.tts_with_preset("your text here", voice_samples=reference_clips, preset='fast')
以 float16 运行模型:
reference_clips = [utils.audio.load_audio(p, 22050) for p in clips_paths]
tts = api.TextToSpeech(half=True)
pcm_audio = tts.tts_with_preset("your text here", voice_samples=reference_clips, preset='fast')
为了更快的运行,可以同时使用这三个选项:
reference_clips = [utils.audio.load_audio(p, 22050) for p in clips_paths]
tts = api.TextToSpeech(use_deepspeed=True, kv_cache=True, half=True)
pcm_audio = tts.tts_with_preset("your text here", voice_samples=reference_clips, preset='fast')
鸣谢
这个项目获得的赞誉比我预期的要多。不过,我是在巨人的肩膀上站着的,我想感谢一些社区中的优秀人士,他们帮助实现了这一切:
- Hugging Face,编写了 Tortoise 使用的 GPT 模型和生成 API,并托管了模型权重。
- Ramesh 等人撰写了 DALLE 论文,这是 Tortoise 的灵感来源。
- [Nichol 和 Dhariwal](https://arxiv.org