GPT-SoVITS学习01

news/2025/1/16 2:47:17 标签: gpt, 学习, 语音识别, 笔记

1.什么是TTS

TTS(Text-To-Speech)这是一种文字转语音的语音合成。类似的还有SVC(歌声转换)、SVS(歌声合成)等。

2.配置要求

GPT-SoVITS对电脑配置有较高的要求。

训练:对于Windows电脑:

  • 支持CUDA的nVIDIA显卡,每张拥有至少6G以上显存。
  • 常见的不能使用的显卡:10系以前的所有卡、1060以下,1660以下,2060以下、3050 4G
  • Windows10/11 系统
  • 如果没显卡会自动识别使用CPU训练,但速度非常缓慢。

推理:对于Windows电脑:

  • 支持CUDA的nVIDIA显卡,每张拥有至少4G以上显存。
  • Windows 10/11 系统
  • 没显卡会自动识别使用CPU推理

基础知识

1.常见的英文

1.error。这个单词会在所有报错的时候出现。它一般前面会有一个定语来修饰这个报错,后面跟着报错原因。例如:OutOfMemoryError: CUDA out of memory。前面的OutOfMemory说明是内存不足的报错,后面的CUDA out of memory说明是显存不足。

2.CUDA。这是N卡的统一计算架构,所有在N卡进行的Ai计算都需要它。安装了显卡驱动的话都会安装上CUDA,推荐使用11.8版本的CUDA。

3.GPU。 GPU是图形处理器,显卡是GPU但GPU不一定是显卡。台式机的显卡是很大的一个硬件。笔记本只有游戏本才有显卡。其他的GPU都是核显!核显不是显卡!

4.module。模块。模块就是一个脚本,缺少某个脚本,对应的程序就无法运行。可能会遇到No module的报错,这种情况只需安装对应的模块就好了。 例如:ModuleNotFoundError: No module named ‘jieba_fast' , 这里没有jieba_fast这个模块,那么只要python -m pip install jieba_fast装上这个模块即可。

5.WebUI。 web是网络的意思,ui是使用界面的意思,合在一起就是一个网页,一个以网页呈现的操作界面。网页是用来控制操作程序的,真正的运行程序是你点开的那个go-webui.bat的程序。

6.weights。weights:模型权重。也就是模型,GPT_weights就是GPT模型,SOVITS_weights就是SoVITS模型。weight指的是神经网络中的参数,这些参数被存储在称为“权重”的数组中,所以weights叫做模型权重。

7.output。 output:输出。程序输出的文件一般都会在output文件夹,有时候output会缩写成opt,例如uvr5_opt就代表这个文件夹是uvr5输出的文件的存放位置。

8.found。found:找到。一般出现在路径不对的报错中,not found是没有找到的意思。如果路径中没有某个需要的文件的时候就会报错NotFound:xxx。也有可能是没有找到某个模块,模块就是Moudle,ModuleNotFoundError。

9.pretrained。预先训练的,常见的有pretrained_models这个文件夹里放的是底膜,并不是微调后的最终模型。找模型的时候别找错了。

2.什么是显存

显存是显卡的专用内存,ctrl+shift+esc打开任务管理器看,专用GPU内存就是显存,其他的内存都是共享的,并不是真正的显存。

3.什么是数据集 

数据集是指一组数据样本,包括音频,文本等数据。数据集的质量指的是音频的质量和标注的正确率,数据集的大小指的是音频的长度。

4.什么是音频质量

1.响度: 响度就是俗称的音量,常见的计数方式是dB,也就是分贝。生活中常见的分贝都为正数,例如60分贝是正常说话的声音。但dB作为一个对数单位是不能直接拿来描述一个物理量的大小或多少的。 在描述音频的音量时一般使用电平这个词,音频电平就是输入信号的电压大小,和人耳听见的分贝数是不同的。一般来说正常说话的电平要保持在-9dB~6dB这个区间。推荐在训练前用软件做下响度统一。因为db是一个对数单位,相差3dB那么就意味着相差10的0.3次方倍,大约2倍,如果相差10db就是10倍。所以不要觉得大了几dB差距不大没关系。如果在正常电平下你觉得听起来声音小,那么是你的音响问题,请调整你的音响,不要乱动电平。

                                dB = 10lg\frac{P1}{P2}

这是同样一段音频不同响度在AU中的样子

2.混响

混响是后期反射声,可以简单的理解为回声。你可能觉得正常录的声音能有什么回声,但实际上无论什么情况都会有混响,只是有大小和多少的区分罢了。最基础的看混响的方法是看频谱图,很明显第一张图就显得干净不拖沓。第二张图就是混响严重的。有混响的话就要用UVTR5去混响。

3.音质 

这里的音质是对音频准确性、保真度或清晰度的评估。一般情况下采样率,位深和码率都不会太低的。现在的麦克风都是44.1k,16bit以上了。但清晰度就不好说了,如果要自己录音的话最好买个单独的麦克风。再贵的耳机麦克风都不如一个独立麦克风。当然清晰度也可以通过频谱图看出一点点。图一是音质好的,图二是音质差的。至于采样率,位深和码率不用太高,会进行重采样的。

整合包教程

在开始之前

为了避免在之后的使用中出现各种意料之外的问题,请务必对照下面的 Checklist 检查本机环境。

  • 关闭全局梯子/绕过局域网
  • 使用推荐的浏览器(Chrome/Edge/Firefox)
  • 关闭浏览器自带的网页翻译功能
  • 关闭所有第三方杀毒软件/安全卫士等
  • 如果内存吃紧,将系统虚拟内存设置为自动
  • 建议关闭共享内存
  • win11关闭GPU加速,貌似有占用不满的bug

1.下载

这里请自行找下载资源,这里不再提供。

2.解压并打开

请使用7-zip解压!其他解压工具可能会吞文件。解压后打开文件来到根目录,双击go-webui.bat打开,不要以管理员身份运行!

这就是正常打开了,稍后等待就会弹出网页。如果没有弹出网页可以复制http://0.0.0.0:9874到浏览器打开。

这是网页端

在开始使用前提醒一下:打开的bat不可以关闭!这个黑色的bat框就是控制台,所有的日志都会在这上面呈现,所有的信息以控制台为准。所有的报错都在控制台上!

3.数据集处理

请认真准备数据集!以免出现各种报错,和炼出不理想的模型!好的数据集是炼出好的模型的基础!

使用UVR5处理原音频(如果原音频足够干净可以跳过这步,比如游戏里提取的干声)

方法1:用自带的UVR5处理音频

点击开启UVR5-WebUI稍加等待就会自动弹出下图的网页,如果没有弹出复制http://0.0.0.0:9873到浏览器打开

 首先输入音频文件夹路径或直接选择文件(2选1),文件夹上面那个地址框就是文件夹路径。

如果要复制文件路径就是这样:

 先用model_bs_roformer_ep_317_sdr_12.9755模型处理一遍(提取人声),然后将输出的干声音频再用onnx——dereverb最后再用DeEcho-Aggressive(去混响),输出格式选wav。输出的默认路径在GPT-SoVITS-beta\output\uvr5_opt这个文件夹下。处理完的音频(vocal)是人声,(instrument)是伴奏,(_vocal_main_vocal)是没混响的,(others)的是混响。(voval)(_vocal_main_vocal)才是要用的文件,其他都可以删除。结束后记得到WebUI关闭UVR5节省内存。

例如:

这里有两端素材,点击一下目录,就是路径名了,将其复制。

 粘贴到输入路径里,下拉选择model_bs_roformer_ep_317_sdr_12.9755模型,然后点击转换,稍等片刻后输出信息就会显示xxxx-> Success

在状态栏点击黑窗口可以打开bat控制台,在这里可以查看进度。

然后打开GPT-SoVITS整合包文件夹的output文件夹,打开uvr5_opt文件夹。

这里会有输入文件数两倍的文件,其中instrumental文件是不需要的,都必须删掉,否则会影响最终效果。再新建一个文件夹把这两个文件移过去。

然后输入路径改成上面那个新的文件夹,下拉选择onnx_dereverb_By_FoxJoy模型,点击转换。然后要等待比较长一段时间。同样可以再bat控制台看进度,如果等待的时间太长可以跳过这个模型。输入的文件还是在uvr5_opt文件夹,其中others是不需要的,删掉。上一步的vocal也不需要了可以删掉。再新建 一个文件夹把_vocal_main_vocal这两个文件移过去

然后输入路径改成上面那个新建文件夹,下拉选择VR-DeEchoAggressive模型(如果混响很重选DeReverb,比较轻选Normal,中间选Aggressive),点击转换。稍微等待一段时间,再打开uvr5_opt文件夹,把instrument开头的删掉就好了。

如果没有成功输出,那么推荐使用UVR5客户端。 

方法2:使用UVR5客户端(没有bug,模型更多)

这个之后深入学习时再使用。

切割音频

在切割音频前建议把所有音频拖进音频软件(如au、剪映)调整音量,最大音量调整至-9dB到-6dB,过高的删除。

首先输入原音频的文件夹路径(不要有中文),如果刚刚经过了UVR5处理那么就是uvr5_opt这个文件夹。然后建议可以调整的参数有min_length、min_interval 和 max_sil_kept 单位都是ms。 

min_length根据显存大小调整,显存越小调越小。 min_interval根据音频的平均间隔调整,如果音频太密集可以适当调低。 max_sil_kept会影响句子的连贯性,不同音频不同调整,不会调的话保持默认。其他参数不建议调整。点击开启语音分割,马上就分割好了。默认输出路径在output/slicer_opt。当然也可以使用其他切分工具切分。

 切分完后文件在output\slicer_opt。打开切分文件夹,排序方式选大小,将时长超过显存数秒的音频手动切分至显存数秒以下。比如显卡是4090显存是24g,那么就要将超过24秒的音频手动切分至24s以下,音频时长太长的会爆显存。如果语音切割后还是一个文件,那是引文音频太密集了。可以调低min_interval,从300调到100基本能解决这问题。实在不行用au手动切分。

3.3音频降噪(如果原音频足够干净可以跳过这步,比如游戏中提取的干声)

如果你觉得音频足够清晰可以跳过这步,降噪对音质的破坏挺大的,谨慎使用。输入刚才切割玩的音频的文件夹,默认是output/slicer_opt文件夹。然后点击开启语音降噪。默认输出路径在output/denoise_opt。

3.4打标

为什么要打标:打标就是给每个音频配上文字,这样才能让AI学习到每个字该怎么读。这里的标指的是标注。

如果你上一步切分了或者降噪了,那么已经自动帮你填充好路径了。然后选择达摩ASR或者fast whisper。达摩ASR只能用于识别汉语和粤语,效果也最好。 fast whisper可以标注99种语言,是目前最好的英语和日语识别,模型尺寸选large V3,语种选auto自动。whisper 可以选择精度,建议选float 16,float 16比float32块,int8速度几乎和float16一样。然后点开启离线批量ASR就好了,默认输出是output/asr_opt这个路径。ASR需要一些时间,看看控制台有没有报错就好了。

如果有字幕的可以用字幕标注,准确多了。内嵌字幕或者外挂字母都可以。这个以后的学习中会进行讲解。

3.5校对标注(这步比较费时间,如果不追求极致效果可以跳过)

上一步打标会自动填写list路径,你只需要点击开启打标webui,打开后就是SubFix,从左往右从上到下依次意思是:跳转页码、保存修改、合并音频、删除音频、上一页、下一页、分割音频、保存文件、反向选择。每一页修改完都要点以下保存修改(Submit Text),如果没保存就翻页那么会重置文本,在完成退出前要点保存文件(Save File),做任何其他操作前最好先点一下保存修改(Submit Text)。合并音频和分割音频不建议使用,精度非常差。删除音频先要点击要删除的音频右边的yes,再点删除音频(Delete Audio)。删除完成后文件夹中的音频不会删除但标注已经删除了,不会加入训练集的。

4.训练

1.输出logs 

来到第二个页面

 先设置实验名也就是模型名,理论上可以是中文!打标结束后会自动填写路径,只要点下一键三连就可以了。

如果是英文,日语,粤语或韩语的话logs里的3-bert文件夹是空的,是正常的不用管。

 

2.微调训练

首先设置batch_size,sovits训练建议batch_size设置为显存的一半以下,高了会爆显存。bs并不是越高越快! batch_size也需要根据数据集大小调整,也并不是严格按照显存数一半来设置,比如6g显存需要设置为1。如果爆显存就调低。 当显卡3D占用100%的时候就是bs太高了,使用到了共享显存,速度会慢好几倍。

以下是切片长度为10s时实测的不同显存的sovits训练最大batch_size,可以对照这个设置。如果切片更长、数据集更大的话要适当减少。

在0213版本之后添加了dpo训练。dpo大幅提升了模型的效果,几乎不会吞字和复读,能够推理的字数也翻了几倍。但同时训练时显存占用多了2倍多,训练速度慢了4倍,12g以下显卡无法训练。 数据集质量要求也高了很多,如果数据集有杂音,有混响,音质差,不校对标注,那么会有负面效果。

如果你的显卡大于12g,且数据集质量较好,且愿意等待漫长的训练时间,那么可以开启dpo训练。否则请不要开启,下面是切片长度为10s时实测的不同显存的gpt训练最大batch_size。如果切片更长、数据集更大的话要适当减少。

接着设置轮数,相比V1,V2对训练集的还原更好,但也更容易学习到训练集中的负面内容。所以如果你的素材中有底噪、混响、喷麦、响度不统一、电流声、口水音、口齿不清、音质差等情况那么请不要调高SoVITS模型轮数,否则会有负面效果。GPT模型数一半情况下不高于20,建议设置10.然后先点开启SoVITS训练,训练完成后再点开GPT训练,不可以一起训练(除非你有两张卡)!如果中途中断了,直接再点开始训练就好了,会从最近的保存点开始训练。

训练的时候请ctrl+shift+esc打开任务管理器看,下拉打开选项,选择cuda。如果cuda占用为0那么就不在训练。专用GPU内存就是显存,其他的内存都是共享的,并不是真正的显存。爆显存就调低bs。或者存在过长的音频,需要重新制作数据集。

win11没有cuda打开设置--系统--显示--显示卡--默认图形设置, 关闭硬件加速GPU计划,并重启电脑。

训练完成后会显示训练完成,并且控制台显示的轮数停在设置的(总轮数-1)的轮数上。

看cuda占用需要下拉选择cuda,如果win11找不到cuda界面需要关闭硬件加速GPU计划并重启

关于学习率权重: 

可以调低但不建议调高。

关于高训练轮数:

你可能会看见有人说训练了几百轮,几千轮的。但高轮数并不就是好。如果要训练高轮数请先保证数据集质量极好,标记全都经过手动校对,时长至少超过1小时才有必要拉高轮数。否则默认的十几轮效果已经很好了。

关于数据集长度:

请先保证质量!音频千万不能有杂音,要口齿清晰,响度统一,没有混响,每句话尽量完整,全部手动校对标注。30分钟内有明显提升,不建议再增加数据集长度。

情感分类

如果有超过1小时的数据集的话,可以先用Emotion2Vec或ColorSplitter情感分类后再训练。会获得更稳定更丰富的情感,不过标注一定要手动校对。

5.推理

开启推理界面

先点一下刷新模型,下拉选择模型推理,e代表轮数,s代表步数。不是轮数越高越好。选择好模型点开启TTS推理,自动弹出推理界面。如果没有弹出,复制http://0.0.0.0:9872到浏览器打开。

请严格区分轮数(Epoch)和步数(Step):1个Epoch代表训练集中的所有样本都参与了一次学习,1 Step代表进行了一次学习,由于batch size的存在,没步学习可以含有数条样本,因此,Epoch 和 Step 的换算如下:

开始推理 

最上面可以切换模型,在刚练完挑模型的时候很重要

然后上传一段参考音频,建议是数据集中的音频。最好5秒。参考音频很重要!会学习语速和语气,请认真选择。参考音频的文本是参考音频说什么就填什么,语种也要对应。 在0217版本之后可以选择无参考文本模式,但非常不建议使用。

右上角有个融合音色的可选项,先将要融合的音频放在一个文件夹中然后一起拖进去(没有什么实用性的功能)

接着就是输入要合成的文本了,注意语种要对应。目前可以中英混合,日英混合和中日混合。切分建议选择四句一切,低于四句的不会切。如果凑四句一切报错就是显存太小可以按句号切。如果不切,显存越大能合成的越多。合成的过长很容易胡言乱语。

0213版本加入了top_p,top_k和temperature,保持默认就可以。这些控制的都是随机性,拉大数值,随机性会变大,建议使用默认。

关于top_p,top_k和temperature

这三个值都是用来控制采样的。在推理的时候要挑出一个最好的token,但机器并不知道哪个是最好的。于是先按照top_k挑出前几个token,top_p在top_k的基础上筛选token。最后temperature控制随机性输出。

比如总共有100个token,top_k设置5,top_p设置0.6,temperature设置为0.5。那么就会从100个token中先挑出5个概率最大的token,这五个token的概率分别是(0.3,0.3,0.2,0.2,0.1),那么再挑出累加概率不超过0.6的token(0.3和0.3),再从这两个token中随机挑出一个token输出,其中前一个token被挑选到的几率更大。以此类推。

关于重复惩罚

=1 不惩罚重复, >1时开始惩罚重复, <1时鼓励重复。 一般都设置为 >1。

如果出现吞字,重复,参考音频混入的情况,这是正常现象。改善的方法有使用较低轮数的GPT模型、合成文本再短点、换参考音频。如果一直复读估计是标注不准确的问题,手动校对后重炼即可。

6.分享模型

分享需要的模型都在SoVITS_weights_v2GPT_weights_v2这两个文件夹。选择合适轮数的模型,记得带上参考音频一起打包成压缩文件,就可以分享了。别人只要将GPT模型(ckpt后缀)放入GPT_weights_v2文件夹,SoVITS模型(pth后缀)放入SoVITS_weights_v2文件夹就可以推理了。

7.使用别人分享的模型

将GPT模型(ckpt后缀)放入GPT_weights_v2文件夹。SoVITS模型(pth后缀)放入SoVITS_weights_v2文件夹,刷新下模型就能选择模型推理了。

8.训练第二个模型

记得把之前切片文件夹里的音频和asr文件夹里的标注文件移走,否则会一起加入训练集。训练的时候记得更换模型名!其他步骤都一样。模型还在GPT_weights_v2文件夹和SoVITS_weights_v2文件夹。


http://www.niftyadmin.cn/n/5824579.html

相关文章

Java Web 第二章 HTMLCSS

第二章 HTML&CSS 一、HTML入门 1.1 HTML&CSS&JavaScript的作用 HTML&#xff08;超文本标记语言&#xff09; 主要用于构建网页的主体结构。它就像是建筑的框架&#xff0c;定义了网页内容的基本布局和层次关系。例如&#xff0c;通过HTML标签可以确定页面上哪里…

51单片机 AT24C02(I2C总线)

存储器 随机存储 RAM 只读存储 ROM AT24C02芯片 是一种可以实现掉电不丢失的存储器&#xff0c;可用于保存单片机运行时想要永久保存的数据信息 存储材质&#xff1a;E2PROM 通讯接口&#xff1a;I2C总线 容量&#xff1a;256字节 I2C总线 一种通用的数据总线 两根通信线…

FPGA 21 ,深入理解 Verilog 中的基数,以及二进制数与十进制数之间的关系( Verilog中的基数 )

目录 前言 一. 基数基础 1.1 基数介绍 2.1 基数符号 3.1 二进制数 二. 二进制与十进制数 三. 二进制数 3.1 定义寄存器类型变量 3.2 定义线网类型变量 3.3 赋值操作 3.4 解析二进制数为十进制数 四. 代码示例 五. 注意事项 六. 更多操作 前言 在Verilog中&#…

自定义注解使用AspectJ切面和SpringBoot的Even事件优雅记录业务接口及第三方接口调用日志实现思路

自定义注解使用AspectJ切面和SpringBoot的Even事件优雅记录业务接口及第三方接口调用日志实现思路 文章目录 1.前言2.思路2.1使用ELK收集日志2.1.1ELK搭建2.1.2项目中集成ELK日志收集2.1.2.1 引入依赖2.1.2.2 logback-xxx.xml配置2.1.2.3 yaml配置 2.2本文思路2.2.1书接上文--自…

excel按行检索(index+match)

假设你的数据表如下&#xff1a; 假设 数据区域是 A1:D4。 你想查询某人在某个日期的数据。 实现步骤 公式 在某个单元格中使用以下公式&#xff1a; excel 复制代码 INDEX(A2:D4, MATCH(“张三”, A2:A4, 0), MATCH(“2025/01/02”, A1:D1, 0)) 2. 公式拆解 MATCH(“张三”,…

常用的前端4种请求方式

文章目录 一、GET请求1.1 使用方式1.2 优缺点1.3 应用场景 二、POST请求2.1 使用方式2.2 优缺点2.3 应用场景 三、PUT请求3.1 使用方式3.2 优缺点3.&#xff13; 应用场景 四、DELETE请求4.1 使用方式4.2 优缺点4.3 应用场景 五.总结 一、GET请求 GET 请求用于向指定资源发出请…

[C++]类与对象(上)

目录 &#x1f495;1.C中结构体的优化 &#x1f495;2.类的定义 &#x1f495;3.类与结构体的不同点 &#x1f495;4.访问限定符(public,private,protected) &#x1f495;5.类域 &#x1f495;6.类的实例化 &#x1f495;7.类的字节大小 &#x1f495;8.类的字节大小特例…

MySQL中的合并函数

一、group_concat MySQL的GROUP_CONCAT函数是一种强大的聚合函数&#xff0c;通常用于将多个行合并为一个字符串。 group_concat(DISTINCT 要连接的字段 Order BY ASC/DESC排序字段 Separator分隔符) 在合并之时对合并的数据排序&#xff0c;可以确定在拆解合并后的字段后&a…