ONE-SHOT VOICE CONVERSION BY VECTOR QUANTIZATION

本文介绍了一种基于VQ-VC的One-Shot语音转换方法,该方法利用向量量化技术实现说话人信息与文本信息的解耦,仅需重建损失即可有效分离两种信息。实验表明,在不同codebook维度下,VQ+IN的分类精度优于单独使用VQ或IN,且能保持稳定的说话人分类精度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单位:台湾国立大学
会议:2020 icassp

文本的技术路线
【1】Neural Discrete Representation Learning
【2】Generating Diverse High-Fidelity Images with VQ-VAE-2

abstract

vector quantization (VQ) 的方法实现one-shot vc,不需要任何说话人标记。

把文本信息建模成一系列离散的编码,将向量量化前后的区别认为是speaker embedding。仅通过重建损失函数解耦说话人信息和文本信息。

1. introduction

VC可以分成监督学习和无监督学习

监督学习:基于平行数据的,例如GMM-based

无监督学习:基于非平行数据的。有用vector quantization方法提取文本信息,加上speaker id之后送入wavenet,但是仅能合成seen的voice。

之前有工作证明VQ-based auto-encoder提取出来的discrete latent code和音素信息密切相关;说明VQ-based model有能力解耦出说话人信息和文本信息;本文研究one-shot VQ-VC。之前的VQ-VC方法用不同的encoder提取说话人、文本信息,本文仅用一个encoder
将latent representation分离成离散的和连续的信息,然后decoder将这两者相加合成语音。其中,离散的部分表示文本信息,连续的部分表示说话人信息。

2. approach

在这里插入图片描述
训练准则
在这里插入图片描述
其中: L r e c L_{rec} Lrec
在这里插入图片描述
C x + S x C_x+S_x Cx+Sx是相加而不是拼接(参考 S x S_x Sx得到的方式)
在这里插入图片描述
L l a t e n t L_{latent} Llatent

在这里插入图片描述

3. experiment setup

数据集:VCTK corpus
特征:24 KHz, mel spec
vocoder:GL
在这里插入图片描述

4. results
4.1 解耦的能力

训练一个新的说话人分类模型,判断encoder的解耦能力(用VQVC解耦出的文本信息 C x C_x Cx测试,精度越低,说明 C x C_x Cx中包含的说话人信息越少)。
实验对比VQVC不同的codebook维度(32/64/128/256/512)以及有VQ+IN,只有VQ,只有IN,和Auto VC, AutoVC Wide的方法(后两者只有VQ)的分类精度和decoder重建损失。
在这里插入图片描述
结果表明:
(1)VQ+IN比单独的VQ以及单独的IN表现都要好;而且相同codebook维度下,VQ+IN的分类精度是单独VQ的一半,说明不加限制的时候VQ会学到说话人相关的信息;
(2)和VC-IN的方法(台湾)相比,只用IN的解耦能力不够强;
(3)AutoVC有额外的说话人编码模块,因此分类精度比较高;但是VC模型需要调整文本信息拟合的维度;AutoVC Wide的维度过大,同时拟合了说话人和文本信息,因此无法合成语音。相比之下,即使维度为512时,VQVC+IN的方法仍然有26.8%的说话人分类精度,说明本文提出的网络更稳定。

尽管更少的codebook维度代表着更强的解耦能力,但是可能对于完整的表示content information是不够的,综合L1 Loss,分类精度以及合成的语音质量,选择256为codebook的维度。

4.2 Speaker embedding visualization

在这里插入图片描述

分别选择20个seen和unseen的speaker,提取spk_emb(120维),可视化。上图是Q32模型的结果,说话人分类的精度:seen–98.2%, unseen–97%。

4.3 Ablation study on architecture

设计中,将IN放在VQ之前,VQ中的codebook全部量化为1(codebook normalization),为了验证这两者的有效性,codebook size=32,设计实验:
(1)Q中没有normalize,IN在VQ之前;
(2)Q中没有normalize,IN在VQ之后;
(3)Q中有normalize,IN在VQ之前;
(4)Q中没有normalize,IN在VQ之后;
在这里插入图片描述
L1重建Loss如上图所示,表明normalize+IN之前的设置会加快收敛并提升性能。
这样的设置下,离散的编码和连续的部分是有限制的,因而会使得模型的训练更容易。

4.4 Subjective evaluation

4个人对12对转换对进行相似度倾向测试。说明模型有能力完成one-shot的转换。
在这里插入图片描述

### 解决 'Triton 未安装' 错误的方法 当尝试启动 Retrieval-based-Voice-Conversion-WebUI 并遇到 'Triton 未安装' 的错误提示时,这通常意味着 Triton Inference Server 或其 Python 客户端库未能成功加载。为了修复此问题,可以采取以下措施: #### 验证环境配置 确保已正确设置虚拟环境并激活它。如果使用 conda 创建的环境,则应通过命令 `conda activate your_env_name` 来激活相应的环境[^1]。 #### 安装 Triton 推理服务器及其客户端库 可以通过 pip 工具来安装 tritonclient 库,这是与 Triton 进行交互所必需的一个组件。执行如下命令完成安装: ```bash pip install nvidia-triton-inference-server-client ``` 对于某些特定版本的需求或者更详细的安装指南,请访问官方文档获取最新指导。 #### 检查依赖项冲突 有时其他包可能会影响 tritonclient 的正常工作。建议创建一个新的干净环境中仅安装必要的软件包以排除潜在干扰因素的影响。也可以考虑更新现有项目中的所有过期或不兼容的第三方模块到最新的稳定版。 #### 测试连接至 Triton 服务 确认本地机器上已经运行了一个可用状态下的 Triton 实例,并监听默认端口(通常是8001)。可利用简单的 ping 请求验证这一点: ```python from tritonclient.utils import * import tritonclient.http as http_client url = "localhost:8001" model_name = "<your_model>" triton_client = http_client.InferenceServerClient(url=url) if not triton_client.is_server_live(): print("无法连接到 Triton 服务器") else: print(f"Triton 服务器正在运行, 尝试加载模型 {model_name}") ``` 上述代码片段展示了如何建立 HTTP 方式的通信链接以及基本的状态查询功能。 #### 查阅日志文件 查看应用程序的日志记录可以帮助定位具体原因所在。特别是关注那些涉及导入 tritonclient 相关部分的信息,它们往往能提供有价值的线索用于进一步诊断问题根源所在。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值