StyleTTS2

GitHub
6.2k 670 较难 1 次阅读 昨天MIT音频开发框架图像
AI 解读 由 AI 自动生成,仅供参考

StyleTTS 2 是一款旨在实现“人类级别”合成效果的文生语音(TTS)开源模型。它主要解决了传统语音合成在自然度上略显机械、以及多说话人场景下难以灵活适应不同音色的痛点,让机器生成的语音在听感上几乎无法与真人录音区分。

这款工具特别适合语音技术研究人员、AI 开发者以及需要高质量语音素材的内容创作者使用。其核心亮点在于创新性地结合了“风格扩散模型”与“对抗训练”技术:无需参考录音,它能通过扩散模型自动为文本匹配最合适的语气风格;同时利用 WavLM 等大型语音语言模型作为判别器,显著提升了语音的自然流畅度。实验数据显示,StyleTTS 2 在单说话人数据集上已超越真人录音水平,在多说话人及零样本音色适配任务中也表现卓越,是目前公开模型中的佼佼者。无论是希望深入探索前沿 TTS 算法的研究者,还是寻求极致语音体验的开发者,StyleTTS 2 都提供了强大的技术支持和便捷的微调方案。

使用场景

一家专注于有声书制作的初创团队,正试图将大量公版经典小说快速转化为高质量的多人物对话音频,以降低成本并缩短上市周期。

没有 StyleTTS2 时

  • 录音成本高昂:必须聘请多位专业配音演员分角色录制,导致单本书的制作预算居高不下,且协调档期耗时漫长。
  • 情感表达僵硬:传统 TTS 工具生成的语音机械感强,难以根据文本语境自动切换愤怒、悲伤或幽默等细腻语气,听众体验差。
  • 零样本适配困难:若想模仿特定知名主播的音色,通常需要采集该人长达数小时的干音进行微调,数据门槛极高且效果往往不尽如人意。
  • 后期处理繁琐:由于合成音质不自然,后期工程师需花费大量时间手动调整语调、停顿和呼吸声,严重拖慢交付进度。

使用 StyleTTS2 后

  • 实现真人级合成:StyleTTS2 利用风格扩散模型,无需参考音频即可为不同段落自动生成最贴合语境的说话风格,听感几乎与真人录音无异。
  • 高效零样本变声:仅需几秒的目标人声样本,StyleTTS2 即可通过预训练的大规模语音语言模型(如 WavLM)精准复刻其音色与说话习惯,瞬间创建新角色。
  • 端到端自然度提升:得益于对抗性训练和可微分时长建模,生成的语音在韵律、呼吸和连读上极其流畅,大幅减少了人工后期修音的工作量。
  • 规模化生产落地:团队现在只需输入文本和角色设定,即可批量产出多角色互动的有声剧,将单本书的制作周期从数周压缩至数小时。

StyleTTS2 通过突破性的风格扩散与对抗训练技术,真正实现了低成本、高自然度的“人类级别”语音合成,彻底重塑了音频内容的生产流程。

运行环境要求

操作系统
  • Linux
  • Windows
GPU

需要 NVIDIA GPU (训练示例提及使用 4 张 A100),需安装 CUDA 11.8 (Windows 明确指定 cu118),显存需求取决于 batch_size 和 max_len,遇到 OOM 需降低这两个参数

内存

未说明

依赖
notes1. Windows 用户需手动安装特定 CUDA 版本的 torch 系列库。2. 运行演示需安装 phonemizer 及系统级依赖 espeak-ng (Linux: sudo apt-get install espeak-ng)。3. 第二阶段训练及微调脚本目前仅支持 DP (数据并行),DDP (分布式数据并行) 存在已知问题尚未修复,单卡微调可使用 accelerate 开启 fp16 混合精度以节省显存。4. 训练数据需预处理为 24kHz。5. 非英语语言训练需替换对应的 PL-BERT 模型。
python>=3.7
torch
torchvision
torchaudio
phonemizer
accelerate
StyleTTS2 hero image

快速开始

StyleTTS 2:通过风格扩散与对抗训练结合大型语音语言模型实现人类水平的文本到语音合成

袁浩·李、韩聪、文尼·R·拉加万、加文·米施勒、尼玛·梅斯加拉尼

在本文中,我们提出了StyleTTS 2,这是一种文本到语音(TTS)模型,它利用风格扩散和与大型语音语言模型(SLM)结合的对抗训练,以实现人类水平的TTS合成。StyleTTS 2与其前代模型的不同之处在于,它通过扩散模型将风格建模为一个潜在的随机变量,从而在无需参考语音的情况下生成最适合文本的风格,在享受扩散模型提供的多样化语音合成的同时,实现了高效的潜在扩散。此外,我们还使用了如WavLM等大型预训练SLM作为判别器,并结合我们新颖的可微分时长建模进行端到端训练,从而进一步提升了语音的自然度。StyleTTS 2在单说话人LJSpeech数据集上的表现超越了真人录音,而在多说话人VCTK数据集上则与真人录音相当,这一评价由以英语为母语的听者做出。更进一步地,在LibriTTS数据集上训练后,我们的模型在零样本说话人适配上优于此前公开可用的模型。这项工作首次在单说话人和多说话人数据集上均实现了人类水平的TTS合成,展示了风格扩散与大型SLM结合对抗训练的巨大潜力。

论文:https://arxiv.org/abs/2306.07691

音频示例:https://styletts2.github.io/

在线演示:Hugging Face(感谢@fakerybakery提供的精彩在线演示)

在Colab中打开 Discord

待办事项

  • 单说话人模型(LJSpeech)的训练与推理演示代码
  • 多说话人模型(VCTK和LibriTTS)的测试训练代码
  • 完成多说话人模型的演示代码并上传预训练模型
  • 添加基于基础多说话人预训练模型对新说话人的微调脚本
  • 修复train_second.py中的DDP(加速器)问题 (我已经尝试了所有能想到的方法来解决这个问题,但仍未成功,因此如果您愿意帮忙,请参阅#7)

前置条件

  1. Python >= 3.7
  2. 克隆本仓库:
git clone https://github.com/yl4579/StyleTTS2.git
cd StyleTTS2
  1. 安装Python依赖:
pip install -r requirements.txt

在Windows系统上还需添加:

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 -U

如果您想运行演示,还需要安装phonemizer和espeak:

pip install phonemizer
sudo apt-get install espeak-ng
  1. 下载并解压LJSpeech数据集,解压到data文件夹,并将数据上采样至24 kHz。文本对齐器和音高提取器是在24 kHz数据上预训练的,但您可以轻松更改预处理方式并使用您自己的预处理流程重新训练它们。 对于LibriTTS,您需要将train-clean-360与train-clean-100合并,并重命名为train-clean-460文件夹(请参阅val_list_libritts.txt作为示例)。

训练

第一阶段训练:

accelerate launch train_first.py --config_path ./Configs/config.yml

第二阶段训练 (DDP版本无法正常工作,因此当前版本使用DP,如果您想帮忙,请再次参阅#7)

python train_second.py --config_path ./Configs/config.yml

您可以连续运行这两个命令,这样就能同时完成第一和第二阶段的训练。模型将以“epoch_1st_%05d.pth”和“epoch_2nd_%05d.pth”的格式保存。检查点和Tensorboard日志将保存在log_dir目录下。

数据列表的格式应为“filename.wav|转录文本|说话人”,请参阅val_list.txt作为示例。多说话人模型需要说话人标签,因为我们需要为风格扩散模型的训练采集参考音频。

重要配置

config.yml中,有几项重要的配置需要注意:

  • OOD_data:用于SLM对抗训练的分布外文本路径。格式应为“文本|任意内容”。
  • min_length:用于训练的分布外文本的最小长度。这是为了确保合成的语音具有一定的最小长度。
  • max_len:用于训练的最大音频长度。单位为帧。由于默认的跳过步长为300,一帧大约是“300 / 24000”(0.0125)秒。如果您遇到内存不足的问题,可以适当降低此值。
  • multispeaker:如果要训练多说话人模型,请将其设置为真。这是因为单说话人和多说话人模型的去噪器架构不同。
  • batch_percentage:此参数用于确保在SLM对抗训练过程中不会出现内存不足(OOM)的情况。如果您遇到OOM问题,请降低此数值。

预训练模块

Utils文件夹中,有三个预训练模型:

  • ASR文件夹:其中包含预训练的文本对齐器,该模型已在英语(LibriTTS)、日语(JVS)和中文(AiShell)语料库上进行了预训练。它在大多数其他语言上无需微调即可良好工作,但您也可以使用此处的代码训练您自己的文本对齐器:yl4579/AuxiliaryASR
  • JDC文件夹:其中包含预训练的音高提取器,该模型仅在英语(LibriTTS)语料库上进行了预训练。然而,由于F0与语言无关,它在其他语言上也能很好地工作。如果您想在歌唱语料库上训练,建议使用此处的代码训练一个新的音高提取器:yl4579/PitchExtractor
  • PLBERT文件夹:其中包含预训练的PL-BERT模型,该模型仅在英语(维基百科)语料库上进行了预训练。它可能在其他语言上效果不佳,因此您需要使用此处的仓库为不同语言训练不同的PL-BERT:yl4579/PL-BERT。您也可以使用支持14种语言的多语言PL-BERT

常见问题

  • 损失变为 NaN:如果是第一阶段,请确保不要使用混合精度训练,因为在某些特定数据集上,当批量大小设置不当(需要大于 16 才能正常工作)时,可能会导致损失变为 NaN。对于第二阶段,也请尝试不同的批量大小,较大的批量大小更容易导致损失值为 NaN。我们建议将批量大小设置为 16。更多详情可参考议题 #10#11
  • 显存不足:请降低 batch_sizemax_len。更多信息可参考议题 #10
  • 非英语数据集:您可以使用任何语言进行训练,但需要使用该语言的预训练 PL-BERT 模型。我们提供了一个支持 14 种语言的多语言 PL-BERT 模型,可在 Hugging Face 上找到。关于如何使用中文数据集进行训练的示例,可参考 yl4579/StyleTTS#10#70

微调

该脚本基于使用 DP 的 train_second.py 修改而来,因为 DDP 在 train_second.py 中无法正常工作。如果您愿意帮助解决这个问题,请参阅上方加粗部分。

python train_finetune.py --config_path ./Configs/config_ft.yml

请确保您已下载并解压 LibriTTS 检查点文件到指定文件夹中。默认配置 config_ft.yml 会在 LJSpeech 数据集上进行微调,使用约 1 小时的语音数据(约 1000 个样本),训练 50 个 epoch。在四块 NVidia A100 显卡上完成此任务大约需要 4 小时。其生成的音质略逊于从头开始训练、使用 24 小时语音数据的 LJSpeech 模型,后者在四块 A100 上大约需要 2.5 天才能完成。相关样本可在 #65 (评论) 中查看。

如果您使用的是单 GPU(因为该脚本不支持 DDP),并且希望节省训练时间和显存,可以按照以下方式操作(感谢 @korakoe#100 中提供的脚本):

accelerate launch --mixed_precision=fp16 --num_processes=1 train_finetune_accelerate.py --config_path ./Configs/config_ft.yml

在 Colab 中打开

常见问题

@Kreevoz 对微调中的常见问题进行了详细说明,并提出了提升音频质量的建议:#81。其中一些内容同样适用于从零开始训练。@IIEleven11 也提供了一份微调指南:#128

  • joint_epoch 后显存不足:这很可能是由于您的 GPU 显存不足以运行 SLM 对抗训练。您可以跳过这一部分,但音质可能会有所下降。将 joint_epoch 设置为大于 epochs 的值,即可跳过 SLM 对抗训练。

推理

有关详细信息,请参阅 Inference_LJSpeech.ipynb(单说话人)和 Inference_LibriTTS.ipynb(多说话人)。对于 LibriTTS,您还需要下载 reference_audio.zip,并在运行演示之前将其解压到 demo 文件夹中。

您可以在自己的代码中导入 StyleTTS 2 并运行它。然而,推理过程依赖于 GPL 许可的软件包,因此未直接包含在本仓库中。一个 GPL 许可的分支 提供了可导入的脚本以及实验性的流式 API 等功能。此外,还有一个 完全 MIT 许可的软件包,它使用 gruut,尽管由于发音器与 gruut 之间的不匹配,音质稍低。

在使用这些预训练模型之前,您需同意告知听众,这些语音样本是由预训练模型合成的,除非您已获得被合成声音所有者的许可。也就是说,您必须仅使用那些已明确授权克隆其声音的说话人的语音,无论是通过直接许可还是通过授权协议,在公开合成语音之前;或者,如果您未获得此类许可,则必须公开声明这些语音是合成的。

常见问题

  • 背景噪音过高:这是由旧款 GPU 中的浮点数差异引起的。更多详情请参阅议题 #13。通常情况下,您需要使用更新的 GPU 或在 CPU 上进行推理。
  • 预训练模型的许可:只有在您使用预训练模型且所用语音不在训练集中时,才需要遵守上述规则,即您的参考说话人并非来自任何开放获取的数据集。有关使用预训练模型的具体规则,请参阅 #37

参考文献

许可证

代码:MIT 许可证

预训练模型:在使用这些预训练模型之前,您需同意告知听众,相关语音样本是由预训练模型合成的,除非您已获得被合成声音所有者的许可。换言之,您承诺仅使用那些其持有人已明确授权进行声音克隆的语音——无论是直接授权还是通过许可协议——方可公开发布合成语音;否则,您必须公开声明这些语音为合成音,若您未取得相应授权。

常见问题

相似工具推荐

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|今天
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

139k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.7k|★★☆☆☆|2天前
开发框架图像Agent

NextChat

NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

87.6k|★★☆☆☆|今天
开发框架语言模型

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|昨天
Agent图像开发框架