10分钟语音训练一个AI变声模型:RVC从零跑通到调参实战
【免费下载链接】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
用10分钟左右的干净录音,RVC(Retrieval-based-Voice-Conversion-WebUI)就能训练出一个可复现音色的变声模型,推理端端到端延迟可做到170ms,接ASIO设备时能压到90ms。这篇文章按"先把第一个模型跑出来"这条主线走:装环境、过数据、训练、验证,最后讲哪些参数值得动、哪些报错是假的。
先确认你的硬件和数据够不够
RVC对硬件不挑:4GB显存的卡还能救,2GB及以下官方FAQ里直接建议放弃训练、只跑推理。真正决定效果的是训练集,官方FAQ给出的建议区间是10min至50min,底噪低、音色统一的5~10min高质量数据也够用;1~2min的数据有人练成过,但不具备参考价值。
数据准备阶段就三件事:
- 用指向性麦克风在安静环境录,避免混响;
- 去掉首尾静音,切成5~10秒的小片段;
- 统一音量水平,别让某一段明显偏大。
如果手上只有带伴奏的成品歌,仓库内置了UVR5人声分离功能(权重放在assets/uvr5_weights/),可以先把人声剥出来再当训练集用。
环境安装:四步跑通推理环境
这一步坑比较多,按顺序做,别跳:
Python版本:3.8以上,官方Dockerfile用的是3.9。3.11装
llvmlite会冲突(这是poetry安装路线实测出的问题)。装PyTorch和依赖:
pip install torch torchvision torchaudio pip install -r requirements.txt按显卡选requirements文件:N卡用
requirements.txt,A卡/I卡用requirements-dml.txt,Linux下的A卡ROCM用requirements-amd.txt,I卡IPEX用requirements-ipex.txt。下载预训练资产:
hubert_base.pt、assets/pretrained/(用v2模型还需assets/pretrained_v2/)、assets/uvr5_weights/,仓库tools/下有对应的下载脚本。装ffmpeg:Ubuntu/Debian一条
sudo apt install ffmpeg,macOS用brew install ffmpeg,Windows把ffmpeg.exe/ffprobe.exe放到根目录。
装RMVPE(仓库推荐的人声音高提取算法,Interspeech 2023)还需把rmvpe.pt放到根目录,音高准确性上它比Harvest/Dio好且资源占用更小。
全部就绪后,启动WebUI:
python infer-web.py默认监听7865端口,浏览器会自动打开。A卡/I卡用户改用go-realtime-gui-dml.bat或go-web-dml.bat这类整合包入口。
最小可行路径:一键训练出第一个模型
WebUI里选v2的48k配置(配置文件在 configs/v2/,训练参数默认是batch_size=4、学习率1e-4),然后按界面引导走:上传切好的片段 → 指定实验名 → 一键训练。这一键流程实际会依次做:音频切片、提取音高、提取hubert特征、训练模型、生成索引。
两个新手最容易卡住的地方,先说清楚:
- 训练集路径:路径里带空格、括号、中文都可能让ffmpeg报错(ffmpeg error)或写filelist时报utf8 error。最省事的办法是把数据集放到纯英文短路径下。
- wavs16k里的小文件:如果报
The expanded size of the tensor (17280) must match the existing size (0)这类尺寸不匹配的错,大概率是wavs16k文件夹里有显著偏小的坏音频,删掉再重新点训练即可。注意一键流程中断后,训练完要手动再点一次"训练索引"。
训练完你会拿到两个东西:weights/下60MB以上的.pth模型文件,和added_开头的.index索引文件。推理时两个都要选上,index_rate给0.5~0.6做第一次试听是合理起点。
效果验证:怎么判断这次训练算成功
别只看"训练完成了",用三段式验证:
- 音色对不对:拿一段和训练集说话人相同的音频推一遍,听音色相似度;再拿一段完全不同的说话人推,确认不会串成训练集的声音。
- 有没有音色泄漏:推理源的声音特点往结果里漏,说明index_rate偏低,往1方向调;调满1理论上不再有泄漏,但音质会向训练集靠拢——训练集音质低于推理源时,调高反而会拉低音质。
- 有没有哑音/破音:这是音高提取的问题,优先换RMVPE而不是加epoch。
训练轮数(total_epoch)按数据质量定,官方FAQ的判断很直接:音质差底噪大,20~30就够,调再高也带不动;音质高、时长多,200都可以。先跑默认值,确认音色没问题再动这一个参数。
显存不够时优先调这几个参数
报Cuda out of memory时按这个顺序处理:
| 阶段 | 优先调整 | 说明 |
|---|---|---|
| 训练 | batch_size 调小 | 降到1还不够就换卡,没有别的办法 |
| 训练 | "提取音高和处理数据使用的CPU进程数"拉低 | 多进程预处理会把内存炸掉,报file/memory error先怀疑这个 |
| 推理 | configs/config.py里的 x_pad / x_query / x_center / x_max | 4GB显存卡默认会自动切到更小的一组值,改之前先看代码里现成的配置逻辑 |
另外一个隐蔽点:4GB以下显存的卡在device_config逻辑里会强制fp32并改写configs/inuse/下的配置,训练速度会变慢但不影响正确性,不用手动干预。
模型不满意的几个排查方向
- 音色不统一:训练集里混了不同录音设备/风格的片段。重建一个干净实验名,只留高质量片段。
- 中途想加数据:官方做法是所有数据新建实验名,把上一实验最新的G/D checkpoint拷进新实验目录,再一键训练,它会接着上次进度继续。
- 想微调已有音色:WebUI的ckpt处理选项卡里有ckpt-merge,可以按比例融合两个模型,0.5:0.5是常用的起点比例,融合效果建议换几段不同风格的音频对比听。
- 想推训练中间存的pth:先用ckpt选项卡做"小模型提取",别直接拿
logs/下几百MB的完整checkpoint去推理,会报f0/tgt_sr等key不存在。 - 分享模型:分享
weights/下的60MB级.pth加上对应.index,不要分享logs/下的完整实验文件。
进阶:实时变声和批量推理
模型调好后,两个高频用法:
- 实时变声:运行
go-realtime-gui.bat,仓库宣称端到端170ms延迟,ASIO输入输出下90ms。延迟体验高度依赖声卡驱动,ASIO设备是前提。 - 批量/命令行推理:WebUI跑通后,消息窗里会直接显示本次数据集处理和训练对应的命令行,照抄即可脱离界面复现;命令行推理的完整参数说明见 docs/cn/faq.md 的Q7。
部署上仓库提供了Dockerfile(基于nvidia/cuda:11.6.2,预下载v2预训练权重)和docker-compose.yml,docker build后容器默认暴露7865端口,适合不想在本机装一堆依赖的场景。更底层的推理管线在 infer/modules/vc/,做二次开发从这里入手。
多语言文档在 docs/ 下,中文FAQ和训练技巧分别对应docs/cn/里的 faq 和 training 系列,遇到具体报错先查那里,大部分错误都有现成解释。
下一步:录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
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考