news 2026/9/10 14:13:48

RVC 版本演进技术全解:从实时变声、RMVPE 音高提取到训练与索引链路的工程实践(2023-04 至 2023-10)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RVC 版本演进技术全解:从实时变声、RMVPE 音高提取到训练与索引链路的工程实践(2023-04 至 2023-10)

RVC 版本演进技术全解:从实时变声、RMVPE 音高提取到训练与索引链路的工程实践(2023-04 至 2023-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

RVC(Retrieval-based-Voice-Conversion-WebUI)是一套基于 VITS 的少样本变声框架,其发展历程集中记录在官方更新日志中。本文以 docs/en/Changelog_EN.md(配合 docs/cn/Changelog_CN.md)为核心主线,系统复盘 2023 年 4 月至 10 月 RVC 在实时变声、RMVPE 音高提取、faiss 特征索引、训练效率与硬件适配等方向上的关键版本迭代,并结合仓库源码印证每项更新背后的实现原理。读完本文,你将掌握 RVC 训练/推理链路的核心参数含义、主流功能模块的代码位置,以及理解官方"实验—取舍—落地"的工程决策逻辑。

更新日志整体脉络与版本时间线

仓库内 docs/en/Changelog_EN.md 与 docs/cn/Changelog_CN.md 记录了同一份演进史:文件采用倒序排列(最新版本 2023-10-06 在最上方),并在中段用#注释行将"近期更新"与"历史 changelog"区隔。为了便于按时间线理解技术演进,下表以正序方式概括各版本主题:

版本日期核心主题
2023-04-09训练参数修正、显存利用率优化、batch/epoch 语义调整
2023-04-16实时变声迷你 GUI 上线、50Hz 以下频段滤波、WebUI 多语言
2023-04-28faiss 索引升级、移除 total_npy 依赖、16 系显卡解锁
2023-05-13/05-14harvest 音高缓存、音量包络对齐、小模型周期保存、v2 预训练
2023-05-28UVR5 去混响/去回声、呼吸清辅音保护、32k 训练废弃
2023-06-18v2 的 32k/48k 预训练、超长训练集 MiniBatch-KMeans、ONNX 导出
2023-08-13RMVPE 全链路集成、A 卡/I 卡 DirectML 支持、大批 bug 修复
2023-10-06实时变声 GUI 参数热更新/懒加载、推理性能与低音提升

下文按时间正序逐版本拆解,并在各小节中补充源码级佐证,保证"日志条目"都能对应到仓库里的真实实现。

2023-04-09:训练效率基线修复与显存利用优化

该版本是日志中最早期的一次"性能基建"更新,围绕训练速度与稳定性展开:

  • GPU 利用率显著提升:官方日志描述 A100 从 25% 提升至约 90%、V100 从 50% 提升至约 90%、2060S 至 85% 左右、P40 至 95% 左右,训练速度显著提高。这类数字属于项目官方声明,可作为理解迭代动机的参考。
  • batch_size 语义修正:总 batch_size 改为"每张 GPU 的 batch_size",避免多卡训练时按卡数累加导致语义混乱。
  • total_epoch 上限解锁:最大 epoch 限制从 100 提升至 1000,默认值从 10 提升至 20。
  • ckpt 提取与推理修复:修复 ckpt 处理时"是否带音高(f0)"识别错误导致的异常推理。
  • 分布式训练保存修复:修复多 rank 分布式训练时每个 rank 各保存一次 ckpt 的问题。
  • 特征与静音修复:特征提取阶段加入 nan 特征过滤;修复静音输入/输出产生随机辅音或噪声的问题(老模型需用新数据集重训)。

这些修复在源码中有清晰的延续痕迹。例如 configs/config.py 的device_config()会读取显卡名与显存,对包含 "16"(且非 V100)、"P40"、"P10"、"1060/1070/1080" 等型号强制切换 FP32 并改写训练配置;同时gpu_mem <= 4时还会下调preprocess_per。也就是说,日志中"针对不同显卡放宽/收紧精度限制"的策略,正是通过这段运行时显存探测逻辑落地的。

2023-04-16 与 2023-04-28:实时变声 GUI 诞生、语言支持与 faiss 索引升级

实时变声迷你 GUI

2023-04-16 起,仓库新增本地实时变声迷你 GUI,双击 go-realtime-gui.bat(或运行 gui_v1.py)即可启动。该模块使用 FreeSimpleGUI + sounddevice 实现低延迟音频采集/回放,其中Harvest进程在子进程中以fs=16000f0_floor=50f0_ceil=1100frame_period=10调用pyworld.harvest计算实时音高,并通过跨进程队列传递结果,避免阻塞主流程。

训练与推理的低音友好改造

两个直接相关的音频处理改动:

  • 50Hz 以下频段滤波:训练与推理均对 50Hz 以下频段进行过滤,去除无意义的次声能量。
  • pyworld 最低音高下限 80 → 50:此前 pyworld 提取 f0 的默认下限为 80Hz,导致 50–80Hz 之间的男声低音"哑掉"。将下限调至 50Hz 后低音男声不再丢失。

源码中这一默认值被固化在多个 F0 预测器中:例如 HarvestF0Predictor.py 与 PMF0Predictor.py 的构造函数默认参数均为hop_length=512, f0_min=50, f0_max=1100。可见"低音保护"不是日志中的一次性补丁,而是贯穿训练与推理共用的 F0 提取基线的工程决策。

WebUI 多语言与显卡识别修正

WebUI 支持根据系统区域设置自动切换语言,当时支持 en_US、ja_JP、zh_CN、zh_HK、zh_SG、zh_TW,不支持的 locale 默认回退 en_US;这一套多语言机制如今已演化为仓库 i18n/ 目录下十余种语言的 JSON locale 体系。同时修复了部分显卡识别失败(如 V100-16G、P4 识别异常),与上一节所述 configs/config.py 中按torch.cuda.get_device_name()判断精度的逻辑直接相关。

faiss 索引升级与 total_npy 解绑

2023-04-28 版本将 faiss 索引设置升级为"速度更快、质量更高"的配置,并取消了 total_npy 依赖——后续分享模型不再需要额外填写 total_npy 文件。此外还解锁了 16 系显卡限制、为 4GB 显存 GPU 提供 4GB 推理配置;修复了部分音频格式下 UVR5 人声伴奏分离的 bug,并让实时变声迷你 GUI 支持非 40k 与非"不懈怠(lazy)"音高模型。这套索引方案的当前形态可参考 tools/infer/train-index-v2.py:它使用faiss.index_factory(768, "IVF%s,Flat")构建倒排索引、nprobe=1、按 8192 条批量 add,并用16 * sqrt(N)计算簇数——这正是"速度更快"诉求下的具体实现。

2023-05-13 与 2023-05-14:harvest 音高缓存、音量包络对齐与小模型周期保存

检索与推理体验的细节打磨

2023-05-13 的更新重点在"减少重复劳动":

  • 清理一键包内旧版本 runtime 残留的lib.infer_packuvr5_pack冗余代码;
  • 修复训练集预处理中的伪多进程 bug;
  • 为 harvest 音高识别增加中值滤波半径调节选项,可削弱"哑音"现象;
  • 导出音频支持后处理重采样;
  • 训练相关n_cpu进程数的适用范围从"仅 f0 提取"扩展为"数据预处理 + f0 提取";
  • WebUI 自动检测logs文件夹下的 index 文件并提供下拉列表;
  • tab 页新增"常见问题解答"(FAQ);
  • 相同路径的输入音频引入音高缓存

音高缓存的引入动机很实际:使用 harvest 提取 f0 时,整条 pipeline 会经历漫长且重复的音高提取过程;若不缓存,用户实验不同音色、索引与中值滤波半径参数时,每次首次推理后的等待都非常痛苦。缓存命中后可显著改善"参数实验"这一典型 RVC 使用场景的响应速度。

音量包络对齐与"小模型按周期保存"

2023-05-14 引入的核心特性之一是音量包络对齐输入混合:用输入音频的音量包络去混合或替换输出的音量包络,可缓解"输入静音但输出出现小幅度噪声"的问题。日志同时给出明确的使用限制——输入音频背景底噪较大时不建议开启,且默认不开启(音量包络参数值为 1 可视为未开启),并在此版本支持了"按指定频率保存提取出的小模型":当你想对比不同 epoch 下的推理效果、又不愿保存全部大 checkpoint 并反复手工执行 ckpt 处理时,该功能非常实用。

其他变更包括:通过设置环境变量解决服务端开启全局代理导致的浏览器连接错误;开始支持 v2 预训练模型(当时仅公开 40k 版本测试,另两个采样率尚未训练完全);推理前限制超过 1 的过大音量;微调训练集预处理参数。

2023-05-28:UVR5 人声分离扩展、呼吸/清辅音保护与 v2 化过渡

  • 新增 v2 的 Jupyter Notebook 训练教程、韩文 changelog,并补充部分环境依赖;
  • 增加呼吸、清辅音、齿音保护模式,改善高音域/气息音的音色还原;
  • 支持 crepe-full 音高识别模式(完整分辨率版本);
  • UVR5 人声伴奏分离新增去延迟(de-echo)模型与 MDX-Net 去混响模型,并增加 HP3 人声提取模型(CN 日志细节);
  • 索引文件名增加版本与实验名称,便于多实验管理;
  • 人声伴奏分离与推理批量导出均增加音频导出格式选项(v1 32k 模型训练自此废弃)。

从仓库目录可看到该生态的落地痕迹:UVR5 相关的预训练权重清单存放于 assets/uvr5_weights/,对应的推理后端位于 infer/modules/uvr5/(含 mdxnet、vr 等实现),配置模板则在 infer/lib/uvr5_pack/lib_v5/modelparams/ 下以 JSON 形式提供数十种不同规格的声学参数。

2023-06-18:v2 预训练扩充、超长训练集自动 K-Means 与 ONNX 导出

该版本再次推进 v2 化并引入应对大规模数据的能力:

  • v2 新增32k 与 48k两个采样率的预训练模型(对应的模型配置文件见 configs/v2/32k.json 与 configs/v2/48k.json,v1/v2 各采样率 JSON 统一由 configs/config.py 的version_config_list管理并同步到configs/inuse/);
  • 修复非 f0 模型的推理报错;
  • 超过一小时的训练集在建立索引阶段自动执行 MiniBatch-KMeans,先缩小特征规模,再执行索引训练/加入/查询,显著加速超大特征库的处理;
  • 附送一个人声转吉他的玩具项目(Hugging Face Space 实验);
  • 数据预处理阶段自动剔除异常的过短切片;
  • WebUI 新增ONNX 导出选项卡(相关导出入口位于 infer/modules/onnx/ 与 tools/export_onnx.py)。

关于 K-Means 缩容,仓库中的 tools/infer/train-index-v2.py 给出了明确实现:当拼接后的特征数组行数超过2e5时,使用MiniBatchKMeans(n_clusters=10000, batch_size=256*n_cpu, compute_labels=False, init="random")将特征收敛为 1 万个聚类中心再做索引,这正是 changelog 中"索引训练、加入和查询更快"的工程含义。

值得关注的"失败实验"记录

官方日志难能可贵地记录了被否定的技术路线

  • 特征检索增加时序维度——无效;
  • 特征检索增加 PCA 降维——数据量大时可用 K-Means 缩小数据量,数据量小时降维耗时反而超过省下的匹配耗时;
  • 训练阶段在音高、gender、eq、噪声等维度做随机数据增强——无效;
  • 接入小型声码器(如 Vocos-RVC)——效果变差。

同一批 todolist 中,多个条目被标记删除并由 RMVPE 取代(详见下一节)。这些记录属于官方的内部实验结论,可作为理解 RVC 检索/训练设计取舍的背景,而非普适性的方法论结论。

2023-08-13:RMVPE 音高提取全链路集成与 A 卡/I 卡加速

这是日志中分量最重的一次更新,拆分为"常规 bug 修复"与"重点更新"两部分。

常规 bug 修复

  • 模型保存频率的最小总 epoch 数改为 1,最小总轮数下限调整为 2;
  • 修复不使用预训练模型时的训练报错;
  • 伴奏人声分离完成后及时清理显存;
  • faiss 保存路径由绝对路径改为相对路径,便于目录迁移;
  • 支持路径含空格(训练集路径与实验名称均不再报错);
  • filelist 取消强制 UTF-8 编码,提升对非标准文件名/元数据的兼容性;
  • 解决实时变声中开启 faiss 索引导致 CPU 占用极高的问题(实时链路对索引查询的 CPU 开销非常敏感)。

重点更新:RMVPE 与 DirectML

  • 官方日志宣布训练出当时的开源人声音高提取模型RMVPE,并用于 RVC 的训练、离线/实时推理,同时支持PyTorch / ONNX / DirectML三种后端;相比 crepe-full,其"更快且资源占用更小、低音效果更好"(README 中称其根绝哑音问题);
  • 通过pytorch-dml支持 AMD 显卡与 Intel 显卡的(1)实时变声、(2)推理、(3)人声伴奏分离;训练暂未支持 DML,会切换为 CPU 训练;并借助onnx_dml支持 RMVPE 在 GPU 上的推理。

RMVPE 在仓库中有多处落地证据:

  • 推理权重路径assets/rmvpe/rmvpe.pt与音频级推理入口定义于 infer/lib/rmvpe.py;
  • 训练数据侧分别有 CUDA 版 extract_f0_rmvpe.py 与 DirectML 版 extract_f0_rmvpe_dml.py,二者都加载assets/rmvpe/rmvpe.pt并调用model_rmvpe.infer_from_audio(x, thred=0.03),只是推理设备不同;
  • 在实时 GUI gui_v1.py 中,f0method 的可选项已扩展为pm / harvest / crepe / rmvpe / fcpe,说明实时链路同样受益于 RMVPE;
  • DirectML 的运行时切换逻辑位于 configs/config.py:当传入--dml参数时,程序会检测onnxruntime的 CUDA/DirectML DLL 存在情况,在onnxruntime-cudaonnxruntime-dml之间做目录重命名以切换推理后端,并把 torch 设备指向torch_directml.device(...)、强制 FP32。

2023-10-06:实时变声 GUI 体验跃迁与低音进一步强化

此版本围绕"实时变声"做了体验与性能的双重升级(CN 日志信息更细):

  • 参数热更新:调整参数无需中止并重启会话,界面参数即时生效;
  • 懒加载模型:已加载过的模型无需重复加载;
  • 新增响度因子(音量包络)参数,使输出响度向输入音频靠近;
  • 优化自带降噪效果与处理速度,并大幅优化推理速度;
  • 继续提升 RMVPE 音高提取算法效果,对男低音的提升更为明显;
  • 优化推理界面布局。

注意日志特别强调:输入输出设备应选择同种类型(例如都选 MME 类型),否则实时变声可能出现设备格式不匹配的问题。仓库 README.md 也披露了实时链路整体延迟目标:已实现端到端约 170ms,若使用 ASIO 输入输出设备可低至约 90ms,但高度依赖声卡驱动支持。若要运行该界面,直接双击仓库根目录的 go-realtime-gui.bat 或运行 gui_v1.py 即可。

工程方法论启示:被否决的路线与后续计划

纵观整份 changelog,最值得借鉴的是它保留了完整的"取舍"过程:crepe、半精度 crepe、多进程 harvest 等 todo 条目最终都被 RMVPE 标记取代;时序检索、PCA 降维、训练期随机增强等实验被明确标记无效并给出原因。这说明 RVC 的架构演进(hubert 特征 + top1 faiss 检索 + VITS 解码 + 多种 f0 前端)是经过大量对比实验筛选出的稳定组合,而非功能堆叠。

日志末尾的"Future Plans"也基本可以在后续版本与仓库中对应到实现:按 epoch 保存小模型(2023-05-14 已实现)、推理时向指定路径额外导出 mp3(导出格式选项在 2023-05-28 落地)、多人训练选项卡(至多 4 人)、收集呼吸 wav 修正呼吸电音问题、以及"以更大歌声训练集扩充底模"等长期规划。

总结:如何把 changelog 变成上手路径

如果你希望通过本仓库亲自复现这套能力,推荐的阅读/使用顺序为:

  1. 先读 README.md 了解环境配置(N 卡、A 卡/I 卡 DML、ROCm、IPEX 对应不同的依赖文件)与预模型清单;
  2. 用官方演示 Notebook(Retrieval_based_Voice_Conversion_WebUI.ipynb 与 v2 版本)走通训练-推理全流程;
  3. 按需查阅 docs/en/faq_en.md、docs/cn/faq.md 及各语言 FAQ 排查典型问题;
  4. 对照本文提到的源码路径深入理解细节:训练配置见 configs/v2/48k.json 等 JSON,f0 前端见 infer/lib/infer_pack/modules/F0Predictor/,索引构建见 tools/infer/train-index-v2.py,实时 GUI 见 gui_v1.py。

本文所依据的原始更新日志位于 docs/en/Changelog_EN.md(中文对照见 docs/cn/Changelog_CN.md),仓库其余语言版本的 Changelog 亦可在 docs/ 下找到。理解版本演进之后,你会发现 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

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 14:13:46

COSCon‘25开源协同论坛:产学研开源转化实战解析

1. 项目概述&#xff1a;COSCon25产研开源协同论坛的核心价值2025年开源社年度峰会&#xff08;COSCon25&#xff09;即将拉开帷幕&#xff0c;其中最受关注的产研开源协同论坛议程近日正式发布。作为连续参与三届开源峰会的技术布道师&#xff0c;我深刻感受到这个论坛正在打破…

作者头像 李华
网站建设 2026/9/10 14:12:06

一键清理自启项,让TVBoxOSC把电视盒子开机提速

一键清理自启项&#xff0c;让TVBoxOSC把电视盒子开机提速 【免费下载链接】TVBoxOSC TVBoxOSC - 一个基于第三方项目的代码库&#xff0c;用于电视盒子的控制和管理。 项目地址: https://gitcode.com/GitHub_Trending/tv/TVBoxOSC 电视盒子刚亮屏&#xff0c;好几个应用…

作者头像 李华
网站建设 2026/9/10 14:08:01

Chrome+Postman接口测试实战指南

1. 为什么选择ChromePostman做接口测试&#xff1f;接口测试作为软件测试中的重要环节&#xff0c;直接关系到系统间的数据交互质量。Chrome浏览器搭配Postman工具的组合&#xff0c;已经成为众多开发者和测试工程师的首选方案。这套组合的优势在于&#xff1a;环境轻量&#x…

作者头像 李华