【AI 孙燕姿】歌声转换技术原理浅析

news2025/1/11 14:59:34

最近打开B站,首页会推荐很多以【AI 孙燕姿】开头的视频,内容是用孙燕姿的音色去唱其他歌手的歌。出于好(ceng)奇(re)心(du),作者去了解下歌声转换(Singing Voice Conversion,SVC)这个任务。不看不知道,一看吓一跳,SVC这个任务居然还有专门的比赛[2],并且已经举办了好几届,但是前面几届赛道都是声音转换(Voice Conversion,VC),今年是第一届歌声转换。SVCC2023的比赛分为两个赛道,分别是域内的歌声转换和跨域的歌声转换,但遗憾的是目前已经结束提交了,将在6月份公布结果,并在7月份提交workshop论文,举办方也在积极推进workshop的举办,计划在8~9月份举行。

当然今天的重点并不是聊这个比赛,我们看下SVC这个任务的技术原理。首先说明本文只是简单的介绍,并不会深入地去解析算法原理,感兴趣的同学可以根据本文的参考文献自行学习。SVC是VC的子任务,因此我们先从VC开始介绍。

📻 VITS

语音转换,也被称为声音转换或语音变换,是一种用于改变人的语音特征的技术,同时保留语言内容和说话者的身份。它涉及修改源说话者的声音特性,使其听起来像目标说话者的声音。语音转换的目标是将源说话者的声音的各个方面进行转换,如基频(音高)、频谱包络(声道特征)和韵律特征(节奏、语调和重音),以使其与目标说话者的特征相匹配。这样,源说话者的声音就能够采用目标说话者的特征,而不改变语言内容。

最开始人们通过信号处理的方式进行语音转换,主要是通过基音和速度对语音信息进行建模,然后通过PSOLA对语音基音或者速度进行修改从而达到变声的效果,详细内容可以参考本公众号的这篇文章。但是这种修改只能简单地调高/调低音调,并不能达到生成指定说话人音色的目的。随着深度学习的兴起,许多人开始尝试使用神经网络强大的特征提取能力对语音信息进行建模。早期的语音转换分为三个部分,分别是语音分析、特征映射和语音重建。随着韩国科学院在ICML 2021发布VITS(VITS: Conditional Variational Autoencoder with Adversarial Learning for End-to-End Text-to-Speech)论文和代码,语音转换进入了端到端的时代。VITS本身是用于语音合成任务,但语音合成和语音转换具有相似的结构,或者可以说语音转换网络是利用了语言信息的语音合成网络。

VITS的主体是一个条件VAE模型,包含了prior encoder,posterior encoder,decoder,discriminator和stochastic duration predictor。其中posterior encoder和discriminator只在训练中使用。VITS采用了和Fastspeech系统相同的transformer作为文本Encoder,与Glow-TTS相同的Flow结构作为VAE的主体以及和HiFiGAN生成器相同的反卷积作为Decoder,此外还采用Glow-TTS相同的单调对齐搜索算法(MAS), 保证生成对齐的稳定性。在推理时,输入的phoneme透过prior encoder得到隐变量z,然后z通过decoder生成原始波形。VITS整体训练和推理流程如下所示:

🎼 Singing Voice Conversion

上面介绍了端到端的语音合成网络VITS,我们接下来看下如何使用VITS进行歌声转换。这里我们以SoVITS[9]为例进行讲解,网上搜了一圈都是介绍如何应用的,原理性的讲解比较少。总的来说,SoVITS在VITS的基础上,将解码器改为NSF-HiFiGAN,输入改为ContentVec,在推理时对ContentVec预测和pitch decoder的输出进行聚类,以减少输入语音泄漏,并在原始网络之前增加了Conv1d。

SoVITS输入改自SoftVC,原始SoftVC论文中的encoder有两种,如下图所示,其中第一种是离散内容编码器,它首先提取特征,然后通过聚类的方法生成一系列离散的语音单元;另一种是软内容编码器,它不使用聚类的方法而是训练一个网络去预测离线语音单元,去除了不必要的说话人信息,因此更适合语音转换这个任务,这也是SoVITS中采用soft content encoder的原因。

此外,由于是歌声转换任务,作者将f0显式的引入到了vits中以便更好的对歌声信息进行建模,这点我们可以从作者代码中获得。最后作者将声码器改为NSF-HiFiGAN以解决声音中断的问题。在推理过程中,只需说话人信息和音频信息,其中音频信息会首先计算f0,然后将说话人信号,音频信号和f0一起送到encoder,随后encoder的输出经过flow和NSF-HiFiGAN生成最终的结果,其完整流程如下所示:


参考文献:

[1]. https://www.zhihu.com/question/599898172/answer/3019724022

[2]. http://www.vc-challenge.org/

[3]. https://zhuanlan.zhihu.com/p/474601997

[4]. https://github.com/jaywalnut310/vits

[5]. https://arxiv.org/pdf/2106.06103.pdf

[6]. https://blog.csdn.net/Terry_ZzZzZz/article/details/120458064

[7]. https://zhuanlan.zhihu.com/p/422463115

[8]. https://arxiv.org/pdf/2008.03648.pdf

[9]. https://github.com/voicepaw/so-vits-svc-fork/tree/main

[10]. https://zhuanlan.zhihu.com/p/628118728

[11]. https://ieeexplore.ieee.org/abstract/document/9746484

[12]. https://blog.csdn.net/zephyr_wang/article/details/127923998

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/561443.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

比亲妈都细,从0-1手把手教你搭建Elasticsearch+kibana+IK分词器

前言: 最近用到了ElasticsearchkibanaIK分词器,但是基本上能搜到的所有教程、视频都用的是老版本的,奈何我又空有一身反骨,我就不爱用老版本的,结果就一个一个的踩坑。 Elasticsearch是我用过的最坑的软件之一了&#…

通过ChatGPT跟MetaHuman对话,Android/iOS兼容

一、申请ChatGPT的API-KEY 1.通过 openAI官网申请API-KEY 2.参考使用腾讯云函数一分钟搭建 OpenAI 免翻墙代理搭建openAI免翻墙代理 3.通过Postman测试一下openAI函数是否可被调用,传入BearerToken和Body参数,ChatGPT即可返回应答数据 二、启用必要的插件 1.启用文字转语…

5.24黄金短线上涨能否继续做空?今日如何布局

近期有哪些消息面影响黄金走势?今日黄金多空该如何研判? ​黄金消息面解析:黄金消息面解析:周二(5月23日),国际金价延续隔夜跌势,因在美联储官员的鹰派言论推动下,美元重启涨势,尽管…

chatgpt赋能Python-python_padding

Python中Padding的介绍 在Python编程中,Padding是一种在字符串或序列前后添加空格或其他占位符来实现对齐的技术。这种技术常用于数据格式化、打印输出、加密等场合,具有很高的实用性。 Python中Padding技术主要由三种函数实现:rjust, ljus…

当系统部署到测试环境,或线上时,该如何查看当前FastJson的版本

当系统部署到测试环境,或线上时,该如何查看当前FastJson的版本 提示:看见网上很多方法,有的不是很实用了,近日自己将fastJson版本升级到了1.2.76;需要在系统中查看版本信息;用到了如下方法&…

Java——《面试题——JVM篇》

前文 java——《面试题——基础篇》CSDN博客 1.知识点汇总 JVM是Java运行基础,面试时一定会遇到JVM的有关问题,内容相对集中,但对只是深度要求较高. 其中内存模型,类加载机制,GC是重点方面.性能调优部分更偏向应用,重点突出实践能力。编译…

网络安全技能差距的高成本

犯罪分子总是利用我们的无能为他们谋取利益。根据(ISC)的一份报告,全球网络安全专业人员短缺近 300 万。导致网络安全专家短缺的原因是多方面的,例如网络安全威胁的复杂性越来越高,技术进步的速度越来越快,…

C++继承技术

方法覆盖 virtual关键字 只有在基类中声明为 virtual 的方法才能被派生类正确覆盖。关键字位于方法声明的开头,如下面的 Base 的修改版本所示: class Base {public:virtual void someMethod() {}protected:int m_protectedInt { 0 };private:int m_pr…

一图看懂 dis 模块:将 python 字节码反汇编为助记符,资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 dis 模块:将 python 字节码反汇编为助记符,资料整理笔记(大全) 🧊摘要🧊模块图🧊类关系图…

chatgpt赋能Python-python_plt_散点图

Python plt散点图:学习数据可视化的有力武器 Python是一种广泛使用的编程语言,广泛应用于数据科学,数据分析,计算机视觉等领域。而在数据可视化方面,Python也提供了很多强大的工具,其中plt散点图是一种非常…

Chatbot UI老外在用的gpt网页版 搭建方法分享!

新建了一个网站 https://ai.weoknow.com/ 每天给大家更新可用的国内可用chatGPT资源 Chatbot UI 高仿ChatGPT官网,中文还支持贼好,界面美观度间距还需要打磨。是老外做的吗? ​ 环境部署 更新环境 apt update -y && apt upg…

09 - 进程长参数编程

---- 整理自狄泰软件唐佐林老师课程 查看所有文章链接:(更新中)Linux系统编程训练营 - 目录 文章目录 1. 短选项扩展编程1.1 再论进程参数(短选项)1.2 进程短选项示例 2. 进程长参数编程2.1 进程长参数示例2.2 进程长参…

MATLAB NAN或INF无效点去除 (14)

MATLAB NAN或INF无效点去除 (14) 一、算法介绍二、算法实现1.代码(含注释说明)2.效果(无效点去除前后点坐标展示)一、算法介绍 仅就一般情况来说,激光点云受到测量影响,可能会产生无效点,即坐标值为NAN或者INF等,这种点会严重干扰一些几何特征,例如法向等的计算,因…

HummerRisk V1.1.0 发布

HummerRisk V1.1.0发布: 重构了新的Dashboard,新增报告中心,增加新的 Linux 主机系统的安全扫描、安全审计功能。增加部分Docker相关的主机检测,镜像仓库新增公有云阿里云、腾讯云类型,新增镜像分组管理等功能&#x…

chatgpt赋能Python-python_os拷贝文件

Python os拷贝文件 – 从简介到实现 Python os库是一个经常使用的工具,它是Python的标准库,提供了与操作系统进行交互的函数和方法。其中,os拷贝文件是其常用的功能之一,可以用来实现文件备份、文件复制等等操作。接下来&#xf…

pthread多线程: 线程泄漏的检测

文章目录 1. 目的2. 什么是线程泄漏3. pthread 线程泄漏例子3.1 代码3.2 编译和运行3.3 简要分析 4. 检测线程泄漏4.1 编译链接时传入参数 -fsanitizethread4.2 确认 TSAN_OPTIONS 环境变量 5. 修复线程泄漏5.1 方法1: 主线程等待子线程5.2 方法2:子线程…

k8s网络如何连接?

在k8s中网络连接可以分为 容器与容器: 所有在pod中的容器表现为在同一个host,他们之间可以通过端口进行连接 pod与pod: 因为每个pod都有一个ip,因此pod可以通过ip进行直接连接 在不同主机上pod究竟是如何连接的呢?毕竟pod ip只是虚拟的&…

Vue+Element-ui实现表格导出和导入

表格导出,填写数据,导入表格 需求:表格导出,填写数据,导入数据表格文件存储在前端表格文件不存储 需求:表格导出,填写数据,导入数据 分析需求: (1&#xff0…

【Leetcode60天带刷】day01——704.二分查找、27.移除元素

题目: 704. 二分查找 Leetcode原题链接:力扣704.二分查找 思考历程与知识点: 考查二分查找能力,注意mid的取值。 注意: 右端点的大小,需要在数组长度上-1。也就是nums.size()-1,因为下标是从…

chatgpt赋能Python-python_numpy_转置

Python Numpy 转置 - 高效处理数据的必备技巧 作为一名专注于Python编程的工程师,你可能已经知道了 Python 编程语言的优雅以及Numpy 库的高效操作。在进行数值计算和数据处理方面,Numpy 库已成为 Python 可以与其他编程语言匹敌的主要原因之一。其中一…