当前位置:首页 > RVC:基于检索的语音克隆AI

RVC:基于检索的语音克隆AI

RVC(基于检索的语音转换)是AI驱动的语音转换器,大约可以学习使用 10 高质量的语音转换实现了分钟的短音频样本。

传统的语音转换器需要两组数据:自己的声音和要转换的目标声音,这就带来了准备个人语音数据集的挑战。RVC 使用一个名字 HuBERT 多功能特征提取模型克服了这个问题,它实现了从任何声音到特定目标声音的转换。

推荐NSDT工具。: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - 在线查看AI模型 - Three.js虚拟轴开发包装 - 3D模型在线减面 - 在线切割STL模型 。

2、RVC模型架构。

RVC 使用两种模型: 。Hubert。 用于特征提取󿀌 。net_g。 用于音频生成。

HuBERT 它是一种多功能特征提取模型。它就像 BERT 音频版,用于自然语言处理。HuBERT 训练后󿀌每帧都可以提取 MFCC(梅尔频率倒谱系数)预测隐蔽后 MFCC。基于该模型的架构 Transformer。

HuBERT。 的输入是 PCM(脉冲编码调制),它输出特征向量。当输入大小为  。(1, 156736)。 的 PCM 时,HuBERT 产生的特征向量为  。(1, 489, 256)。

net_g。 输入是特征向量,它输出 PCM。RVC 中有 4 种 。net_g。 变体,具体取决于版本(1 或 2)用于音高引导 。if_f0。 是否存在(下一节将详细介绍#xff09;。

self.if_f0 = cpt.get("f0", 1)self.version = cpt.get("version", "v1")if self.version == "v1":    if self.if_f0 == 1:        self.net_g = Synthesizertrnms256NSFsidid(            *cpt["config"], is_half=config.is_half        )    else:        self.net_g = Synthesizertrnms256NSFsid_nono(*cpt["config"])elif self.version == "v2":    if self.if_f0 == 1:        self.net_g = SynthesizerTrnMs768NSFsid(            *cpt["config"], is_half=config.is_half        )    else:        self.net_g = Synthesizertrnms768NSFsid_nono(*cpt["config"])。

net_g。net_g。

  •  内部结构由几个组件组成:Embedding。
  • :对 HuBERT 编码中间的特征向量。TextEncoder。
  • :编码音调。PosteriorEncoder。
  • :生成 z,即潜在表示或特征向量,用于捕获输入音频信号的基本特征。ResidualCouplingBlock。
  • :计算 z_p(后验编码向量),该向量反映了产生所需输出语音所需的修改特征,#xff0结合目标语音的各个方面c;同时保留原始输入的语言内容。GeneratorNSF。

:从处理后的数据生成 PCM。

这些组件按顺序工作c;将编码的音频特征转换为 PCM 音频格式󿀌有效改变语音特征,同时保持输入的原始音调和节奏。

2.1 音调引导。RVC 其中一项称为音调引导(pitch guidance)功能,由名为 。if_f0。 内部管理标志。当 。if_f0。 设置为 True 时,在 。net_g。

 在语音合成过程中,将提供额外的语音输入基频 (f0)。

提取输入语音的方法有很多种。 f0,包括 WORLD 声码器和基础 CNN 模型,例如,我们在本文中介绍的 Crepe。f0 提取方法的选择不需要与训练中使用的方法相匹配,推理时可以随意选择。

通过使用 f0,能反映原始语音的语调(例如,音调),适用于需要保持原始旋律或音调模式的唱歌和其他应用。

￰在对话应用中c;为了减少处理负荷󿀌无需使用即可使用 f0 的模型。这种灵活性允许在性能和计算效率之间取得平衡c;这取决于用例的具体要求。

2.2 Faiss。

RVC 利用名为 Faiss 向量搜索库可以提高其与原始语音的紧密匹配能力。该功能通过从训练数据集中选择和选择 Hubert 从最近的特征向量中提取输入语音特征向量。通过输入语音 HuBERT 特征加权平均,该系统可以更接近原始语音的特征。

使用 Faiss 时,启用 Protect 模式将基于基频 (f0) 调整流程。如果 f0 小于 1,认为这个片段是无声的,#xff0c;而原始语音特征的反映程度也会增加。这种方法更容易反映合成语音中呼吸声的细微差异c;从而增强语音转换的自然性和表现力。

3、使用RVC的方法。

官方 RVC 可以作为 Web UI 启动。

首先,克隆存储和安装依赖库。写这篇文章,依赖库与 Python 3.11 不兼容,因此使用 Python 3.10。

这里描述了完整的设置过程,适用于 Windows 和 Mac,以及 NVidia / AMD / Intel 硬件。您还可以直接下载完整的zip包 文件。

对于 macOS,由于与某些层的兼容性问题,必须在 CPU 上运行。通过使用以下命令,可以实现:

export PYTORCH_ENABLE_MPS_FALLBACK=1。

3.1 推理。启动 Web UI 后,输入指定模型的音频文件,然后按转换按钮。假如您使用的模型包含模型 F0 希望从男声转变为女声,请在 UI 中名为 。Transpose。

 在音调变化设置中指定指定音调变化 +12。

界面版本更新为 1006v2。

3.2 训练。训练,请使用 。Train。

 选项卡。从hugingface下载初始权重文件 。f0G40k.pth。,并将其放在 。pretrained_v2。

 目录中。

将要训练的音频文件存储在文件夹中,并在 UI 本文件夹路径设置在中间。然后单击“处理数据”、“特征提取”,最后单击“训练模型”:

界面版本更新为 1006v2。

必要时,要获取 Faiss 特点,单击“训练特征索引”。训练结果将存储在“权重”文件夹中。大约需要训练 5 分钟,音频长度为 7 分钟。

3.3 RVC v1 和 v2。

训练 RVC 时,你可以在版本中 v1 和 v2 两者之间的选择。在 v1 中,HuBERT 的输出和 net_g 的输入为 256 维。在 v2 中,这些变为 756 维。这种维度差异会影响语音转换的细节和质量,由于 v2 具有更高维度的特征空间,因此,可以提供更详细的语音转换。

3.4 转换为 ONNX。RVC 正式支持将 。net_g。 模型转换为 ONNX 格式。转换󿼌请选择导出 ONNX 选项卡,指定 。.pth。 文件作为 RVC 模型路径󿀌指定 。.onnx。

 文件作为 ONNX 输出路径,然后按下导出按钮。这个功能在支持上很方便 ONNX 在各种环境和平台上使用 RVC 模型,提高语音转换模型的通用性。

关于HUBERT,torch可以使用 Nightly版本通过修改RVC的源代码将其转换为ONNX。由于Hubert与音频源无关,常用,因此,您可以直接使用我们已经转换的ONNX文件。hubert_base。 模型尺寸为 293.5MB, 。net_g。


 模型尺寸为 110.2MB。

原文链接:RVC语音转换AI模型模型 - BimAnt。

分享到: