- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
原文:FREEVC: TOWARDS HIGH-QUALITY TEXT-FREE ONE-SHOT VOICE CONVERSION 。
原文地址:https://ieeexplore.ieee.org/abstract/document/10095191 。
。
个人总结:
1.提出mel谱缩放增强方法.
2.基于VITS框架进行改进,BUT在对照实验中缺没有对比VITS 。
3.引入WavLM模型提高VC模型对说话人内容和说话人信息的解耦能力 。
。
翻译:
摘要: 语音转换(VC)可以通过首先提取源内容信息和目标说话者信息,然后利用这些信息重构波形来实现。然而,当前的方法通常要么提取带有泄露说话者信息的不完整内容信息,要么需要大量的注释数据进行训练。此外,转换模型与声码器之间的不匹配可能会降低重构波形的质量。在本文中,我们采用了VITS的端到端框架来实现高质量的波形重构,并提出了在无需文本注释的情况下提取干净内容信息的策略。 我们通过对WavLM特征施加信息瓶颈来解耦内容信息,并提出了基于频谱重缩放的数据增强方法来提高提取内容信息的纯度 。实验结果表明,所提出的方法优于使用注释数据训练的最新VC模型,并具有更强的鲁棒性.
索引词— 语音转换、自监督学习、信息瓶颈、数据增强 。
。
引言 。
语音转换(Voice Conversion,VC)是一种技术,可以将源说话者的声音转换为目标风格,比如说话者身份[1]、韵律[2]和情感[3],同时保持语言内容不变。在本文中,我们专注于单次设置下的说话者身份转换,即仅给定目标说话者的一段话作为参考.
典型的单次语音转换方法是从源语音和目标语音中分别解耦内容信息和说话者信息,然后使用它们来重构转换后的语音[4]。因此,转换后语音的质量依赖于(1)VC模型的解耦能力,以及(2)VC模型的重构能力.
根据语音转换(VC)系统如何解耦内容信息,我们可以将当前的VC方法分为基于文本的VC和无文本的VC。一种流行的基于文本的VC方法是使用自动语音识别(ASR)模型提取音素后验图(PPG)作为内容表示[5][6]。有些研究人员还利用文本到语音(TTS)模型中的共享语言知识来解耦内容信息[7][8]。 然而,这些方法需要大量的注释数据来训练ASR或TTS模型。数据注释是昂贵的,而且注释的准确性和细粒度,例如音素级别和字素级别,会影响模型的性能。 为了避免基于文本方法的问题,人们开始研究无文本方法,即在没有文本注释的情况下学习提取内容信息。典型的无文本方法包括信息瓶颈[4]、向量量化[9]、实例归一化[10]等。然而,它们的性能通常落后于基于文本的方法[11]。这是因为它们提取的内容信息更容易泄露源说话者的信息.
许多VC系统采用两阶段的重构流程[6][4]。在第一阶段,转换模型将源声学特征转换为目标说话者的声音,而在第二阶段,声码器将转换后的特征转换为波形。这两个模型通常是分别训练的。然而,转换模型预测的声学特征与声码器在训练过程中使用的真实语音特征分布不同。这种特征不匹配问题,在TTS中也存在,可能会降低重构波形的质量[12]。VITS是一个一阶段模型,可以同时进行TTS和VC。通过通过条件变分自编码器(CVAE)的潜在变量将两个阶段的模型连接起来,减少了特征不匹配问题。通过采用对抗训练,进一步提高了重构波形的质量。 然而,VITS是一个基于文本的模型,并且仅限于多对多的VC,即源说话者和目标说话者都是已知的说话者.
图1:FreeVC的训练和推理过程。其中,y表示源波形,y0表示增强后的波形,yˆ表示转换后的波形,xmel表示梅尔频谱图,xlin表示线性谱图,xssl表示SSL特征,g表示说话者嵌入.
。
在本文中,我们提出了一个名为FreeVC的无文本单次语音转换系统。该系统采用了VITS的框架,以其出色的重构能力为基础,但是在不需要文本注释的情况下学习解耦内容信息。近期,语音自监督学习(Speech Self-Supervised Learning,SSL)在语音识别[14]、说话者验证[15]和语音转换[16]等下游任务中取得了成功,证明了SSL特征相比传统声学特征(如梅尔频谱图)的潜在优势。我们使用WavLM[17]从波形中提取SSL特征, 并引入一个信息瓶颈提取器来从SSL特征中提取内容信息 。 我们还提出了基于频谱重缩放(SR)的数据增强方法 , 该方法扭曲说话者信息而不改变内容信息 ,以增强模型的解耦能力。为了实现单次语音转换,我们使用说话者编码器来提取说话者信息。我们的代码和演示页面是公开可用的.
方法 。
如图1所示,FreeVC的主干结构来自于VITS,它是一个使用GAN训练增强的条件变分自编码器(CVAE)。与VITS不同,FreeVC的先验编码器采用原始波形作为输入,而不是文本注释,并且具有不同的结构。说话者嵌入是由说话者编码器提取的,用于进行单次语音转换。此外,FreeVC采用不同的训练策略和推理过程。接下来,我们将在以下小节中详细介绍细节.
2.1. 模型架构 。
FreeVC包含先验编码器、后验编码器、解码器、判别器和说话者编码器,其中后验编码器、解码器和判别器的架构遵循VITS。我们将重点描述先验编码器和说话者编码器.
2.1.1. 先验编码器 。
先验编码器包含一个WavLM模型、一个信息瓶颈提取器和一个正则化流(normalizing flow)。 WavLM模型和信息瓶颈提取器负责提取内容信息,并将其建模为分布N(z0; µθ, σθ^2)。WavLM模型以原始波形作为输入,并生成包含内容信息和说话者信息的1024维SSL特征xssl。为了去除xssl中包含的不必要的说话者信息,将1024维xssl输入到信息瓶颈提取器,并转换为d维表示,其中d远小于1024。这种巨大的维度差会施加信息瓶颈,强制使得结果低维表示丢弃与内容无关的信息,例如噪声或说话者信息。接下来,将d维隐藏表示投影到2d维隐藏表示,然后将其分为d维µθ和d维σθ。正则化流在条件说话者嵌入g的情况下被采用,以提高先验分布的复杂性。 遵循VITS的做法,它由多个仿射耦合层[18]组成,并被设计为体积保持,其雅可比行列式|det ∂z0/∂z|为1.
2.1.2. 说话者编码器 。
我们使用两种类型的说话者编码器:预训练的说话者编码器和非预训练的说话者编码器。预训练的说话者编码器是在大量说话者数据集上训练的说话者验证模型。它在VC中被广泛使用,并被认为优于非预训练的说话者编码器。我们采用了[6]中使用的预训练说话者编码器。非预训练的说话者编码器是与模型的其余部分一起从头开始进行联合训练。我们使用一个简单的基于LSTM的架构,并相信如果提取的内容表示足够干净,说话者编码器将学习对缺失的说话者信息进行建模.
2.2. 训练策略 。
2.2.1. 基于频谱重缩放的数据增强 。
一个过于窄的信息瓶颈将会丢失一些内容信息,而一个过于宽的信息瓶颈则会包含一些说话者信息[4]。我们不打算精细调整信息瓶颈的大小,而是采用基于频谱重缩放的数据增强来帮助模型学习提取干净的内容信息,通过扭曲源波形中的说话者信息。与使用各种信号处理技术来破坏说话者信息的工作[19][20]不同,我们的方法更容易实现,并且不需要复杂的信号处理知识.
我们提出的基于频谱重缩放的数据增强包括三个步骤:(1) 从波形y获取梅尔频谱图xmel;(2) 对xmel进行垂直频谱重缩放操作,得到修改后的梅尔频谱图x0mel;(3) 使用神经声码器从x0mel中重构波形y0。垂直频谱重缩放操作如图2所示。梅尔频谱图可以看作是一个具有水平时间轴和垂直频率频带轴的图像。垂直频谱重缩放操作首先使用双线性插值将梅尔频谱图在垂直方向上按一定比例r进行调整,然后将调整后的梅尔频谱图填充或剪切为原始形状。如果比例r小于1,我们在上方用最高频率频带值和高斯噪声填充压缩的梅尔频谱图,从而产生音调较低且共振峰距较近的语音;反之,如果比例r大于1,我们剪切拉伸的梅尔频谱图的顶部多余频率频带,从而产生音调较高且共振峰距较远的语音。通过使用增强的语音进行训练,模型将更好地学习提取在每个比例r下共享的不变内容信息。除了垂直频谱重缩放外,我们还可以使用水平频谱重缩放来产生时间尺度修改的波形.
2.2.2. 训练损失 。
训练损失分为CVAE相关的损失和GAN相关的损失。CVAE相关的损失包括重构损失Lrec,即目标梅尔频谱图与预测梅尔频谱图之间的L1距离,以及KL损失Lkl,即先验分布pθ(z|c)和后验分布qφ(z|xlin)之间的KL散度,其中:
在这里,条件c是包含在波形y/y’中的内容信息。通过最小化Lkl,可以减少特征不匹配问题。GAN相关的损失包括鉴别器D和生成器G的对抗损失Ladv(D)和Ladv(G),以及生成器G的特征匹配损失Lfm(G)。最后,FreeVC的训练损失可以表示为:
2.3. 推理过程 。
与VITS不同,VITS在语音转换推理过程中通过后验编码器和先验编码器中的正则化流提取内容信息,而FreeVC在推理过程中通过先验编码器中的WavLM和信息瓶颈提取器提取内容信息,与训练过程中一样。这样,提取的内容表示不会受到源说话者嵌入质量的影响.
。
实验 。
3.1. 实验设置 。
我们在VCTK [23]和LibriTTS [24]数据集上进行实验。只有VCTK数据集用于训练。对于VCTK数据集,我们使用了107位说话者的数据,其中314个句子(每位说话者2个句子)随机选取作为验证集,10700个句子(每位说话者10个句子)用于测试,其余用于训练。对于LibriTTS数据集,我们使用了test-clean子集进行测试。所有音频样本均降采样至16 kHz。使用短时傅里叶变换计算线性谱图和80频带梅尔谱图。FFT大小、窗口大小和帧移大小分别设置为1280、1280和320。我们将信息瓶颈提取器的维度d设置为192。对于基于频谱重缩放的数据增强,调整比例r的范围从0.85到1.15。我们使用HiFi-GAN v1声码器[25]将修改后的梅尔频谱图转换为波形。我们的模型在一块NVIDIA 3090 GPU上进行训练,训练步数达到900k。批量大小设置为64,最大段长度为128帧.
我们选择了三个基线模型与所提出的方法进行比较:(1) VQMIVC [26],一个使用非预训练的说话者编码器的无文本模型;(2) BNE-PPG-VC [6],一个使用预训练的说话者编码器的基于文本的模型;(3) YourTTS [27],一个扩展VITS到单次设置的基于文本模型,引入了预训练的说话者编码器。我们测试了三个版本的所提出的方法:(1) FreeVC-s,使用非预训练的说话者编码器的所提出的模型;(2) FreeVC,使用预训练的说话者编码器的所提出的模型;(3) FreeVC (w/o SR),使用预训练的说话者编码器的所提出的模型,但没有进行基于频谱重缩放的数据增强.
3.2. 评估指标 。
我们进行了主观和客观的评估。 对于主观评估,我们邀请了15名参与者对语音的自然度和说话者相似度进行评估,评估采用5级均值意见分数(MOS)和相似度均值意见分数(SMOS)。我们随机选择了6位已知说话者(3男性,3女性)来自VCTK,6位未知说话者(3男性,3女性)来自LibriTTS,并分别在已知-已知、未知-已知和未知-未知场景中进行评估。 对于客观评估,我们使用了三个指标:词错误率(WER)、字符错误率(CER)和F0-PCC。源语音和转换后语音之间的词错误率和字符错误率是通过一个自动语音识别(ASR)模型得到的。F0-PCC是源语音和转换后语音之间F0的皮尔逊相关系数[28]。我们随机选择了400个句子(200个来自VCTK,200个来自LibriTTS)作为源语音,并选择了12个说话者(6个已知说话者,6个未知说话者)作为目标说话者.
表1:在已知-已知、未知-已知和未知-未知场景下,以5级MOS和SMOS为评估指标的主观评估结果,带有95%置信区间。为了对比,我们还报告了源语音的评分.
3.3. 结果与分析 。
3.3.1. 语音自然度和说话者相似度 。
表1中的MOS和SMOS结果表明,所提出的模型在所有场景下的语音自然度和说话者相似度方面均优于所有基线模型。此外,我们观察到所有基线模型在源语音质量较低的情况下,例如录制质量低或发音不清楚时,都会出现质量降低的问题,而我们提出的模型几乎不受影响,这表明了所提出的内容提取方法的稳健性.
在所提出的方法的三个版本中,FreeVC (w/o SR) 的语音自然度和说话者相似度低于 FreeVC。这表明,在没有基于频谱重缩放的数据增强的情况下训练的模型泄漏了一些源说话者信息,导致难以重构令人满意的波形。FreeVC-s的表现与FreeVC相似,表明预训练的说话者编码器并不是我们方法性能的主要因素,一个简单的非预训练说话者编码器能够与预训练的说话者编码器相匹配的性能。FreeVC在未知-未知场景中表现优于FreeVC-s,这表明在大量说话者数据上预训练的说话者编码器可以提高对未知目标的性能.
表2:客观评估结果。对于WER和CER,数值越小越好。F0-PCC的范围在-1到1之间,数值越高越好.
。
3.3.2. 语音智能和F0变化一致性 。
从表2中可以看出,我们提出的模型的WER和CER都比所有基线模型(甚至是基于文本的模型)都要低。这表明所提出的方法能够很好地保留源语音的语言内容。F0-PCC的结果显示,我们提出的方法与源语音具有更高的F0变化一致性,这表明所提出的方法能够有效地保持源语音的语调。此外,我们观察到使用基于频谱重缩放的数据增强进行训练略微提高了语音智能和F0变化一致性.
结论 。
本文提出了FreeVC,一个无文本的单次语音转换系统。我们采用VITS的框架进行高质量的波形重建。内容信息是从WavLM特征的瓶颈中提取的。我们还提出了基于频谱重缩放的数据增强方法来改善模型的解缠能力。实验结果证明了所提出方法的优越性。未来,我们将研究说话者自适应方法,以提高对未知目标说话者的相似性,尤其是在数据较少的情况下.
最后此篇关于论文翻译:FREEVC:朝着高质量、无文本、单次转换声音的目标迈进的文章就讲到这里了,如果你想了解更多关于论文翻译:FREEVC:朝着高质量、无文本、单次转换声音的目标迈进的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
是否可以在无需用户点击或鼠标悬停的情况下播放声音文件? 我有一个记分牌,我想在球队得分时播放声音文件。任何指示将不胜感激。我基本上完成了记分牌,但没有声音。 谢谢。 最佳答案 https://gith
我正在创建一个音频应用程序,其中有两个名为 录制音频 浏览音频 当用户单击第一个按钮时,他可以录制音频。这已经实现。 当用户单击第二个按钮时,他可以浏览以查找iPhone库中已经存在的音频/声音。我对
香港专业教育学院一直在使用SoX来将文件修剪为恰好2秒长,但是我注意到音频文件最后总是额外多了32毫秒左右,显然它的额外数据是要告知其他解码器其信息,但是否必须添加放在文件的长度上? 我创建了一个程序
我将使用代码来获取设备的默认音量/声音,该默认音量/声音是使用设备上的音量调高或调低按钮设置的,下面是我要访问声音的代码, 为了解决此错误,我已经进行了研究,发现要访问此代码,我们需要使用CoreAu
我有解码 MP3 并用所有“值”填充数组的代码。 我的问题是:这些值(value)观是什么?它们是频率吗?它们是振幅吗? 这是代码: File file = new File(song.getFile
哈乌乌,我正在尝试实现 Pong。 现在我想播放声音,但它抛出异常(UnsupportedAudioFileException)。我做错了什么? AudioInputStream ainBalk;
我在大学的一个兄弟会中,在这个兄弟会中我们有楼梯。时不时有人从那些楼梯上掉下来。我们通常从吧台后面的电脑播放音乐(通常来自互联网或 iTunes)。我有一个 usb 按钮,想编写一个程序,当有人从楼梯
我想检测来自用户语音的声音/噪音,如果语音输入为空,它会自动停止。 为应用程序点赞 talking tom cat当有声音/语音输入时它会自动开始收听,当没有声音/语音输入时会自动停止。 任何帮助都将
我正在使用 jQuery Sound Plugin在我的网站上创建一些声音效果,但我无法播放。我收到此消息: settings.events.error(null, {msg: "You have n
我有一段代码可以在我点击一个按钮后播放声音。当我第二次单击此按钮时,首先会出现重置之类的东西。 我想要的是:每次单击按钮时我都想立即播放声音而无需重置按钮。 我的代码: -(IBAction)play
我在android studio中制作了一个闹钟。我可以运行该应用程序,除了播放闹钟铃声外,其他一切正常。实际上,当闹钟时间到来时,没有声音播放。我不知道我的代码有什么问题。请帮我找出错误。 主要 A
有什么方法可以在关闭声音的情况下播放 UILocalNotification 声音。实际上,我正在尝试创建一个闹钟,即使用户关闭了声音也能正常工作。或实现此目的的任何替代方法。 最佳答案 如果用户关闭
我试图从字符串创建音频,我试图举一个例子,用户输入他们的名字,然后将其转换为声音/音频 - 声音/音频会根据输入的字符串而有所不同。 (我不想在字符串上执行“文本到语音”,只是创建由字符串生成的声音,
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
对大量二进制文件(例如音频和视频文件)进行版本控制的最佳方法是什么? Git 似乎并不是真正为处理大量二进制文件而设计的。 另一个问题是内容制作者不一定想学习如何使用像 Git 这样的开发人员工具。
我想让一个 python 程序在它完成任务时发出哔声来提醒我。目前,我使用 import os 然后使用命令行语音程序说“处理完成”。我宁愿它是一个简单的“铃铛”。 我知道 Cocoa 应用程序中可以
请原谅这个愚蠢的新手问题,但是:当我(不小心)在命令行窗口中按退格键时,如何关闭 MATLAB 发出的极其烦人的“哔”声? 最佳答案 只是beep off在最新版本中。 https://www.mat
如何找出用户在控制面板中配置了哪些声音文件? 示例:我想播放“设备已连接”的声音。 哪个API可用于查询控制面板声音设置? 我看到控制面板对话框中有一些由第三方程序创建的自定义条目,因此必须有一种方法
我对实现与此人 link 类似的处理方式感兴趣。 据我了解,她将一段视频切成 tiff 格式,然后使用 RiTa 库进行合成 有谁知道如何实现这样的事情,只是改变我正在使用其他扩展名或文件格式的事实。
使用 C#,我试图捕获 PC 正在播放的音频,而不使用 WASAPI 和环回,因为我的声卡似乎不支持它。 TeamViewer 之类的程序是如何做到的?当我使用它时,人们可以从我的 PC 听到音频。
我是一名优秀的程序员,十分优秀!