自然人声合成Orpheus-TTS

项目简介

终于有研究中文的音色、自然度、拟人度的 TTS 了。Orpheus TTS 是基于 Llama-3b 骨干网络的 SOTA 开源文本到语音系统。Orpheus 展示了使用 LLMs 进行语音合成的涌现能力。

能力

  • 类人语音:自然语调、情感和节奏,优于 SOTA 闭源模型
  • 零样本语音克隆:无需预先微调即可克隆声音
  • 指导情感和语调:通过简单的标签控制语音和情感特征
  • 低延迟:实时应用中约为 200 毫秒的流延迟,通过输入流可降低至约 100 毫秒

模型

我们提供 2 个英语模型,此外我们还提供数据处理脚本和样本数据集,以便您轻松创建自己的微调版本。

  1. 微调产品 – 适用于日常 TTS 应用的微调模型

  2. 预训练 – 我们的基础模型在超过 10 万小时的英语语音数据上训练

我们还提供了一组多语言模型的研究版

  1. 多语言系列 – 7 对预训练和微调模型。

推理

在 colab 上的简单设置

我们提供跨语言的标准化提示格式,这些笔记本展示了如何用英语使用我们的模型。

  1. Colab For Tuned Model(非流式,见下文实时流式)- 适用于日常 TTS 应用的微调模型。
  2. Colab 预训练模型 – 此笔记本已设置用于条件生成,但可以扩展到一系列任务。


流式推理示例

克隆此仓库

git clone https://github.com/canopyai/Orpheus-TTS.git

导航并安装包

cd Orpheus-TTS && pip install orpheus-speech # uses vllm under the hood for fast inference
  1. vllm 于 3 月 18 日推送了一个略微有问题的版本,因此一些问题正在通过回滚到 pip install vllm==0.7.3 之后 pip install orpheus-speech 来解决
  2. Run the example below:
    运行以下示例:
from orpheus_tts import OrpheusModelimport waveimport time
model = OrpheusModel(model_name ="canopylabs/orpheus-tts-0.1-finetune-prod")prompt = '''Man, the way social media has, um, completely changed how we interact is just wild, right? Like, we're all connected 24/7 but somehow people feel more alone than ever. And don't even get me started on how it's messing with kids' self-esteem and mental health and whatnot.'''
start_time = time.monotonic()syn_tokens = model.generate_speech(   prompt=prompt,   voice="tara",   )
with wave.open("output.wav""wb"as wf:   wf.setnchannels(1)   wf.setsampwidth(2)   wf.setframerate(24000)
   total_frames = 0   chunk_counter = 0   for audio_chunk in syn_tokens: # output streaming      chunk_counter += 1      frame_count = len(audio_chunk) // (wf.getsampwidth() * wf.getnchannels())      total_frames += frame_count      wf.writeframes(audio_chunk)   duration = total_frames / wf.getframerate()
   end_time = time.monotonic()   print(f"It took {end_time - start_time} seconds to generate {duration:.2f} seconds of audio")

预训练模型

这是一个非常简单的过程,类似于使用 Trainer 和 Transformers 训练LLM。

提供的基模型训练了 10 万小时。我建议不要使用合成数据进行训练,因为当您尝试微调特定声音时,它会产生更差的结果,这可能是由于合成声音缺乏多样性,并且在分词时映射到相同的令牌集(即导致代码簿利用率低)。

我们在长度为 8192 的序列上训练 3b 模型,我们使用相同的数据集格式进行 TTS 微调的预训练。我们将输入_ids 序列连接起来以提高训练效率。所需的文本数据集格式如本问题#37 所述。

如果您要进行扩展训练此模型,即用于其他语言或风格,我们建议仅从微调开始(没有文本数据集)。文本数据集背后的主要思想在博客文章中有讨论。(总结;不要忘记太多语义/推理能力,这样它才能更好地理解如何发音/表达短语,然而大部分的遗忘会在训练初期发生,即<100000 行),除非您进行非常扩展的微调,否则可能不会有太大的影响。



项目链接

https://github.com/canopyai/Orpheus-TTS

扫码加入技术交流群,备注开发语言-城市-昵称

(文:GitHubStore)

发表评论