GPT-SoVITS:零样本语音合成AI

news2024/11/24 18:42:27

GPT-SoVITS 是一种语音合成模型,于 2024 年 2 月 18 日发布。它支持使用参考音频进行零样本语音合成,并且可以进行微调以提高性能。

GPT-SoVITS 的功能特性包括:

  • Zero-Shot TTS:零样本语音合成,输入 5 秒音频样本即可立即合成语音。
  • Few-Shot TTS:小样本语音合成,仅使用 1 分钟的训练数据对模型进行微调,以增强语音相似度和真实感。
  • 跨语言支持:支持从训练数据中推断不同语言,目前支持英语、日语和中文。
  • WebUI 工具:提供语音和伴奏分离、自动训练集分割、中文 ASR(自动语音识别)和文本标记的集成工具,支持创建训练数据集和构建 GPT/SoVITS 模型。

NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - AI模型在线查看 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割

2、先前的研究

GPT-SoVITS 基于语音合成和语音转换器模型的最新研究。

VITS 是 2021 年 1 月发布的端到端语音合成模型。与将文本转换为中间表示的两阶段 TTS 系统相比,传统的端到端语音合成模型性能较低。VITS 通过引入 Flow 模型、结合规范化流以消除说话者特征以及使用对抗性训练过程来提高语音合成性能。

Source: https://arxiv.org/abs/2106.06103

VITS2 是一个端到端语音合成模型,于 2023 年 7 月发布,VITS 的开发者之一 Jungil Kong 是第二作者。它用 Transformer Flow 取代了 VITS 中的 Flow 模型。传统的端到端语音合成模型面临着不自然、计算效率和对音素转换的依赖等问题。VITS2 提出了比 VITS 更好的架构和训练机制,减少了对音素转换的强烈依赖。

Bert-VITS2 是 2023 年 9 月发布的端到端语音合成模型,它用多语言 BERT 取代了 VITS2 中的文本编码器。

SoVITS(SoftVC VITS)是 2023 年 7 月发布的模型,它用 SoftVC 的内容编码器取代 VITS 中的文本编码器,实现类似于 RVC 的 Speech2Speech 合成,而不是 Text2Speech。

GPT-SoVITS 基于这些连续的改进,将 VITS 的高质量语音合成与 SoVITS 的零样本语音自适应功能相结合。

3、GPT-SoVITS架构

GPT-SoVITS 是一种基于 token 的现代语音合成模型。它使用 seq2seq 模型生成声学 token,然后将这些声学 token 转换回波形以获得合成的语音波形。

GPT-SoVITS 由以下模型组成:

  • cnhubert:将输入波形转换为特征向量。
  • t2s_encoder:从输入文本、参考文本和特征向量生成声学 token。
  • t2s_decoder:从生成的声学 token 合成声学 token。
  • vits:将声学 token 转换为波形。

GPT-SoVITS 的输入如下:

  • text_seq:要合成语音的文本。
  • ref_seq:来自参考音频文件的文本。
  • ref_audio:参考音频文件的波形。

使用 g2p 将 text_seq 和 ref_seq 转换为音素后,它们将在 symbol.py 中转换为 token 序列。对于日语,g2p 转换不带重音符号。对于中文,还使用了 BERT 嵌入(ref_bert 和 text_bert),但对于日语和英语,这些嵌入是用零填充的。

ref_audio 末尾附加了 0.3 秒的静音,然后使用 cnhubert 将其转换为名为 ssl_content 的特征向量。

t2s_encoder 将 ref_seq、text_seq 和 ssl_content 作为输入并生成声学 token。

t2s_decoder 将这些声学 token 作为输入,并使用 seq2seq 模型输出后续声学 token。此输出对应于合成文本的声学 token。 token 有 1025 种,其中 1024 种表示 EOS(End of Sequence)。使用 top-k 和 top-p 采样方法逐个输出 token,当出现 EOS token 时停止。

最后将声学 token 输入 vits,生成语音波形。

4、音素转换

在 GPT-SoVITS 中,日语文本使用 pyopenjtalk 中的 g2p 转换为音素,英语文本使用 g2p_en 转换。

对于日语,文本“ax株式会社ではAIの実用化のための技术を开発しています。”会产生音素“e i e cl k U s u k a b u sh I k i g a i sh a d e w a e e a in o j i ts u y o o k a no t a me n o g i j u ts u o aihatsusush iteimas U .”。与典型的 g2p 不同,它包含标点符号。

对于英语,输入“Hello world.我们正在测试语音合成。”结果为音素“HH AH0 L OW1 W ER1 L D . W IY1 AA1 R T EH1 S T IH0 NG S P IY1 CH S IH1 N TH AH0 S AH0 S 。”在 g2p_en 中,使用 cmudict 词典将单词转换为音素,对于单词如果在字典中找不到该词,则使用神经网络进行音素转换。

5、零样本推理

要执行零样本推理,请在 WebUI 中选择 1-GPT-SoVITS-TTS,选项卡 1C-inference。选中“打开 TTS 推理 WEBUI”复选框,片刻之后,将打开一个新窗口。

输入参考音频文件、参考音频文本和推理文本,然后按“开始推理”。在零样本推理中,推理文本的合成语音使用输入音频的语音音调。

6、自定义训练

如果语音具有鲜明的特征,即使使用零样本推理,也可以获得相当好的语音。为了获得更高的准确率,需要进行微调。

首先,创建一个数据集。使用预处理部分中的“0-Fetch Dataset”中的工具指定音频文件的路径并分割音频。

接下来,使用 ASR 工具进行语音识别以生成参考文本。通过选择 Faster Whisper,您可以指定语音识别的语言。

输出列表文件的格式如下:

The TTS annotation .list file format:

```
vocal_path|speaker_name|language|text
```

Language dictionary:

- 'zh': Chinese
- 'ja': Japanese
- 'en': English

Example:

```
D:\GPT-SoVITS\xxx/xxx.wav|xxx|en|I like playing Genshin.
```

创建数据集后,在选项卡 1-GPT-SOVITS-TTS 的子选项卡 1A-数据集格式化中格式化训练数据。指定文本注释文件和训练数据音频文件的目录,然后单击“开始一键格式化”

在下一个选项卡 1B-微调训练中,训练 SoVITS 和 GPT 模型。

在 RTX 3080 上训练大约 1 分钟的音频,对于 SoVITS 在 8 个 epoch 时大约需要 78 秒,对于 GPT 在 15 个 epoch 时大约需要 60 秒。训练后的模型大小为 GPT 151,453 KB,SoVITS 82,942 KB。

训练后,像之前一样打开推理 WebUI,选择新训练的模型,然后执行语音合成。默认温度为 1.0,但将其降低到 0.5 左右似乎可以提供更高的稳定性。

7、转换为 ONNX

导出到 ONNX 的代码包含在官方存储库中。但是,此代码不包含导出到 cnhubert 和推理代码,因此需要自行实现。

此外,与 torch 版本相比,ONNX 版本的输出音频精度较低。经过调查,发现 ONNX 和 torch 版本之间存在以下差异,需要实施:

  • 在采样中将 exp 引入 multinomial_sample_one_no_sync。
  • 更正 SinePositionalEmbedding 中的 pe。
  • 在 vq_decode 中引入 noise_scale。
  • 删除 first_stage_decode 中的 EOS。

此外,由于 topK 和 topP 嵌入在模型中并且无法从外部控制,因此将它们添加到输入中会很方便。

包含这些调整的存储库可在这个链接中找到。

8、结束语

通过使用 GPT-SoVITS,我们确认它可以比我们在此描述的 VALLE-X 执行更高质量的语音合成。微调时间比预期的要短,因此非常实用。此外,推理时间短,可以进行 CPU 推理,这表明它将来会得到广泛应用。


原文链接:GPT-SoVITS 语音合成 - BimAnt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2086981.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

57.基于IIC协议的EEPROM驱动控制(4)

(1)顶层代码: module IIC_EEPROM(input wire clk ,input wire reset_n ,input wire key_r ,input wire key_w ,output wire …

DM一主一实时备一异步备守护集群安装

在前面章节中已经部署了一主一实时备机,此次实施过程中主要添加异步备库。 1. 环境描述 实例详情: 端口详情 2. 关闭主备库守护进程、监视器、数据库实例 [dmdbaray1 ]$ DmWatcherServiceDW stop Stopping DmWatcherServiceDW: …

基于ssm+vue+uniapp的图书管理系统小程序

开发语言:Java框架:ssmuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:M…

JVM 内存参数

文章目录 引言I JVM基础知识Java 语言是解释型的OpenJDK和Sun/Oracle JDK和hotspot的关系JDK、JRE、JVM 之间的关系JVM基础功能JVM组成JIT:Just In Time CompilerJVM内存区域JVM运行时数据区JVM 堆内存布局II JVM 内存参数常用参数JIT编译参数GC信息打印GC参数III 例子引言 J…

M2BEV

Part 1: 2D 图像编码器 给定 NNN 张大小为 HW3的图像,我们对所有图像使用共享的 CNN 主干网络进行前向传播,例如使用 ResNet,并通过特征金字塔网络(FPN)创建四级特征 F1,F2,F3,F4。 然后,将这些特征全部上…

Quartus网盘资源下载与安装 附图文安装教程

如大家所了解的,Quartus是一种FPGA设计软件(相信理工科的小伙伴,很多都接触或学习过FPGA),旨在为数字电路设计师提供一个高效、便捷的开发环境。它可以帮助用户完成数字逻辑电路的设计、仿真、综合和布局,以…

webpack4手动搭建Vue项目

小满视频 很多解释使用通义灵码搜的,通义灵码的搜索结果也是有错误的全程使用pnpm包管理工具,和npm的用法基本一样 学习总结 1. 多看看webpack官网 2. webpack的作用:配置一堆东西,达到运行程序的目的 3. 无论什么东西都转成js,…

什么是CSRF跨站请求伪造

CSRF(跨站请求伪造,Cross-Site Request Forgery)是一种网络攻击,攻击者通过伪造用户的身份,诱使用户在已认证的 Web 应用上执行非预期的操作。CSRF 攻击的风险在于它能够利用用户的身份认证状态,从而执行恶…

app逆向1-实战里常见东西

幕布链接:app逆向1-实战里常见东西 - 幕布

JVM性能监控实用工具jconsole与jvisualvm

jdk小工具jconsole与jvisualvm,jvisualvm为升级版的jconsole;通过命令行启动,可监控本地和远程应用。 推荐使用:jvisualvm jconsole使用 1.直接命令 jcondole 打开窗口,选择我们要查看的进行 连接后可看到面板 jvisu…

4岁患儿玩耍误伤眼内起迷“障”,耽误多年成都爱尔公益救助手术焕清晰

近日,成都爱尔眼科医院收治了一名来自西藏的7岁小患者小多。小多是由父亲带到医院的,可惜两人都不会汉语,医护人员与他们的交流依靠着孩子父亲拨打的亲戚电话,在电话中一句一句的翻译终于厘清病情原委。 据说,3年前小多…

固态硬盘损坏,有什么方法可以恢复数据?

我认为值得推荐的固态硬盘数据恢复,必须满足2个硬条件: 恢复成功率高 不损害原文件,保证数据的绝对安全 推荐2个超好用的U盘数据恢复神器,帮你快速找回重要文件! 1、转转数据恢复大师 点击直达链接>>www.huifuz…

简单工作流-节点增加输入内容

之前已经做完了前端的流程图像绘制,后端对流程图像的CURD,现在主要做流程节点的必要属性做完善,之前只做了节点上权限用户的绑定没有对用户输入内容做管理,现在加上了输入内容管理,具体代码在github上: 前端…

css-50 Projects in 50 Days(1)

改变背景图 html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>改变背景</title><link …

【ceph学习】rgw网关进程如何启动

rgw 网关进程启动 主要在rgw_main.cc的main函数中&#xff0c;主要涉及一些关键线程启动、前端服务器&#xff08;beast等&#xff09;启动、后端存储模块启动&#xff08;rados&#xff09;、perf和log启动等。 流程图关键节点如下&#xff1a; 1、beast的启动 2、rados的启…

对标GPT4o,智谱推出新一代基座大模型 GLM-4-Plus

最新基座大模型 GLM-4-Plus发布并上线开放平台 在 KDD 国际数据挖掘与知识发现大会上&#xff0c;智谱 GLM 团队介绍了新一代基座大模型GLM-4-Plus。GLM-4-Plus 是智谱全自研 GLM 大模型的最新版本&#xff0c;它标志着智谱继续瞄准通用人工智能&#xff0c;持续推进大模型技术…

Django框架安全

【图书介绍】《Django 5企业级Web应用开发实战&#xff08;视频教学版&#xff09;》_django 5企业级web应用开发实战(视频教学版)-CSDN博客 《Django 5企业级Web应用开发实战&#xff08;视频教学版&#xff09;》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com) 本节主要介…

阿里PAI-ChatLearn:大规模 Alignment高效训练框架正式开源

导读 ChatGPT是OpenAI开发的基于大型语言模型(LLM)的聊天机器人&#xff0c;以其令人惊叹的对话能力而迅速火爆并被广泛采用。ChatGPT 成功背后得益于大型语言模型生成领域的新训练范式&#xff1a;RLHF (Reinforcement Learning from Human Feedback)&#xff0c;即以强化学习…

代码随想录第十天——LeetCode 150. 逆波兰表达式求值、239. 滑动窗口最大值、347.前 K 个高频元素

150. 逆波兰表达式求值 力扣题目链接(opens new window) 根据 逆波兰表示法&#xff0c;求表达式的值。 有效的运算符包括 , - , * , / 。每个运算对象可以是整数&#xff0c;也可以是另一个逆波兰表达式。 说明&#xff1a; 整数除法只保留整数部分。 给定逆波兰表达式总是…

weditor使用问题总结

1.Pixel连接weditor提示Local server not started 产生原因1&#xff1a;开发者模式关闭后重开部分选项没勾选 解决方案&#xff1a;打开如下设置即可 产生原因2&#xff1a;安装了uiautodev导致uiautomator2版本升级到了3.x版本 解决方案&#xff1a;重新安装uiautomator2的…