SoVITS

TTS model

0
0
0
Python
public
Forked

GPT-SoVITS-WebUI

A Powerful Few-shot Voice Conversion and Text-to-Speech WebUI.

madewithlove

RVC-Boss%2FGPT-SoVITS | Trendshift

Python
GitHub release

Train In Colab
Huggingface
Image Size

简体中文
English
Change Log
License

English | 中文简体 | 日本語 | 한국어 | Türkçe


📖 目录


✨ 核心特性

  1. 零样本 TTS:输入一段5秒的语音样本,即可实时进行文本到语音转换。

  2. 少样本 TTS:仅需1分钟的训练数据对模型进行微调,即可显著提升音色相似度和真实感。

  3. 跨语言支持:支持在不同于训练数据集的语言上进行推理,目前已支持英语、日语、韩语、粤语和中文。

  4. WebUI 集成工具:集成了人声伴奏分离、自动训练集切分、中文ASR和文本标注等工具,帮助初学者轻松创建训练数据集和GPT/SoVITS模型。

  5. 多版本模型:提供v1、v2、v2Pro、v2ProPlus、v3、v4等多个版本,满足不同场景需求。

查看我们的 演示视频

🚀 快速开始

最简单的方式:Windows 集成包

如果你是 Windows 用户(测试版本 win≥10),可以直接 下载集成包,解压后双击 go-webui.bat 即可启动 GPT-SoVITS-WebUI。

中国用户可 在此下载

使用 Docker(推荐)

如果你已经安装 Docker,可以使用以下命令快速体验:

# 拉取最新镜像
docker pull xxxxrt666/gpt-sovits:latest

# 运行容器(完整版)
docker-compose run --service-ports GPT-SoVITS-CU128

详细 Docker 使用说明请见 Docker 部署 章节。

在线体验

🏗️ 项目架构

整体架构图

GPT-SoVITS
├── 📁 GPT_SoVITS/          # 核心算法实现
│   ├── AR/                 # 自回归模型(GPT部分)
│   ├── BigVGAN/            # 声码器(v3使用)
│   ├── module/             # 模型定义和训练组件
│   ├── feature_extractor/  # 特征提取(HuBERT、Whisper)
│   ├── text/               # 多语言文本处理前端
│   ├── TTS_infer_pack/     # 推理管道封装
│   └── configs/            # 训练和推理配置
├── 📁 tools/               # 辅助工具
│   ├── uvr5/               # 人声分离
│   ├── asr/                # 自动语音识别
│   ├── audio_sr.py         # 音频超分辨率
│   └── slice_audio.py      # 音频切片
├── 📁 SoVITS_weights*/     # SoVITS 模型权重(各版本)
├── 📁 GPT_weights*/        # GPT 模型权重(各版本)
├── api.py                  # 传统API(简单直接)
├── api_v2.py               # 增强API(功能丰富)
├── webui.py                # Gradio Web界面
└── config.py               # 全局配置文件

核心工作原理

GPT-SoVITS 采用两阶段架构:

  1. GPT(生成式预训练变换器):负责文本到语义的转换
  2. SoVITS(基于VITS的语音合成):负责语义到波形的转换

该系统通过参考音频提取音色特征,结合文本输入生成具有目标音色的语音。

🔧 安装指南

测试环境

Python 版本 PyTorch 版本 设备
Python 3.10 PyTorch 2.5.1 CUDA 12.4
Python 3.11 PyTorch 2.5.1 CUDA 12.4
Python 3.11 PyTorch 2.7.0 CUDA 12.8
Python 3.9 PyTorch 2.8.0dev CUDA 12.8
Python 3.9 PyTorch 2.5.1 Apple silicon
Python 3.11 PyTorch 2.7.0 Apple silicon
Python 3.9 PyTorch 2.2.2 CPU

Windows 安装

conda create -n GPTSoVits python=3.10
conda activate GPTSoVits
pwsh -F install.ps1 --Device <CU126|CU128|CPU> --Source <HF|HF-Mirror|ModelScope> [--DownloadUVR5]

Linux 安装

conda create -n GPTSoVits python=3.10
conda activate GPTSoVits
bash install.sh --device <CU126|CU128|ROCM|CPU> --source <HF|HF-Mirror|ModelScope> [--download-uvr5]

macOS 安装

conda create -n GPTSoVits python=3.10
conda activate GPTSoVits
bash install.sh --device <MPS|CPU> --source <HF|HF-Mirror|ModelScope> [--download-uvr5]

手动安装依赖

conda create -n GPTSoVits python=3.10
conda activate GPTSoVits

pip install -r extra-req.txt --no-deps
pip install -r requirements.txt

安装 FFmpeg

Conda 用户

conda install ffmpeg

Ubuntu/Debian 用户

sudo apt install ffmpeg
sudo apt install libsox-dev

Windows 用户

下载 ffmpeg.exeffprobe.exe 并放置于 GPT-SoVITS 根目录。

macOS 用户

brew install ffmpeg

Docker 部署

镜像选择

由于代码库更新迅速而 Docker 镜像发布周期较长,请:

  • 检查 Docker Hub 获取最新的可用镜像标签
  • 根据环境选择合适的镜像标签
  • Lite 表示 Docker 镜像不包含 ASR 模型和 UVR5 模型

环境变量

  • is_half: 控制是否启用半精度(fp16)。如果 GPU 支持,设置为 true 以减少内存使用。

共享内存配置

在 Windows (Docker Desktop) 上,默认共享内存大小较小,可能导致意外行为。根据可用系统内存增加 shm_size(例如增加到 16g)。

选择服务

docker-compose.yaml 定义了两个服务:

  • GPT-SoVITS-CU126 & GPT-SoVITS-CU128: 完整版,包含所有功能。
  • GPT-SoVITS-CU126-Lite & GPT-SoVITS-CU128-Lite: 轻量版,依赖和功能较少。

运行特定服务:

docker compose run --service-ports <GPT-SoVITS-CU126-Lite|GPT-SoVITS-CU128-Lite|GPT-SoVITS-CU126|GPT-SoVITS-CU128>

本地构建 Docker 镜像

bash docker_build.sh --cuda <12.6|12.8> [--lite]

📚 API 文档

GPT-SoVITS 提供两套 API 接口,满足不同使用场景:

1. 传统 API (api.py)

特点:简单直接,适合快速集成。

启动命令

python api.py -dr "参考音频.wav" -dt "参考文本" -dl "zh"

参数说明

参数 说明
-s, --sovits_path SoVITS 模型路径
-g, --gpt_path GPT 模型路径
-dr, --default_refer_path 默认参考音频路径
-dt, --default_refer_text 默认参考音频文本
-dl, --default_refer_language 默认参考音频语种
-d, --device 推理设备,“cuda” 或 “cpu”
-a, --bind_addr 绑定地址,默认 “127.0.0.1”
-p, --port 绑定端口,默认 9880
-fp, --full_precision 使用全精度
-hp, --half_precision 使用半精度
-sm, --stream_mode 流式返回模式,“close”/“normal”/“keepalive”

调用示例

GET 请求

http://127.0.0.1:9880?text=要合成的文本&text_language=zh

POST 请求

{
    "text": "要合成的文本",
    "text_language": "zh"
}

指定参考音频

{
    "refer_wav_path": "参考音频.wav",
    "prompt_text": "参考文本",
    "prompt_language": "zh",
    "text": "要合成的文本",
    "text_language": "zh"
}

2. 增强 API (api_v2.py)

特点:功能丰富,支持流式传输和更多参数。

启动命令

python api_v2.py -a 127.0.0.1 -p 9880 -c GPT_SoVITS/configs/tts_infer.yaml

主要端点

  • GET/POST /tts: 文本转语音
  • GET /control: 控制命令(restart/exit)
  • GET /set_gpt_weights: 切换 GPT 模型
  • GET /set_sovits_weights: 切换 SoVITS 模型
  • GET /set_refer_audio: 设置参考音频

TTS 请求参数

参数 类型 默认值 说明
text str 必填 要合成的文本
text_lang str 必填 文本语言(zh/en/ja/ko/yue)
ref_audio_path str 必填 参考音频路径
prompt_lang str 必填 提示文本语言
prompt_text str “” 提示文本
top_k int 5 top-k 采样
top_p float 1.0 top-p 采样
temperature float 1.0 温度参数
speed_factor float 1.0 语速控制
streaming_mode int/bool 0 流式模式:0-关闭,1-最佳质量,2-中等质量,3-最快速度
media_type str “wav” 音频格式:wav/ogg/aac/raw
sample_steps int 32 VITS v3/v4 采样步数
super_sampling bool false 是否启用超采样(v3)

流式模式说明

  • 模式 0 (false): 非流式,返回完整音频文件
  • 模式 1 (true): 最佳质量,最慢响应速度(旧版流式)
  • 模式 2: 中等质量,较慢响应速度
  • 模式 3: 较低质量,最快响应速度

调用示例

GET 请求

http://127.0.0.1:9880/tts?text=先帝创业未半而中道崩殂&text_lang=zh&ref_audio_path=ref.wav&prompt_lang=zh&prompt_text=我是参考文本&streaming_mode=2

Python 示例

import requests

url = "http://127.0.0.1:9880/tts"
payload = {
    "text": "要合成的文本",
    "text_lang": "zh",
    "ref_audio_path": "/path/to/ref.wav",
    "prompt_text": "参考文本",
    "prompt_lang": "zh",
    "streaming_mode": 2,
    "media_type": "wav"
}

response = requests.post(url, json=payload)
with open("output.wav", "wb") as f:
    f.write(response.content)

🔄 模型版本

版本对比表

版本 特点 适用场景 硬件要求
v1 初始版本,基础功能 实验性使用
v2 优化文本前端,5k小时预训练 通用场景,音频质量一般
v2Pro 性能超越v4,v2的硬件成本 高质量需求,硬件有限
v2ProPlus v2Pro的增强版 专业级质量 中高
v3 音色相似度更高,情感丰富 高质量参考音频
v4 修复v3金属伪影,原生48k输出 专业级,替代v3

版本选择建议

  • 新手/测试: 使用 v2 或 v2Pro
  • 一般使用: v2ProPlus 平衡质量与速度
  • 专业需求: v4(最佳质量)或 v3(情感丰富)
  • 硬件有限: v2Pro(性能接近v4但资源需求低)

预训练模型下载

如果 install.sh 运行成功,可跳过第1-3步。

中国用户可 在此下载所有模型

  1. GPT-SoVITS Models 下载预训练模型,放置于 GPT_SoVITS/pretrained_models

  2. 下载 G2PW 模型 G2PWModel.zip,解压并重命名为 G2PWModel,放置于 GPT_SoVITS/text。(仅中文TTS需要)

  3. UVR5(人声伴奏分离 & 去混响,附加功能)模型下载自 UVR5 Weights,放置于 tools/uvr5/uvr5_weights

  4. 中文ASR(附加功能)模型下载自 Damo ASR ModelDamo VAD ModelDamo Punc Model,放置于 tools/asr/models

  5. 英文或日文ASR(附加功能)下载 Faster Whisper Large V3 放置于 tools/asr/models

🔍 详细使用

数据集格式

TTS 标注 .list 文件格式:

vocal_path|speaker_name|language|text

语言字典:

  • ‘zh’: 中文
  • ‘ja’: 日语
  • ‘en’: 英语
  • ‘ko’: 韩语
  • ‘yue’: 粤语

示例:

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

微调和推理

打开 WebUI

集成包用户
双击 go-webui.bat 或使用 go-webui.ps1

其他用户

python webui.py <语言(可选)>

切换到 V1 版本:

python webui.py v1 <语言(可选)>

微调步骤

  1. 填写音频路径
  2. 将音频切分为小片段
  3. 降噪(可选)
  4. ASR 自动语音识别
  5. 校对 ASR 转录文本
  6. 转到下一个标签页,微调模型

打开推理 WebUI

集成包用户
双击 go-webui-v2.bat 或使用 go-webui-v2.ps1,然后在 1-GPT-SoVITS-TTS/1C-inference 打开推理 WebUI

其他用户

python GPT_SoVITS/inference_webui.py <语言(可选)>

python webui.py

然后在 1-GPT-SoVITS-TTS/1C-inference 打开推理 WebUI

命令行工具

UVR5 WebUI

python tools/uvr5/webui.py "<infer_device>" <is_half> <webui_port_uvr5>

音频切片

python audio_slicer.py \
    --input_path "<原始音频文件或目录路径>" \
    --output_root "<保存细分音频片段的目录>" \
    --threshold <音量阈值> \
    --min_length <每个子片段的最短持续时间> \
    --min_interval <相邻子片段之间的最短时间间隔> \
    --hop_size <计算音量曲线的步长>

数据集 ASR 处理(仅中文)

python tools/asr/funasr_asr.py -i <输入> -o <输出>

Faster-Whisper ASR(除中文外)

python ./tools/asr/fasterwhisper_asr.py -i <输入> -o <输出> -l <语言> -p <精度>

🧩 模块说明

核心模块 (GPT_SoVITS/)

  • AR/: 自回归文本到语义模型

    • models/t2s_lightning_module.py: GPT 模型定义
    • text_processing/: 文本处理工具
  • BigVGAN/: NVIDIA BigVGAN 声码器(v3使用)

    • bigvgan.py: 声码器模型
    • inference.py: 推理接口
  • module/: 模型组件

    • models.py: SoVITS 模型定义
    • attentions.py: 注意力机制
    • mel_processing.py: Mel 频谱处理
  • feature_extractor/: 特征提取

    • cnhubert.py: 中文 HuBERT 特征提取
    • whisper_enc.py: Whisper 编码器
  • text/: 多语言文本处理

    • cleaner.py: 文本清洗
    • symbols.py: 音素符号表
    • 各语言特定处理模块
  • TTS_infer_pack/: 推理管道

    • TTS.py: TTS 主类
    • TextPreprocessor.py: 文本预处理
    • text_segmentation_method.py: 文本切分方法

工具模块 (tools/)

  • uvr5/: 人声分离

    • webui.py: UVR5 Web界面
    • vr.py: 人声分离核心逻辑
  • asr/: 自动语音识别

    • funasr_asr.py: FunASR 接口(中文)
    • fasterwhisper_asr.py: Faster-Whisper 接口
  • audio_sr.py: 音频超分辨率

  • slice_audio.py: 音频切片工具

  • slicer2.py: 改进版音频切片

🤝 贡献指南

开发环境设置

  1. 克隆仓库
git clone https://github.com/RVC-Boss/GPT-SoVITS.git
cd GPT-SoVITS
  1. 创建 conda 环境
conda create -n gptsovits-dev python=3.10
conda activate gptsovits-dev
  1. 安装开发依赖
pip install -r requirements.txt
pip install -r extra-req.txt --no-deps

代码规范

  • 遵循 PEP 8 代码风格
  • 使用类型注解
  • 添加适当的文档字符串
  • 提交前运行现有测试

提交 Pull Request

  1. Fork 仓库
  2. 创建功能分支
  3. 提交更改
  4. 推送到你的分支
  5. 创建 Pull Request

❓ 常见问题

1. 推理速度慢?

  • v2ProPlus 的 RTF(推理速度)

    • 4060Ti: 0.028
    • 4090: 0.014(1400词≈4分钟,推理时间3.36秒)
    • M4 CPU: 0.526
  • 优化建议:

    • 使用半精度(is_half=true
    • 调整 batch_size 参数
    • 使用流式模式 3 以获得更快响应
    • 确保使用 GPU 推理

2. 内存不足?

  • 减少 batch_size
  • 启用半精度(is_half=true
  • 使用 Lite 版 Docker 镜像
  • 关闭不需要的模型(如 UVR5)

3. 音频质量差?

  • 确保参考音频清晰(5-10秒为宜)
  • 尝试不同版本模型(v4 质量最佳)
  • 调整 top_ktop_ptemperature 参数
  • 启用超采样(super_sampling=true,仅 v3)

4. 多语言支持问题?

  • 确保正确设置 text_langprompt_lang 参数
  • 检查文本是否包含混合语言,使用 auto 模式
  • 下载对应语言的 ASR 模型

5. Docker 容器启动失败?

  • 检查 Docker 版本(需要 20.10+)
  • 增加共享内存大小(shm_size: 16g
  • 检查 GPU 驱动和 CUDA 版本
  • 查看容器日志:docker logs <容器名>

🙏 致谢

特别感谢以下项目和贡献者:

理论研究

预训练模型

文本前端

WebUI 工具

感谢 @Naozumi520 提供粤语训练集和粤语相关知识指导。

感谢所有贡献者的努力


用户指南: 简体中文 | English

更新日志: English | 简体中文 | 日本語 | 한국어 | Türkçe

许可证: MIT License

v0.3.3[beta]