资讯详情

RVC 训练流程完全指南:基于 Retrieval-based-Voice-Conversion-WebUI 的从数据到模型的每一步

📅 2026/9/9 20:33:47 | 华诺云谱 👁 阅读
RVC 训练流程完全指南:基于 Retrieval-based-Voice-Conversion-WebUI 的从数据到模型的每一步
RVC 训练流程完全指南基于 Retrieval-based-Voice-Conversion-WebUI 的从数据到模型的每一步【免费下载链接】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训练Train标签页的完整工作流展开逐条解析从实验配置、音频预处理、特征提取到生成式对抗网络GAN训练与特征索引构建的每个环节。读完本文你将掌握各训练步骤背后的数据变换逻辑、每个界面参数与目录产物的对应关系并能依据源码理解如何为语音与歌唱场景选择音高pitch策略、采样率、批大小等关键设置。本文主干对应仓库内 docs/fr/training_tips_fr.md、docs/en/training_tips_en.md、docs/jp/training_tips_ja.md 的多语言版本并以 infer-web.py、infer/modules/train/preprocess.py、infer/modules/train/extract/extract_f0_print.py 等源码为佐证保证描述与当前仓库一致。训练总览GUI 的 step1 / step2a / step2b / step3RVC 的训练界面以四个步骤组织。训练入口代码位于 infer-web.py训练标签页与相应回调从第 1171 行开始定义见 infer-web.pystep1填写实验配置实验名、采样率、版本、是否带音高指导等step2a加载并预处理训练音频按钮“处理数据”回调preprocess_datasetstep2b提取音高 f0 与 HuBERT 特征按钮“特征提取”回调extract_f0_featurestep3训练生成器/判别器与特征索引提供“训练模型”“训练特征索引”“一键训练”三个按钮回调click_train、train_index、train1key。一键训练train1key在内部依次串联调用预处理、特征提取、模型训练与索引训练四个子流程见 infer-web.py。每次实验的数据都会写入统一的实验目录/logs/你的实验名/。该目录内会依次生成下表列出的关键子目录是判断各步骤是否成功完成最直观的依据目录由哪一步生成内容采样率/格式0_gt_wavsstep2a 音频切片切片后归一化的原始采样率 wav目标采样率float32 wav1_16k_wavsstep2a 音频切片供 HuBERT 使用的 16 kHz 重采样 wav16000 Hzwav2a_f0step2b 音高提取每段音频的连续 f0 曲线.wav.npy2b-f0nsfstep2b 音高提取对数压缩后的离散 f0 编码1~255 整数npy3_feature256step2b 特征提取HuBERT 输出的内容特征npy256 维文档历史上的目录名为/logs/实验名/...前导斜杠示意 RVC 仓库根目录下的 logs 目录当前仓库中“logs”目录生成于运行路径之下训练界面提示为“实验数据放在 logs 下每个实验一个文件夹”见 infer-web.py。step1实验配置与音高策略选择进入“训练”标签页后首先需要填写实验配置其核心控件定义在 infer-web.py实验名exp_dir1每个实验对应一个独立文件夹默认示例名为mi-test。训练配置、日志与产物模型均保存在该文件夹下目标采样率sr2选项为40k与48k默认40k。即生成器输出的 wav 采样率同时也决定 step2a 中音频切片的重采样目标与所用预训练底模版本version19v1/v2默认v2是否带音高指导if_f0_3布尔选项默认开启。界面上明确提示“唱歌一定要语音可以不要”。音高指导pitch guidanceGUI 中标记为 f0是本项目最重要的一个开关。原理与权衡在文档中讲得很清楚若模型不考虑音高无 f0 分支生成器更轻量省去 f0 输入编码通道参数量更少、推理更快但不适合歌唱——因为歌声的旋律信息无法从内容特征中获得足够表达音高容易漂移、跑调若模型考虑音高则训练与推理阶段都需要额外提取 f0 曲线模型能更准确还原目标说话人/歌手的旋律适合歌声转换。在源码侧该开关决定使用的生成器网络结构带 f0 时训练加载SynthesizerTrnMs256NSFsidv2 为SynthesizerTrnMs768NSFsid不带 f0 时加载对应的_nono版本见 infer/modules/train/train.py。此外还需注意当前仓库默认实验名是小写logs目录下的单说话人实验step2a 处理时会自动遍历训练文件夹中所有可解码的音频界面上明确标注“暂时只支持单人训练”见 infer-web.py。step2a音频加载、降噪与切片归一化step2a 的目标是把任意时长、任意格式的原始音频变成一批长度规整、响度一致的训练片段。它由“处理数据”按钮触发preprocess_dataset最终调用 infer/modules/train/preprocess.py 中的PreProcess流水线。音频加载ffmpeg 解码 → int16 → float32加载规则不递归界面上输入一个训练文件夹路径后程序只会遍历该文件夹顶层的音频文件子目录中的文件不会被加载。即指定C:\Users\hoge\voices时C:\Users\hoge\voices\voice.mp3会被读取而C:\Users\hoge\voices\dir\voice.mp3不会见 infer/modules/train/preprocess.py 中os.listdir(inp_root)仅枚举一层目录的实现。因此训练素材请平铺放在同一目录下。解码链路RVC 内部通过 ffmpeg 读取音频因此只要是 ffmpeg 支持的扩展名mp3、wav、flac、m4a、ogg 等都能自动解码。加载实现见 infer/lib/audio.py 的load_audio以ffmpeg.input(file, threads0)读取转码为pcm_f32le单声道、目标采样率从而完成“ffmpeg 解成 int16 → 再转 float32 → 归一化到 -1 ~ 1”的整个流程文档亦描述了该过程。去噪高速滤波避免削波伪影文档提到“音频通过 scipy 的 filtfilt 平滑”。在 infer/modules/train/preprocess.py 中预处理器构建了一个 5 阶、48 Hz 高通巴特沃斯滤波器signal.butter(N5, Wn48, btypehigh, fssr)滤除直流与极低频噪声。源码中可以看到 filtfilt 被替换为signal.lfilter注释说明是“zero phased digital filter cause pre-ringing noise”零相位滤波会引起前振铃噪声即当前实现选择有因果性的 lfilter 以避免脉冲前振铃。这是文档撰写后实现演进的一处差异应以当前仓库代码为准。音频切片静音切段 固定窗切片切片逻辑分两级静音切段利用 RMS 能量检测长静音段将其作为自然断点切开音频。文档中标注的max_sil_kept 5 秒?对应Slicer中的参数max_sil_kept500毫秒单位即最长保留 0.5 秒静音此外还有threshold-42dB、min_length1500、min_interval400、hop_size15等默认值见 infer/modules/train/preprocess.py 与 infer/lib/slicer2.py。静音检测的滑动窗口与切点搜索实现见 infer/lib/slicer2.py。固定窗切分静音切段后再以约3.7 秒窗长 0.3 秒重叠源码常量per3.7、overlap0.3见 infer/modules/train/preprocess.py进一步把长段切为训练样本。切分循环见 infer/modules/train/preprocess.py。文档按早期默认值描述为“每 4 秒切分、重叠 0.3 秒”。当前仓库的默认窗长为per 3.7秒对应 14800 个采样点 40k并在低显存/FP32 环境下会被动态调整为 3.0 秒见 configs/config.py、configs/config.py 对self.preprocess_per的改写。切片后每段还会剔除峰值过大的异常片段峰值 2.5 被过滤。归一化与双目录输出每个切片在写入前会做响度归一化tmp_audio / tmp_max * (max * alpha) (1-alpha) * tmp_audio即先把峰值拉平再按max0.9、alpha0.75混合保留原始动态见 infer/modules/train/preprocess.py。随后每个切片被同时写出两份0_gt_wavs目标采样率的原始 wav作为生成器的监督目标ground truth1_16k_wavs用librosa.resample重采样到 16 kHz 的 wav供下一步 HuBERT 特征提取使用HuBERT 的输入采样率固定为 16 kHz。并行加速预处理支持多进程并行进程数由 GUI 的np7滑块控制范围 0~config.n_cpu默认约 CPU 核数的 2/3见 infer-web.py。真正并行分发在 infer/modules/train/preprocess.py即按进程数把文件列表均分后各开一个multiprocessing.Process。素材越多加大进程数收益越明显小数据量时收益有限。step2b提取音高 f0 与 HuBERT 特征step2b 对1_16k_wavs逐文件提取两类特征由“特征提取”按钮触发extract_f0_feature见 infer-web.py。音高提取四种算法的选择只有当模型开启音高指导时才会执行 f0 提取。GUI 下拉框提供pm、harvest、dio、rmvpe、rmvpe_gpu五种选择界面提示infer-web.py给出了选型建议pm基于 parselmouthPraat的 autocorrelation 算法歌声场景可用它“提速”对带强烈周期性的歌唱信号快而稳定diopyworld 算法CPU 较弱、追求“高质量语音”时比 pm 更能提速harvestpyworld 算法质量更好但更慢rmvpe / rmvpe_gpu基于 RMVPE 神经网络模型效果最好略微吃 CPU/GPU为默认选项。以pm为例代码将 16 kHz 音频按 160 采样点 hop10 ms分帧调用parselmouth.Sound.to_pitch_ac参数为voicing_threshold0.6、pitch_floor50 Hz、pitch_ceiling1100 Hz见 infer/modules/train/extract/extract_f0_print.py。harvest/dio则调用 pyworld并经stonemask做基音精修rmvpe加载 assets/rmvpe 下的模型推理见 infer/modules/train/extract/extract_f0_print.py。提取的连续 f0 保存到2a_f0。随后进入f0 粗化coarse_f0先把频率按f0_mel 1127 * ln(1 f0/700)映射到 mel 刻度并线性归一化再取整得到1~255 的整数存为2b-f0nsf见 infer/modules/train/extract/extract_f0_print.py。也就是说文档所述的“对数转换到 1~255”实际是按 mel 刻度近似对数感知的粗量化——这一离散编码直接作为生成器的 f0 条件输入。HuBERT 特征提取读取1_16k_wavs中每个 16 kHz wav送入 HuBERT 模型得到内容特征隐藏层 embedding。GUI 提示“使用 GPU 提取特征选择卡号”即该步在 GPU 上执行特征保存为256 维v1/ 768 维v2的 npy放入3_feature256命名沿用 v1 的 256 维习惯。模型的加载依赖 assets/hubert 下的权重v1 与 v2 分别对应SynthesizerTrnMs256NSFsid与SynthesizerTrnMs768NSFsid系列见 infer/modules/train/train.py。这些内容特征在推理阶段既用于生成器的输入也用于下一步检索特征索引。卡号与进程配置step2b 界面提供两块 GPU 配置gpus6“以-分隔输入使用的卡号例如0-1-2”表示特征提取使用卡 0、1、2gpus_rmvpeRMVPE 专用卡号分配例如0-0-1表示卡 0 上跑 2 个进程、卡 1 上跑 1 个进程见 infer-web.py。step3GAN 训练、预训练底模与索引构建术语速查step、batch、epoch文档用一段新手友好的比喻解释了训练循环的粒度step步一次模型更新。每个 step 取一批batch_size个样本做一次前向预测与误差反向修正epoch轮把整个数据集完整过一遍训练总时长≈ 每 step 耗时 ×数据集样本数 ÷ batch_size× epoch 数。据此可推导出调参的方向batch_size 越大学习越稳定且分摊到每个样本上的开销每 step 耗时 ÷ batch_size越小但显存占用越大。文档建议用nvidia-smi观察 GPU 显存在硬件允许范围内尽量调大 batch_size 以缩短总训练时间。当前仓库默认 batch_size 会根据显存自动给出取可用显存最小值的一半见 infer-web.py 附近逻辑。预训练底模从零训练 → 迁移学习RVC 不从零开始训练而是从预训练权重继续微调这是它能用极少量数据项目定位为 ≤10 分钟语音训练出可用模型的关键。生成器 G 与判别器 D 分别加载底模。文档多语言版本对默认底模的描述存在笔误两种开关写了同一组文件这里以当前仓库 UI 实际默认值为准。当目标采样率为 40k、版本为 v2 时界面默认填入生成器底模 Gassets/pretrained_v2/f0G40k.pth判别器底模 Dassets/pretrained_v2/f0D40k.pth见 infer-web.py目录结构见 assets/pretrained_v2。底模与配置的对应关系由get_pretrained_models计算文件名由assets/pretrained{路径}/{f0前缀}G{D}{采样率}.pth拼出其中是否带音高指导决定前缀是f0还是空字符串见 infer-web.py。切换采样率40k/48k或版本v1/v2时界面会自动重算 G/D 底模路径sr2.change、version19.change回调见 infer-web.py。断点续训训练过程中模型参数会按save_every_epoch定期保存为logs/实验名/G_{epoch}.pth与logs/实验名/D_{epoch}.pth文件名中带 epoch 数字。通过在 GUI 的“加载预训练底模 G/D 路径”中填上自己上次保存的 ckpt 路径即可从该轮次继续训练同理也可以填入别的实验产出的模型实现“在其他实验权重基础上的再训练”。训练主流程的命令行封装位于 infer-web.py调用infer/modules/train/train.py并传入实验名、采样率、f0 开关、batch_size、GPU 卡、总轮数-te、保存间隔-se、G/D 底模路径、缓存开关等参数。训练内部的采样/批处理与数据加载逻辑见 infer/modules/train/train.py 与数据管线 infer/lib/train/data_utils.py。特征索引faiss 近似最近邻检索训练完成后还需构建“特征索引”。其动机是RVC 在训练阶段保存了训练用到的 HuBERT 特征值推理时算法会在训练特征中检索与当前输入最相似的特征用检索结果引导合成从而显著提升音色还原度与稳定性为让这一步检索足够快需要预先构建索引。索引构建使用近似最近邻库faissFAISSFacebook AI Similarity Search读取logs/实验名/3_feature256下所有特征 npy学习并写出索引文件logs/实验名/add_XXX.index。检索到的近似特征随后会被编码进推理相关用法可参考工具脚本 tools/infer/infer-pm-index256.py 中对 pm-index 的加载/检索方式。版本说明文档注明“从 20230428 更新起total_fea.npy从 index 中读取不再需要单独保存/指定”。即较新版本会在训练时把全部训练特征汇总total_fea.npy并构建索引旧版的“手填特征文件”环节已被自动流程取代add_XXX.index的规模由XXX特征数量标注。若不做任何索引训练模型在推理时也仍可运行只是会退化为纯“平均特征”合成音色还原会明显变差——因此索引训练是达到良好音色还原的必要步骤。三个按钮的分工训练标签页 step3 底部依次排列三个按钮infer-web.py其定位总结如下训练模型在完成 step2b 后点击只执行 GAN 训练生成器 判别器 其优化器与学习率调度把中间权重写回实验目录训练特征索引模型训练完成后点击单独执行 faiss 索引学习产出add_XXX.index一键训练将“step2a/2b数据与特征准备→ 模型训练 → 索引训练”一次性串起来train1key回调逻辑见 infer-web.py适合素材已就绪、希望一口气跑完整个管线的场景。结合源码进一步理解训练超参GUI 之外的更多训练细节沉淀在 json 配置文件中它们会随实验写入实验目录供训练进程读取。以 configs/v2/48k.json 为例v1 40k 对应 configs/v1/40k.json核心字段包括train.learning_rate1e-4配合lr_decay: 0.999875逐步衰减train.batch_size4GUI 的 batch_size 滑块实际是“每张显卡的 batch_size”多卡时相乘train.segment_size17280即训练时从切片内再随机截取的语音帧长48k 对应 0.36 strain.fp16_run是否以半精度FP16训练低显存或无 N 卡环境会被强制关闭见 configs/config.pydatasampling_rate、hop_length、win_length、n_mel_channels等 mel 谱参数决定判别器输入modelinter_channels192、gin_channels256内容特征维数、upsample_rates[12,10,2,2]等刻画生成器的解码结构与上采样倍率。学习率/步数与文档公式的印证训练代码基于上述 batch_size、segment 数与 epoch 推进global_step文档给出的“总时长 ≈ 每 step 时长 × (数据量 ÷ batch_size) × epoch 数”正是该循环的宏观表达。因此实践中固定数据量时增大 batch_size 减少所需 step 数增大total_epoch则线性拉长训练而“每 step 时长”主要由模型规模、segment 长度与 GPU 算力决定。端到端检查清单综合 GUI 与源码一个最小可用的 RVC 训练流程可归结为以下清单在logs下规划实验名如mi-test把全部训练音频平铺在同一文件夹不递归子目录step1确定采样率40k/48k、版本v1/v2与是否带音高指导歌声开、纯语音可关必要时切到 rmvpe 以保 f0 质量step2a点“处理数据”观察0_gt_wavs、1_16k_wavs是否生成足量切片step2b点“特征提取”确认2a_f0、2b-f0nsf、3_feature256三个目录都有产物并用nvidia-smi监控显存以决定后续 batch_sizestep3核对 G/D 底模路径与实验匹配采样率、f0 前缀、v1/v2设置save_every_epoch、total_epoch、batch_size后点“训练模型”训练结束后点“训练特征索引”生成add_XXX.index随后即可把实验目录中的权重与索引接入推理标签页使用。整个过程遵循“预处理 → 特征化 → 迁移学习微调 → 索引加速检索”的固定管线理解每一步在做什么是排查数据质量问题、优化音色还原效率的关键。若需更详细的界面操作说明与常见问题可继续阅读 docs/en/faq_en.md 与仓库根目录 README.md。【免费下载链接】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),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。