当前位置: 首页 > news >正文

歌声转换SVC主流方法原理剖析4 — ReFlow-VAE-SVC

pre

本文SVC指的是歌声转换(Singing Voice Conversion (SVC)),例如常见且开源的 So-VITS-SVC, RVC, DDSP-SVC
关键词:歌声转换、声音克隆、AI翻唱

本来是不打算写ReFlow-VAE-SVC的,不过实在是对名字里面那个VAE很在意,而且由于与DDSP-SVC同作者,看起来也快,于是还是简单地写了下。

系列解析:

  • 歌声转换SVC主流方法原理剖析1 — DDSP-SVC
  • 歌声转换SVC主流方法原理剖析2 — RIFT-SVC
  • 歌声转换SVC主流方法原理剖析3 — So-VITS-SVC
  • 歌声转换SVC主流方法原理剖析4 — ReFlow-VAE-SVC

code

https://github.com/yxlllc/ReFlow-VAE-SVC/tree/main
latest commit: 0550d0efd84027e4547f698b49c58f19c52ab984

本来是打算单独写一篇,不过ReFlow-VAE-SVC是同作者的另一个仓库,大差不差【而且也写累了...】。主要想看看这个VAE是怎么用上的。

数据

预处理抽取特征:

  • f0 基频
  • mel 梅尔频谱
  • rms 均方根能量【虽然代码中变量名是volume,但实际算出来的是rms】
  • units 内容特征

模型架构

主模型 Unit2Wav_VAE ,应该是在Diffusion-SVC的 Unit2Mel 基础上进行改进,这套模式也影响了的So-VITS-SVC、DDSP-SVC。Unit2Wav_VAE里面持有一个reflow模型Bi_RectifiedFlow,速度预测模型可选NaiveV2Diff / WaveNet

训练

模型输入构成类似VAE,这或许也是名称中vae的由来:

# vae mean
x = self.unit_embed(units) + self.volume_embed(volume)
if self.use_attention:x = self.attention(x)
# vae noise
x += torch.randn_like(x)
x = self.reflow_model(x_start=x, x_end=gt_spec, cond=cond, ...)

其中这个潜变量x是VAE结构的:unitsrms嵌入后相加作为均值,加上一个随机噪声【标准差?】
f0和说话人idspk嵌入作为条件,一起作为输入【这样看挺像CVAE?】

但并未使用传统的VAE解码器,而是采用reflow,学习如何从潜变量x去预测梅尔频谱。注意这个x在训练时充当x0但它明显不是一个纯噪声,而x1是真值梅尔频谱,模型预测速度场,采用l2_lognorm形式的v-loss:

loss = weights * F.mse_loss(x_1 - x_0, v_pred)

推理

推理时分两种情况:普通模式、VAE模式,前者需要 contentvec 之类的语义编码器,而后者不需要,但只能处理指定两个说话人id之间的变换【似乎都是必须见过的】

普通模式

--source_spk_id为空时启用,此时需要计算输入音频的内容特征units,直接调用Unit2Wav_VAE.forward。与训练时一致,构造潜变量x充当reflow输入然后直接预测梅尔频谱,靠声码器解码为音频波形

VAE模式

需要同时指定 --source_spk_id(spk-s)--target_spk_id(spk-t),将说话人source_spk_id的音频转换为说话人target_spk_id的,调用Unit2Wav_VAE.vae_infer实现

里面需要进行两次reflow采样:

latent = self.reflow_model(infer=True, x_end=input_mel, cond=source_cond, infer_step=infer_step, method='euler', use_tqdm=True)
output_mel = self.reflow_model(infer=True, x_start=latent, cond=target_cond, infer_step=infer_step, method='euler', use_tqdm=True)

其中input_mel为输入的参考音频(spk-s)的梅尔频谱,作为去噪起点替代了之前潜变量x的位置,source_condf0spk-s组成。与普通模式很像?但现在是反向去噪!

dt = -(t_end - t_start) / infer_step

由于dt为负,此时就变成从spk-s的梅尔频谱推出对应的说话人无关的潜变量x(latent)!后面target_cond就是正常的f0+spk-t的组合,然后以latent作为起点进行推理,期望得到目标说话人的音频。

碎碎念

时间原因本项目并没有实际去尝试过,实际效果并不清楚,这里仅做理论分析

“普通推理模式”下若去除VAE的部分,简直就是一个RIFT-SVC。
VAE模式借助VAE进行梅尔频谱反推潜变量以去除说话人特征属实是很巧妙,不过限制也比较大,spk-s必须是训练中见过的

有个bug: Unit2Wav_VAE.vae_infer 中明明不使用语义编码器,却有一句代码用到了不存在的units变量:

spk_id_torch = torch.LongTensor(np.array([[k]])).to(units.device)

可见作者直接从 Unit2Wav_VAE.forward 复制过来,似乎并没有完整进行过测试。

http://www.gsyq.cn/news/70487.html

相关文章:

  • 敏捷冲刺日志 - Day 5
  • 深入解析:Spring Kafka消费者被踢出组?CommitFailedException异常全面解析与解决方案
  • 计算机视觉黄金时代的回顾与展望
  • homebrew运行机制
  • 解码构造与析构
  • 朝花夕拾OI回忆录
  • 细胞因子:细胞信使的分子世界与功能解析
  • 87键键盘的数字键对应快捷键含义
  • 深入解析:神经流形:大脑功能几何基础的革命性视角
  • 2025最新成都房屋装修公司推荐!成都家装市场权威榜单发布,品质服务双优助力打造理想家居
  • 2025.12.3
  • 2025最新成都精装房装修公司推荐!家装实力品牌榜单发布,品质服务双优打造理想家居
  • scheme中的辛普森积分
  • sql文件无法设置打开方式为ssms19,重新安装也不行
  • 2025年下半年套管工厂综合推荐榜单:行业专家权威评测
  • 蓝桥杯Python-语法基础-1
  • 图书馆管理系统项目冲刺博客 Day2
  • 2025住人集装箱房生产品牌排名如何?谁在颠覆未来居住?
  • 完整教程:【高阶数据结构】AVL树
  • 了解NFSv4中的nfsidmap
  • 你的学习思路有实践导向的优势,但需调整顺序和手段才能更高效成体系!核心结论:先搭建,边做边补原理,再集中突破面试考点,比 “先堆方案再回头学” 更高效。
  • 2025年11月聚乙烯瓶厂家综合评估与选购指南:十大知名供应商深度解析
  • 2025年11月农药瓶供应商排行榜:安徽金汇龙包装位居榜首
  • (论文阅读)An Image is Worth 32 Tokens for Reconstruction and Generation
  • 酷我音乐APP(手机音乐播放器) v12.0.0.2 去广告破解版
  • AI元人文:没有AI辅助,价值维度谱何以可能?
  • 2025年12月美国移民,马耳他移民,香港移民机构推荐榜,彰显合规服务与全球资源实力
  • 2025年12月澳洲移民,美国移民,新加坡移民机构推荐:聚焦资质案例与成功率深度解析
  • 颜色空间,线性和伽马颜色空间
  • 2025年12月葡萄牙移民,新加坡移民,香港移民机构推荐榜:甄选合规中介实测解析