GPT-Sovits-2-微调模型
1. 大致步骤
上一步整理完数据集后,此步输入数据, 微调2个模型VITS和GPT,位置在 <<1-GPT-SoVITS-tts>>下的<<1B-微调训练>>
页面的两个按钮分别执行两个文件:
- <./GPT_SoVITS/s2_train.py>
这一步微调VITS的预训练模型,即微调SynthesizerTrn模型
- <./GPT_SoVITS/s1_train.py>
这一步微调GPT的预训练模型,这里采用的是google的soundstorm复现
模型结构文件在:’ ./GPT_SoVITS/AR/models/t2s_model.py’
注意,两个模型微调是独立的, 可分别完成
界面如下:

2. 微调过程
2.1执行SoVITS训练
-
这里webui.py中代码会用gradio框架将页面上的设置转换为python变量,并保存到‘。/TEMP’文件夹的‘tmp_s2.json’文件,用于送入s2_train.py作为训练参数
-
另外,‘./logs’下会生成 train.log 和 config.json文件,记录微调的配置信息。以及eval和logs_s2文件夹,同样记录训练过程数据。
-
微调后的模型保存到‘GPT_weights_v2’文件夹
-
配置记录:
train.log
2024-10-21 23:48:33,030 XXX INFO {'train': {'log_interval': 100, 'eval_interval': 500, 'seed': 1234, 'epochs': 2, 'learning_rate': 0.0001, 'betas': [0.8, 0.99], 'eps': 1e-09, 'batch_size': 6, 'fp16_run': False, 'lr_decay': 0.999875, 'segment_size': 20480, 'init_lr_ratio': 1, 'warmup_epochs': 0, 'c_mel': 45, 'c_kl': 1.0, 'text_low_lr_rate': 0.4, 'pretrained_s2G': 'GPT_SoVITS/pretrained_models/gsv-v2final-pretrained/s2G2333k.pth', 'pretrained_s2D': 'GPT_SoVITS/pretrained_models/gsv-v2final-pretrained/s2D2333k.pth', 'if_save_latest': True, 'if_save_every_weights': True, 'save_every_epoch': 4, 'gpu_numbers': '0'}, 'data': {'max_wav_value': 32768.0, 'sampling_rate': 32000, 'filter_length': 2048, 'hop_length': 640, 'win_length': 2048, 'n_mel_channels': 128, 'mel_fmin': 0.0, 'mel_fmax': None, 'add_blank': True, 'n_speakers': 300, 'cleaned_text': True, 'exp_dir': 'logs/xxx'}, 'model': {'inter_channels': 192, 'hidden_channels': 192, 'filter_channels': 768, 'n_heads': 2, 'n_layers': 6, 'kernel_size': 3, 'p_dropout': 0.1, 'resblock': '1', 'resblock_kernel_sizes': [3, 7, 11], 'resblock_dilation_sizes': [[1, 3, 5], [1, 3, 5], [1, 3, 5]], 'upsample_rates': [10, 8, 2, 2, 2], 'upsample_initial_channel': 512, 'upsample_kernel_sizes': [16, 16, 8, 2, 2], 'n_layers_q': 3, 'use_spectral_norm': False, 'gin_channels': 512, 'semantic_frame_rate': '25hz', 'freeze_quantizer': True, 'version': 'v2'}, 's2_ckpt_dir': 'logs/xxx', 'content_module': 'cnhubert', 'save_weight_dir': 'SoVITS_weights_v2', 'name': 'xxx', 'version': 'v2', 'pretrain': None, 'resume_step': None}
2024-10-04 17:02:30,480 xxx01 INFO loaded pretrained GPT_SoVITS/pretrained_models/gsv-v2final-pretrained/s2G2333k.pth
2024-10-04 17:02:30,697 xxx01 INFO loaded pretrained GPT_SoVITS/pretrained_models/gsv-v2final-pretrained/s2D2333k.pth
2024-10-04 17:03:03,571 xxx01 INFO Train Epoch: 1 [0%]
2024-10-04 17:03:03,571 xxx01 INFO [2.700843572616577, 2.197847366333008, 5.394582748413086, 18.876893997192383, 0.0, 2.0498788356781006, 0, 9.99875e-05]
2024-10-04 17:03:08,853 xxx01 INFO ====> Epoch: 1
2024-10-04 17:03:14,537 xxx01 INFO ====> Epoch: 2
2024-10-04 17:03:19,520 xxx01 INFO ====> Epoch: 3
2024-10-04 17:03:24,553 xxx01 INFO Saving model and optimizer state at iteration 4 to logs/yc01/logs_s2\G_233333333333.pth
2024-10-04 17:03:26,369 xxx01 INFO Saving model and optimizer state at iteration 4 to logs/yc01/logs_s2\D_233333333333.pth
2024-10-04 17:03:32,288 xxx01 INFO saving ckpt xxx01_e4:Success.
- config.json
{"train": {"log_interval": 100, "eval_interval": 500, "seed": 1234, "epochs": 2, "learning_rate": 0.0001, "betas": [0.8, 0.99], "eps": 1e-09, "batch_size": 6, "fp16_run": false, "lr_decay": 0.999875, "segment_size": 20480, "init_lr_ratio": 1, "warmup_epochs": 0, "c_mel": 45, "c_kl": 1.0, "text_low_lr_rate": 0.4, "pretrained_s2G": "GPT_SoVITS/pretrained_models/gsv-v2final-pretrained/s2G2333k.pth", "pretrained_s2D": "GPT_SoVITS/pretrained_models/gsv-v2final-pretrained/s2D2333k.pth", "if_save_latest": true, "if_save_every_weights": true, "save_every_epoch": 4, "gpu_numbers": "0"}, "data": {"max_wav_value": 32768.0, "sampling_rate": 32000, "filter_length": 2048, "hop_length": 640, "win_length": 2048, "n_mel_channels": 128, "mel_fmin": 0.0, "mel_fmax": null, "add_blank": true, "n_speakers": 300, "cleaned_text": true, "exp_dir": "logs/xxx"}, "model": {"inter_channels": 192, "hidden_channels": 192, "filter_channels": 768, "n_heads": 2, "n_layers": 6, "kernel_size": 3, "p_dropout": 0.1, "resblock": "1", "resblock_kernel_sizes": [3, 7, 11], "resblock_dilation_sizes": [[1, 3, 5], [1, 3, 5], [1, 3, 5]], "upsample_rates": [10, 8, 2, 2, 2], "upsample_initial_channel": 512, "upsample_kernel_sizes": [16, 16, 8, 2, 2], "n_layers_q": 3, "use_spectral_norm": false, "gin_channels": 512, "semantic_frame_rate": "25hz", "freeze_quantizer": true, "version": "v2"}, "s2_ckpt_dir": "logs/xxx", "content_module": "cnhubert", "save_weight_dir": "SoVITS_weights_v2", "name": "xxx", "version": "v2"}
- tmp_s2.json
{"train": {"log_interval": 100, "eval_interval": 500, "seed": 1234, "epochs": 2, "learning_rate": 0.0001, "betas": [0.8, 0.99], "eps": 1e-09, "batch_size": 6, "fp16_run": false, "lr_decay": 0.999875, "segment_size": 20480, "init_lr_ratio": 1, "warmup_epochs": 0, "c_mel": 45, "c_kl": 1.0, "text_low_lr_rate": 0.4, "pretrained_s2G": "GPT_SoVITS/pretrained_models/gsv-v2final-pretrained/s2G2333k.pth", "pretrained_s2D": "GPT_SoVITS/pretrained_models/gsv-v2final-pretrained/s2D2333k.pth", "if_save_latest": false, "if_save_every_weights": true, "save_every_epoch": 2, "gpu_numbers": "0"}, "data": {"max_wav_value": 32768.0, "sampling_rate": 32000, "filter_length": 2048, "hop_length": 640, "win_length": 2048, "n_mel_channels": 128, "mel_fmin": 0.0, "mel_fmax": null, "add_blank": true, "n_speakers": 300, "cleaned_text": true, "exp_dir": "logs/wmd"}, "model": {"inter_channels": 192, "hidden_channels": 192, "filter_channels": 768, "n_heads": 2, "n_layers": 6, "kernel_size": 3, "p_dropout": 0.1, "resblock": "1", "resblock_kernel_sizes": [3, 7, 11], "resblock_dilation_sizes": [[1, 3, 5], [1, 3, 5], [1, 3, 5]], "upsample_rates": [10, 8, 2, 2, 2], "upsample_initial_channel": 512, "upsample_kernel_sizes": [16, 16, 8, 2, 2], "n_layers_q": 3, "use_spectral_norm": false, "gin_channels": 512, "semantic_frame_rate": "25hz", "freeze_quantizer": true, "version": "v2"}, "s2_ckpt_dir": "logs/xxx", "content_module": "cnhubert", "save_weight_dir": "SoVITS_weights_v2", "name": “xxx”, "version": "v2"}
以上3个文件的内容是冗余的,配置信息的参数一致, 只是‘train.log’会记录微调时命令行的输出。
生成文件后,s2_train.py首先加载VITS预训练模型,之后训练设置的epoch数。
2.2执行GPT训练
这一步和上一步时类似,执行s2_train.py文件,微调后的模型保存到‘SoVITS_weights_v2’
3.语音合成
这一步位置在 位置在 <<1-GPT-SoVITS-tts>>下的<<1C-推理>>,界面如下:

-
选择预训练
-
GPT模型列表选择
-
SoVITS模型列表选择
-
-
开启推理界面
点击开启TTS推理WebUi选项,就会弹出推理节目
这里执行的是’inference_webui.py’ 或 ‘inference_webui_fast.py’文件
4.推理界面(需要打开)
这里可以传一个参考音频,并填入对应语意文本,模型训练够好的话(数据+epoch够多),也可以不传。
界面如下:

输出的语音就是克隆的声音了,由于版本还在更新,项目组可能后去还会更新改动页面和功能,因此这里只是大致流程。
Reference
- https://github.com/yangdongchao/SoundStorm/blob/master/soundstorm/s1/AR/models/t2s_model.py
- https://google-research.github.io/seanet/soundstorm/examples/
相关文章:
GPT-Sovits-2-微调模型
1. 大致步骤 上一步整理完数据集后,此步输入数据, 微调2个模型VITS和GPT,位置在 <<1-GPT-SoVITS-tts>>下的<<1B-微调训练>> 页面的两个按钮分别执行两个文件: <./GPT_SoVITS/s2_train.py> 这一步微调VITS的预训练模型…...
【数据结构 | PTA】懂蛇语
懂蛇语 在《一年一度喜剧大赛》第二季中有一部作品叫《警察和我之蛇我其谁》,其中“毒蛇帮”内部用了一种加密语言,称为“蛇语”。蛇语的规则是,在说一句话 A 时,首先提取 A 的每个字的首字母,然后把整句话替换为另一…...
Python——自动化发送邮件
在数字化时代,电子邮件是商务沟通和个人联络的重要工具。自动化邮件发送可以节省时间,提高效率。Python,作为一种强大且灵活的编程语言,提供了多种库来支持邮件的自动化发送。本文将详细介绍如何使用Python的smtplib和email库来编…...
MTKLauncher_布局页面分析
文章目录 前言遇到的困难点针对性解决困难 需求相关资料Launcher3 源码 目录简单介绍Launcher3 简介及页面布局分析UI整体架构数据加载布局加载布局加载核心思想device_profiles.xml 加载InvariantDeviceProfileinitGrid(context, gridName)getPredefinedDeviceProfilesinvDist…...
C#实现隐藏和显示任务栏
实现步骤 为了能够控制Windows任务栏,我们需要利用Windows API提供的功能。具体来说,我们会使用到user32.dll中的两个函数:FindWindow和ShowWindow。这两个函数可以帮助我们找到任务栏窗口,并对其执行显示或隐藏的操作 引入命名空…...
基于springboot+vue实现的公司财务管理系统(源码+L文+ppt)4-102
基于springbootvue实现的公司财务管理系统(源码L文ppt)4-102 摘要 本系统是基于SpringBoot框架开发的公司财务管理系统,该系统包含固定资产管理、资产申领管理、资产采购管理、员工工资管理等功能。公司财务管理系统是一种帮助公司进行有效资金管理、会…...
rnn/lstm
tip:本人比较小白,看到july大佬的文章受益匪浅,现在其文章基础上加上自己的归纳、理解,以及gpt的答疑,如果有侵权会删。 july大佬文章来源:如何从RNN起步,一步一步通俗理解LSTM_rnn lstm-CSDN博…...
袋鼠云产品功能更新报告12期|让数据资产管理更高效
本期,我们更新和优化了数据资产平台相关功能,为您提供更高效的产品能力。以下为第12期袋鼠云产品功能更新报告,请继续阅读。 一、【元数据】重点更新 |01 元数据管理优化,支持配置表生命周期 之前系统中缺少一个可以…...
MATLAB——入门知识
内容源于b站清风数学建模 目录 1.帮助文档 2.注释 3.特殊字符 4.设置MATLAB数值显示格式 4.1.临时更改 4.2.永久改 5.常用函数 6.易错点 1.帮助文档 doc sum help sum edit sum 2.注释 ctrl R/T 3.特殊字符 4.设置MATLAB数值显示格式 4.1.临时更改 format lon…...
C#从零开始学习(用户界面)(unity Lab4)
这是书本中第四个unity Lab 在这次实验中,将学习如何搭建一个开始界面 分数系统 点击球,会增加分数 public void ClickOnBall(){Score;}在OneBallBehaviour类添加下列方法 void OnMouseDown(){GameController controller Camera.main.GetComponent<GameController>();…...
Axure PR 9 多级下拉清除选择器 设计交互
大家好,我是大明同学。 Axure选择器是一种在交互设计中常用的组件,这期内容,我们来探讨Axure中选择器设计与交互技巧。 OK,这期内容正式开始 下拉列表选择输入框元件 创建选择输入框所需的元件 1.在元件库中拖出一个矩形元件。…...
分布式项目pom配置
1. 父项目打包方式为 pom <packaging>pom</packaging> 2. 父项目版本配置 <properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncod…...
2. Flink快速上手
文章目录 1. 环境准备1.1 系统环境1.2 安装配置Java 8和Scala 2.121.3 使用集成开发环境IntelliJ IDEA1.4 安装插件2. 创建项目2.1 创建工程2.1.1 创建Maven项目2.1.2 设置项目基本信息2.1.3 生成项目基本框架2.2 添加项目依赖2.2.1 添加Flink相关依赖2.2.2 添加slf4j-nop依赖2…...
Java-I/O框架06:常见字符编码、字符流抽象类
视频链接:16.16 字符流抽象类_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Tz4y1X7H7?spm_id_from333.788.videopod.episodes&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5&p16 1.常见字符编码 IOS-8859-1收录了除ASCII外,还包括西欧…...
计算机网络-MSTP的基础概念
前面我们大致了解了MSTP的由来,是为了解决STP/RSTP只有一根生成树导致的VLAN流量负载分担与次优路径问题,了解MSTP采用实例映射VLAN的方式实现多实例生成树,MSTP有很多的理论概念需要知道,其实与其它的知识一样理论复杂配置还好的…...
P1037 [NOIP2002 普及组] 产生数
[NOIP2002 普及组] 产生数 题目描述 给出一个整数 n n n 和 k k k 个变换规则。 规则: 一位数可变换成另一个一位数。规则的右部不能为零。 例如: n 234 , k 2 n234,k2 n234,k2。有以下两个规则: 2 ⟶ 5 2\longrightarrow 5 2⟶5。 …...
【分布式知识】分布式对象存储组件-Minio
文章目录 什么是minio核心特点:使用场景:开发者工具:社区和支持: 核心概念什么是对象存储?MinIO 如何确定对对象的访问权限?我可以在存储桶内按文件夹结构组织对象吗?如何备份和恢复 MinIO 上的…...
跨平台开发支付组件,实现支付宝支付
效果图: custom-payment : 在生成预付订单之后页面中需要弹出一个弹层,弹层中展示的内容为支付方式(渠道),由用户选择一种支付方式进行支付。 该弹层组件是以扩展组件 uni-popup 为核心的,关于…...
API 接口:为电商行业高效发展注入强劲动力
一、动力之源:API 接口在电商中的角色剖析 在电商行业的广袤版图中,API 接口宛如一台强劲的发动机,是推动其高效发展的核心动力来源。它不再仅仅是一个技术工具,而是成为了连接电商各个环节的 “神经系统”,使得信息、…...
Golang的跨平台开发
Golang的跨平台开发 一、Golang跨平台开发概述 语言是一种开源的编程语言,由Google开发,广泛应用于云计算和网络编程领域。Golang具有并发性好、性能优异、内存管理自动化等特点,因此备受开发者青睐。其中,Golang的跨平台特性使得…...
Java中正确比较数组最小值的两种方法
本文旨在解决Java Stream 当API使用min()方法获得数组最小值时,返回optionalint类型导致的直接比较错误。我们将深入探讨这个问题的根源,并提供两个有效的解决方案:一是比较Optionalint的getasint()方法,二是引入apache Commons N…...
RWKV7-1.5B-g1a惊艳案例:将复杂段落压缩为三条逻辑闭环要点
RWKV7-1.5B-g1a惊艳案例:将复杂段落压缩为三条逻辑闭环要点 1. 模型能力展示:从复杂到简洁的文本处理 RWKV7-1.5B-g1a作为一款轻量级文本生成模型,在信息压缩和提炼方面展现出令人惊喜的能力。我们通过一个实际案例来展示它如何将复杂内容转…...
gte-base-zh场景应用:电商搜索与客服问答的语义匹配实战
gte-base-zh场景应用:电商搜索与客服问答的语义匹配实战 1. 电商场景中的语义匹配挑战 1.1 搜索不精准的痛点分析 在电商平台上,用户搜索"苹果手机"却看到水果苹果的图片,或者输入"轻薄笔记本"却返回游戏本࿰…...
OpenClaw技能开发入门:为百川2-13B量化模型定制自动化模块
OpenClaw技能开发入门:为百川2-13B量化模型定制自动化模块 1. 为什么选择OpenClaw开发技能? 去年冬天,我为了给团队搭建一个内部天气查询助手,尝试过至少三种不同的自动化方案。要么是API调用太复杂,要么是自然语言处…...
ColorMemLCD电子纸驱动库:面向LPM013M126A的嵌入式低功耗显示方案
1. ColorMemLCD 库概述ColorMemLCD 是一款专为 JDI(Japan Display Inc.)LPM013M126A 型彩色内存式 LCD 显示模块设计的嵌入式图形驱动库。该库并非从零构建,而是继承自 ARM mbed OS 生态中广泛使用的GraphicDisplay抽象基类,延续了…...
Arduino平台SX1280 2.4GHz LoRa轻量驱动库
1. 项目概述PlugAndPlayForLoRa 是一个面向 Arduino 生态的轻量级 LoRa 物理层(PHY)驱动库,专为 SX1280 射频芯片设计,工作于 2.4 GHz ISM 频段。该库并非协议栈(如 LoRaWAN),而是直接对接 SX12…...
DFPlayer Mini串口协议与嵌入式驱动开发实战
1. DFPlayer Mini 驱动库技术解析:面向嵌入式工程师的底层控制实践DFPlayer Mini 是 DFRobot 推出的一款高度集成、低成本、低功耗的串口控制 MP3 播放模块,广泛应用于智能语音播报、工业人机交互、教育机器人、IoT 音频终端等场景。其核心价值在于&…...
Windows资源管理器终极美化指南:一键添加惊艳毛玻璃效果
Windows资源管理器终极美化指南:一键添加惊艳毛玻璃效果 【免费下载链接】ExplorerBlurMica Add background Blur effect or Acrylic (Mica for win11) effect to explorer for win10 and win11 项目地址: https://gitcode.com/gh_mirrors/ex/ExplorerBlurMica …...
TVM构建系统详解:CMake与Makefile配置最佳实践
TVM构建系统详解:CMake与Makefile配置最佳实践 引言:TVM构建系统的核心挑战 深度学习编译器TVM(Tensor Virtual Machine)作为一个跨平台、多后端的开源项目,其构建系统面临着独特的复杂性。开发者需要在不同架构&#…...
如何用Blade框架实现高效事件驱动架构:异步处理与消息队列终极指南
如何用Blade框架实现高效事件驱动架构:异步处理与消息队列终极指南 【免费下载链接】blade :rocket: Lightning fast and elegant mvc framework for Java8 项目地址: https://gitcode.com/gh_mirrors/bl/blade Blade是一款基于Java8的轻量级MVC框架…...
