RVC语音转换实战指南:10分钟数据训出专属音色,实时变声延迟170ms
【免费下载链接】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 WebUI)是一个基于 VITS 的开源语音转换与变声框架,覆盖数据预处理、模型训练、离线推理到实时变声的完整链路。两个关键数字可以先记住:官方实时变声界面已做到端到端 170ms 延迟,配合 ASIO 设备可压到 90ms;训练侧官方推荐至少收集 10 分钟低底噪语音数据,就能得到效果不错的转换模型。
把 WebUI 跑起来:装依赖、备预训练模型
Python 版本需大于 3.8。先安装 PyTorch 核心依赖,再按显卡类型装对应依赖文件:N 卡执行pip install -r requirements.txt,A 卡/I 卡用requirements-dml.txt,A 卡 ROCM(Linux)用requirements-amd.txt,I 卡 IPEX(Linux)用requirements-ipex.txt。macOS 用户直接跑仓库根目录的run.sh即可。
依赖装好后,还需要一批预训练模型才能训练和推理。仓库的assets目录就是存放这些模型的位置(如assets/hubert/hubert_base.pt),tools文件夹里提供了下载脚本。启动时 Windows 用户双击go-web.bat,即可进入可选各项操作的训练推理界面。
💡 底模基于接近 50 小时的开源 VCTK 训练集(100 位说话人)训练,无版权顾虑,直接下载即可使用。
训练集怎么备:时长与音质各卡多少
官方建议训练集时长在 10 分钟至 50 分钟之间;如果目标说话人音色统一且有个人特色,数据越多越好。精简且音色有特色的高水平训练集,5 分钟至 10 分钟也能训出可用模型;1 至 2 分钟有人成功过,但对音色特色要求极高,经验不可复现,不具备参考价值。
动手前多做一步检查:训练后wavs16k文件夹下会生成 16k 采样率的切分音频,用文件管理器按大小排序,删掉那些明显比其他文件小的片段。否则训练时容易报RuntimeError: The expanded size of the tensor (17280) must match the existing size (0) at non-singleton dimension 1,一键流程会中断。
一键训练与 total_epoch:轮数怎么定
total_epoch(总训练轮数)按训练集质量分两档:音质差、底噪大的数据,20~30 轮就够——轮数调再高,底模的音质也带不动低音质训练集;音质高、底噪低、时长充足的数据,200 轮是合适的选择,RVC 训练速度快,多等一会儿通常值得。
显存方面,4G 显存的显卡还能用,4G 以下基本可以直接放弃。训练报 Cuda out of memory 时优先缩小 batch size。训练成功时消息窗会显示 "Training is done. The program is closed.",其后紧邻的报错可忽略。⚠️ 中断后想继续训练,只能关掉控制台重新双击go-web.bat,网页参数需重新填写,用相同参数点训练模型会从上次 checkpoint 接着跑。
索引文件没生成怎么办
一键训练结束后,logs/实验名下应出现以 "added" 开头的索引文件。如果没生成,常见原因是训练集太大导致添加索引的步骤卡住。处理办法很简单:回到界面再次点击"训练索引"按钮(FAQ 中 Q2 已说明该问题可通过批量 add 索引解决内存压力)。
索引文件的作用配合后面的 index rate 一起理解:RVC 用 top1 检索把输入源特征替换为训练集特征,从机制上压制音色泄露。所以索引不是可有可无的附件,训练完成后记得确认它确实生成了。
音色泄露怎么调:index rate 的含义
当底模和推理源的音质高于训练集时,它们会"带高"结果音质的代价是音色往底模或推理源方向偏,即音色泄露。index rate 就是控制这一混合程度的旋钮:
- 调到 1:理论上不再有推理源的音色泄露,但音质会倾向训练集。若训练集音质比推理源低,调高反而拉低音质。
- 调到 0:失去利用检索混合保护训练集音色的效果。
- 训练集优质且时长充足、total_epoch 调高后,模型本身不太引用推理源和底模音色,泄露问题很少出现,此时 index rate 的重要性下降,甚至可以不建立、不分享 index 文件。
实时变声:170ms 怎么来的,还能再低吗
运行go-realtime-gui.bat打开实时变声界面(A 卡/I 卡用户用go-realtime-gui-dml.bat),即可体验低延迟变声。当前端到端延迟为 170ms;若输入输出设备都使用 ASIO,可做到 90ms,但这非常依赖硬件驱动支持。
⏱️ 两个实操细节:输入和输出设备应选择同种类型(例如都选 MME);实时界面支持参数热更新(调参不必中止重启)和模型懒加载(加载过的模型不重复加载),试参数时的等待会少很多。语音聊天、直播类场景可以先按默认参数跑一遍,再针对性调整。
分享模型:找到 weights 里 60MB 以上的 pth
最容易踩的坑是发错文件。rvc_root/logs/实验名下存储的 pth 是实验状态文件,用于复现和继续训练,不能直接拿来分享推理;真正用于分享的,是weights文件夹下大小为 60+MB 的 pth 文件。若误把 logs 下几百 MB 的大文件复制到 weights 强行推理,可能出现 f0、tgt_sr 等 key 不存在的报错——这种情况用 ckpt 选项卡最底部的"ckpt 小模型提取"功能提取一次即可,提取完 weights 下会出现可用的 60+MB pth。
后续版本计划把weights/exp_name.pth和logs/exp_name/added_xxx.index合并打包成weights/exp_name.zip,分享时省去填写 index 的步骤。若你要把转换流程集成到自己的程序里,可参考 tools/infer_cli.py,它提供了命令行推理入口。
常见问题与下一步建议
- ffmpeg error / utf8 error:大概率不是 ffmpeg 本身的问题,而是路径含空格、括号等特殊符号,或训练集音频为中文路径导致写入 filelist.txt 出错。
- Connection Error:多半是关掉了控制台黑色窗口。
- WebUI 弹出 Expecting value: line 1 column 1 (char 0):关闭系统局域网/全局代理,服务端代理(如 http_proxy/https_proxy)同样要 unset 掉。
- 内存或文件页面 error:把"提取音高和处理数据使用的 CPU 进程数"拉低,或手动把过长的训练音频切短。
完整问答见 docs/cn/faq.md。下一步建议:先双击go-web.bat走一遍"一键训练 + 训练索引"完整流程,确认 weights 下生成了 60+MB pth 和 added 开头的索引,再打开go-realtime-gui.bat实测 170ms 延迟下的听感,最后按 index rate 从 0.5 起逐步上调,对比音色泄露与音质的取舍。
【免费下载链接】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),仅供参考