RVC 语音转换完整教程:用 10 分钟音频训练可用音色克隆模型
【免费下载链接】Retrieval-based-Voice-Conversion-WebUIEasily train a good VC model with voice data <= 10 mins!项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-based-Voice-Conversion-WebUI
Retrieval-based-Voice-Conversion-WebUI(下称 RVC)是一个开源的语音音色转换/变声框架:用 10 分钟左右的低底噪音频就能训练出可用的音色克隆模型,自带 WebUI 训练与推理界面和实时变声程序。它的底模基于约 50 小时的开源 VCTK 语料训练,没有版权顾虑。下面按"环境 → 跑通流程 → 排坑 → 原理 → 调优"的顺序讲一遍,每节都能独立查阅。
1. 安装环节:最容易出问题的三处
克隆仓库并按硬件装依赖
git clone https://gitcode.com/GitHub_Trending/re/Retrieval-based-Voice-Conversion-WebUI cd Retrieval-based-Voice-Conversion-WebUI当前分支面向Python 3.12 x64(Ubuntu 推荐 24.04)。旧教程里的 3.8–3.10 说法已不适用,按老文章直接装依赖大概率出错。装完 Python 3.12 后建虚拟环境,再按硬件选对应依赖文件:
| 硬件 | 依赖文件 |
|---|---|
| CPU / AMD / Intel | requirments_cpu_py312.txt(Windows 可走 DirectML) |
| NVIDIA RTX 50 系 | 先装 CUDA 12.8 版 Torch,再装requirments_cu128_py312.txt |
| RTX 50 系以前 | 先装 CUDA 11.8 版 Torch,再装requirments_cu118_py312.txt |
文件顶部已内置下载源,大陆网络一般不用改;换官方源只动--index-url两行,包版本和两阶段顺序保持不变。装完可用一行命令验证 CUDA 状态:
python -c "import torch; print(torch.__version__, torch.cuda.is_available())"预训练模型文件要放对位置
RVC 不会自动拉取全部模型,需要把官方模型仓库里的文件放到约定的目录:assets/hubert_base/(特征提取用)、assets/rmvpe/rmvpe.pt(音高提取)、assets/pretrained/与assets/pretrained_v2/(v1/v2 训练底模)、assets/uvr5_weights/(仅用 UVR5 人声分离时需要)。目录结构在 README.md 里有完整列表,照抄即可。用户自己的模型和索引分别放assets/weights/和assets/indices/。
FFmpeg 不能缺
音频读写都走 FFmpeg。Ubuntu 装系统依赖时一并装了;Windows 可把 ffmpeg.exe、ffprobe.exe 放到项目根目录。验证方式就一条:ffmpeg -version。
2. 把"训练 → 推理"完整跑通一遍
启动 WebUI
Windows 双击 go-webui.bat,命令行环境直接:
python webui.py服务默认监听 7865 端口,端口冲突时可在 configs/config.py 里调整。实时变声界面由 realtime_gui.py 单独启动(对应 go-realtime_gui.bat)。
界面主要分四个功能区:数据/训练(切分、提音高、提特征、训模型、训索引)、推理(选音色和索引做转换)、ckpt 处理(小模型提取、模型融合)、系统设置。
一键训练背后发生了什么
点"一键训练"后,流程是:按静音切分音频(静音保留上限约 5 秒,再以 4 秒、0.3 秒重叠的方式分段)→ 提取 f0 音高 → 用 HuBERT 抽 256 维特征存入logs/实验名/3_feature256→ 从预训练底模继续训练 G/D 两个模型 → 用 faiss 对全部训练特征建 IVF 索引。每个实验的所有中间产物都在logs/实验名/下,想复现或续训都靠它。
成品模型在哪:60MB 的 .pth
这是新手最容易混的地方。logs/实验名/下几百 MB 的 G/D 文件是训练状态,用来续训和复现,不是拿来分享的。能推理、能分享的模型是assets/weights/下 60MB 以上的 .pth。如果你手上只有 logs 下的中间 ckpt,用 ckpt 选项卡里的"ckpt 小模型提取"(输入 G 开头那个,手动或自动选择是否携带音高、目标采样率)提取一次即可。分享时建议把 weights 里的 .pth 和对应的 .index 打包成 zip,省去对方填索引的步骤。
3. 排坑清单:出错了先查这几处
| 症状 | 原因与处理 |
|---|---|
| Cuda out of memory | 训练时调小 batch size(调到 1 还爆只能换卡);推理时缩小 configs/config.py 末尾的 x_pad、x_query、x_center、x_max |
| 训练结束找不到模型 | 见上一节:去assets/weights/找 60MB+ 的 .pth,或用 ckpt 提取 |
| 一键训练完没有 .index 文件 | 训练集太大时加索引步骤可能卡住,重新点一次"训练索引" |
| ffmpeg error / utf8 error | 大概率是路径问题:带空格、括号或中文的路径 |
| Connection Error | 黑控制台窗口被关掉了 |
| Expecting value: line 1 column 1 | 关掉系统代理(含服务端的 http_proxy/https_proxy) |
| 报 tensor size must match | 16k_wavs里有异常小的音频文件,删掉重训;中途换采样率则必须换新实验名从头来 |
| Windows 报 llvmlite.dll 缺失 | 安装 VC++ 运行库后重启 WebUI |
显存不够时的具体降法:当前 configs/config.py 会按设备自动定档——显存 ≤4G 用一组更小的查询参数(x_pad=1、x_query=5、x_center=30、x_max=32),Pascal 和 GTX 16 系强制 fp32,新卡才用 fp16。自动档位仍爆显存再手动往下调。按官方 FAQ 的说法:4G 显存以下基本可以放弃训练,4G 还有救。推理选卡则是改 config.py 里device cuda:后面的卡号,卡号映射在训练选项卡里能看到。
其他几个高频操作:中断续训靠关闭控制台重启、用相同参数点"训练模型"接着上次 checkpoint 走;中途加数据就新建实验名、把上次的最新 G/D 拷过去再一键训练;预处理阶段文件句柄/内存 error,就调低"提取音高和处理数据使用的 CPU 进程数"并手动把训练集音频切短。更多条目见 docs/cn/faq.md。
4. 为什么 10 分钟音频就能克隆:检索机制与 index_rate
RVC 的核心手段是检索。训练时把每段语音的 HuBERT 特征存下来并用 faiss 建 IVF 近似最近邻索引;推理时,对输入语音的特征从索引里搜出训练集中最接近的向量(top1 检索),用它替换输入源特征再做转换。这一步的意义在于"杜绝音色泄漏"——否则底模或推理源自己的音色会混进结果,克隆出来的声音不纯。
index_rate(0–1)控制检索混合的力度:调到 1 理论上没有音色泄漏,但音质完全以训练集为准——训练集音质低于推理源时,调高反而降音质;调到 0 则失去检索保护。训练集优质、时长足够时模型本身就不会引用源音色,index_rate 变得不重要,索引文件甚至可以不分发。索引的数学细节(IVF、距离度量、选参建议)写在 docs/en/faiss_tips_en.md。
5. 音高提取算法怎么选
推理管线里可选的 f0 提取器是 RMVPE、PM、FCPE 三种(见 infer/vc/pipeline.py),训练侧的音高提取在 train/dataset/extract_f0.py。
| 算法 | 特点 | 适用场景 |
|---|---|---|
| RMVPE | Interspeech 2023 方案,速度快、占用小、根绝哑音 | 默认推荐,绝大多数场景 |
| PM (parselmouth) | 轻量、快 | 低配设备、追求速度 |
| FCPE | 可选补充方案 | 特定实验需求 |
老版本里的 Harvest、Dio 在当前代码中已不作为选项。日常使用直接默认 RMVPE 即可,不必折腾。
6. 数据与训练参数:多少够用
数据标准
- 时长:推荐 10–50 分钟。音质高、音色有个人特色时 5–10 分钟也能训出结果;1–2 分钟的成功案例不可复现,不建议赌。
- 环境:低底噪优先。底噪大时模型音质会被训练集拉低,多少 epoch 都补不回来。
- 采样率:建议统一到 48k(configs 下 v1/v2 均有 48k 配置,见 configs/v2/)。
- 预处理时脚本会自动做降噪平滑和标准化,静音段按阈值切掉,但源头干净仍然省得最多。
参数怎么定
- total_epoch:底噪大、音质差的数据 20–30 轮足够,调高也带不动;音质好、时长多的数据可以放到 200 轮。
- batch_size:越大训练越稳但吃显存,按
nvidia-smi观察尽量调大;显存紧张就降到 1–2。 - 是否携带音高:训练时勾选与否决定模型能不能用于唱歌。不带音高的模型更轻,但不适合演唱场景,别训完才发现用错。
- 精度不用手动管:config.py 的 GPU 规则会自动在 fp16/fp32 间选择。
硬件方面不用追求顶配:4G 显存的卡可以训小模型,6G 以上训练推理都从容,12G/24G 才谈得上大批量实验。CPU 可跑但训练会慢很多,适合验证流程而非正式训练。
7. 模型融合与实时变声
ckpt 融合:在 ckpt 处理选项卡用 ckpt-merge 把两个或多个音色模型按比例混合,可以调特定音域的倾向,或造出谁都不像的新音色。AI 歌手、游戏角色定制常用这个。
实时变声:官方已做到端到端约 170ms 延迟;配合 ASIO 输入输出设备可压到约 90ms,但高度依赖声卡驱动。直播、游戏语音、语音聊天都可行。想进一步压延迟的方向是换更小的切分窗口和更快的 f0 算法,以及用 ASIO 而非 WASAPI 共享模式。
人声伴奏分离直接调用内置的 UVR5(tools/uvr5/,含 BS-Roformer 等模型),拿到干声再去训练或推理,比直接喂带伴奏的歌省事。
8. 读源码:四个入口就够
- infer/:推理核心。infer/module/models.py 是 v1/v2 模型定义,infer/vc/pipeline.py 是推理管线(f0 提取、索引检索、音量包络对齐都在这里),infer/rmvpe.py 是 RMVPE 音高模型。
- train/:训练侧。train/train.py 主训练循环,train/dataset/slicer2.py 是音频切分,train/train_index.py 建 faiss 索引。
- configs/:设备与显存规则、v1/v2 模型超参(32k/40k/48k 各一份 json)。
- webui.py:Gradio 界面入口,各功能区的 UI 逻辑都在这一层,算法本身不掺在里面。
界面文案支持 13 种语言,在 i18n/locale/ 下,改本地化直接动 json。
9. 接下来去哪
多语言文档在 docs/:中文 FAQ docs/cn/faq.md、训练指南 docs/en/training_tips_en.md、faiss 调参 docs/en/faiss_tips_en.md,日、韩、法、葡、土耳其语版本齐全。
学习路径可以分三步自查:
- 会用:独立跑通"数据 → 一键训练 → 训索引 → 推理出一条满意音频",知道 60MB 的 .pth 和 logs 里 ckpt 的区别。
- 用好:能按数据质量定 epoch、按显存调 batch 与查询参数、用 index_rate 处理音色泄漏,会用 ckpt-merge 融合音色。
- 用透:读得懂 pipeline 的检索与对齐逻辑,能改 f0 算法或切分策略,把实时链路压到更低的延迟。
关于后续:项目方预告的 RVCv3 底模参数更大、训练数据更多、效果提升,同时推理速度基本持平、所需训练数据量更少,可以持续关注。
训练集质量决定上限,参数只是逼近这个上限的方式。先把第一首曲子完整跑通,再逐节回头对号入座,比通读十遍教程有效。
【免费下载链接】Retrieval-based-Voice-Conversion-WebUIEasily train a good VC model with voice data <= 10 mins!项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-based-Voice-Conversion-WebUI
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考