parler-tts

2个月前发布 20 0 0

Parler-TTS 是一种轻量级的文本转语音 (TTS) 模型,可以生成具有给定说话者风格(性别、音调、说话风格等)的高质量、自然的语音。

收录时间:
2025-02-23
parler-ttsparler-tts

Parler-TTS

Parler-TTS 是一种轻量级的文本转语音 (TTS) 模型,可以生成具有给定说话者风格(性别、音调、说话风格等)的高质量、自然的语音。它是论文《使用合成注释实现高保真文本转语音的自然语言指导》的复刻,该论文由 Stability AI 和爱丁堡大学的 Dan Lyth 和 Simon King 撰写。

与其他 TTS 模型不同,Parler-TTS 是一个完全开源的版本。所有数据集、预处理、训练代码和权重均在许可下公开发布,使社区能够在我们的工作基础上开发自己的强大 TTS 模型。

此存储库包含 Parler-TTS 的推理和训练代码。它旨在与Data-Speech存储库配合使用,用于数据集注释。

重要的

2024 年 8 月 8 日:我们很荣幸发布两个新的 Parler-TTS 检查点:

  1. Parler-TTS Mini,880M参数模型。
  2. Parler-TTS Large,2.3B 参数模型。

这些检查点已经根据 45,000 小时的有声读物数据进行了训练。

此外,代码还针对更快的生成进行了优化:我们增加了 SDPA 和 Flash Attention 2 兼容性,以及编译模型的能力。

📖 快速索引

安装

Parler-TTS 具有轻量级依赖项,只需一行即可安装:

pip install git+https://github.com/huggingface/parler-tts.git

Apple Silicon 用户需要运行后续命令才能使用夜间 PyTorch (2.4) 版本来支持 bfloat16:

pip3 install --pre torch torchaudio --index-url https://download.pytorch.org/whl/nightly/cpu

用法

提示

您可以在此处的交互式演示中直接尝试它!

使用 Parler-TTS 就像“bonjour”一样简单。只需安装一次库即可:

pip install git+https://github.com/huggingface/parler-tts.git

🎲 随机声音

Parler-TTS经过训练,可以生成具有可通过简单文本提示控制的功能的语音,例如:

import torch
from parler_tts import ParlerTTSForConditionalGeneration
from transformers import AutoTokenizer
import soundfile as sf

device = "cuda:0" if torch.cuda.is_available() else "cpu"

model = ParlerTTSForConditionalGeneration.from_pretrained("parler-tts/parler-tts-mini-v1").to(device)
tokenizer = AutoTokenizer.from_pretrained("parler-tts/parler-tts-mini-v1")

prompt = "Hey, how are you doing today?"
description = "A female speaker delivers a slightly expressive and animated speech with a moderate speed and pitch. The recording is of very high quality, with the speaker's voice sounding clear and very close up."

input_ids = tokenizer(description, return_tensors="pt").input_ids.to(device)
prompt_input_ids = tokenizer(prompt, return_tensors="pt").input_ids.to(device)

generation = model.generate(input_ids=input_ids, prompt_input_ids=prompt_input_ids)
audio_arr = generation.cpu().numpy().squeeze()
sf.write("parler_tts_out.wav", audio_arr, model.config.sampling_rate)

🎯 使用特定的扬声器

为了确保说话者在各个世代的一致性,该检查点还针对 34 位说话者进行了训练,这些说话者以名字为特征。可用说话者的完整列表包括:Laura、Gary、Jon、Lea、Karen、Rick、Brenda、David、Eileen、Jordan、Mike、Yann、Joy、James、Eric、Lauren、Rose、Will、Jason、Aaron、Naomie、Alisa、Patrick、Jerry、Tina、Jenna、Bill、Tom、Carol、Barbara、Rebecca、Anna、Bruce、Emily。

要利用此功能,只需调整文本描述以指定要使用的扬声器:Jon's voice is monotone yet slightly fast in delivery, with a very close recording that almost has no background noise.

您可以将“Jon”替换为上面列表中的任意一个名字,以利用不同的扬声器特性。每个扬声器都有独特的声音品质,可以利用这些品质来满足您的特定需求。有关扬声器性能和语音一致性的更多详细信息,请参阅推理指南

import torch
from parler_tts import ParlerTTSForConditionalGeneration
from transformers import AutoTokenizer
import soundfile as sf

device = "cuda:0" if torch.cuda.is_available() else "cpu"

model = ParlerTTSForConditionalGeneration.from_pretrained("parler-tts/parler-tts-mini-v1").to(device)
tokenizer = AutoTokenizer.from_pretrained("parler-tts/parler-tts-mini-v1")

prompt = "Hey, how are you doing today?"
description = "Jon's voice is monotone yet slightly fast in delivery, with a very close recording that almost has no background noise."

input_ids = tokenizer(description, return_tensors="pt").input_ids.to(device)
prompt_input_ids = tokenizer(prompt, return_tensors="pt").input_ids.to(device)

generation = model.generate(input_ids=input_ids, prompt_input_ids=prompt_input_ids)
audio_arr = generation.cpu().numpy().squeeze()
sf.write("parler_tts_out.wav", audio_arr, model.config.sampling_rate)

尖端

  • 包括术语“非常清晰的音频”以生成最高质量的音频,以及“非常嘈杂的音频”以产生高水平的背景噪音
  • 标点符号可用于控制代际韵律,例如使用逗号在语音中添加小停顿
  • 其余语音特征(性别、语速、音调和混响)可以通过提示直接控制

✨ 优化推理速度

我们已设置推理指南以加快生成速度。想想 SDPA、torch.compile 和流媒体!

训练

parler-tts

训练文件夹包含训练或微调您自己的 Parler-TTS 模型的所有信息。它包括:

重要的

TL;DR:按照安装步骤操作后,您可以使用以下命令行重现 Parler-TTS Mini v1 训练方案:

accelerate launch ./training/run_parler_tts_training.py ./helpers/training_configs/starting_point_v1.json

重要的

您还可以按照此指南对单声道扬声器数据集示例进行微调。

数据统计

相关导航