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

【GPT-SOVITS-05】SOVITS 模块-残差量化解析

说明:该系列文章从本人知乎账号迁入,主要原因是知乎图片附件过于模糊。

知乎专栏地址:
语音生成专栏

系列文章地址:
【GPT-SOVITS-01】源码梳理
【GPT-SOVITS-02】GPT模块解析
【GPT-SOVITS-03】SOVITS 模块-生成模型解析
【GPT-SOVITS-04】SOVITS 模块-鉴别模型解析
【GPT-SOVITS-05】SOVITS 模块-残差量化解析
【GPT-SOVITS-06】特征工程-HuBert原理

1.概述

在 GPT-SOVITS 实现中,残差量化层是一个相对核心的改动。如前文所述,在 AR模块训练时,其semantic特征是基于预训练生成模型中残差量化层的输出。残差量化层的核心代码如下:

在这里插入图片描述

  • ResidualVectorQuantizer 是残差量化编码器的封装,在生成模型中构建
  • ResidualVectorQuantization 是残差量化编码器的具体实现,其默认包含8个量化编码器
  • VectorQuantization。层与层之间用的是输入值和量化值的残差。
  • VectorQuantization 是具体某一层的量化编码,将输入数据进行量化编码
  • VectorQuantization 在进行量化编码时,其编码字典的实现为
    Euclideanbook。其将输入数据做k均值聚类实现一个编码器,将k均值的中心点,作为量化字典。

2、EuclideanCodebook 实现

2.1、原理

在这里插入图片描述

  • 输入数据大小为【num_sample,dim】,前者为输入数据数量,后者为每个数据的向量维度 基于k均值聚类,codebook_size
  • 参数为聚类K的中心点数量,即字典大小,kmeans_iters为迭代次数
  • 完成k均值聚类后,原始数据各值与中心点计算欧式距离,以就近原则选择中心点作为量化的替代值

2.2、调试代码参考

book = EuclideanCodebook(dim=30,codebook_size=1024,kmeans_init=True,kmeans_iters=50,decay=0.99,epsilon=1e-5,threshold_ema_dead_code=2)quantize, embed_ind = book.forward(sample_data)

3、ResidualVectorQuantizer 实现

3.1、原理

在这里插入图片描述

  • 残差量化编码器有默认8个独立的量化器构成
  • 在每一层的输出时输出三个值
        all_losses    = []all_indices   = []out_quantized = []n_q = n_q or len(self.layers)for i, layer in enumerate(self.layers[:n_q]):# quantized: 量化后的特征向量# indices:  量化后的特征向量所对应的索引# loss   :  量化后的特征向量和原始特征的损失quantized, indices, loss = layer(residual)   # 进入下一层的输入是残差residual = residual - quantized              # 残差quantized_out = quantized_out + quantized    # 基于量化输出的总体累加输出all_indices.append(indices)all_losses.append(loss)if layers and i in layers:out_quantized.append(quantized)out_losses, out_indices = map(torch.stack, (all_losses, all_indices))return quantized_out, out_indices, out_losses, out_quantized

3.2、调试代码参考

rvq = ResidualVectorQuantization(dim=30,codebook_size=1024,num_quantizers=8,decay=0.99,kmeans_init=True,kmeans_iters=50,threshold_ema_dead_code=2)sample_data_1 = torch.rand(1,30, 1000)rvq.forward(sample_data_1, layers=[0])codes   = rvq.forward(sample_data_1)indices = rvq.encode(sample_data_1)print(rvq.decode(indices))
http://www.lryc.cn/news/320002.html

相关文章:

  • Flutter第四弹:Flutter图形渲染性能
  • [氮化镓]GaN中质子反冲离子的LET和射程特性
  • 【项目】C++ 基于多设计模式下的同步异步日志系统
  • 安卓国产百度网盘与国外云盘软件onedrive对比
  • 健身·健康行业Web3新尝试:MATCHI
  • VB.NET高级面试题:什么是 VB.NET?与 Visual Basic 6.0 相比有哪些主要区别?
  • 30.HarmonyOS App(JAVA)鸿蒙系统app多线程任务分发器
  • 伺服电机编码器的分辨率指得是什么?
  • WPF中使用LiveCharts绘制散点图
  • Android Studio实现内容丰富的安卓博客发布平台
  • 【GPT-SOVITS-01】源码梳理
  • 数据结构大合集02——线性表的相关函数运算算法
  • threejs案例,与静态三角形网格的基本碰撞, 鼠标环顾四周并投球游戏
  • 将FastSAM中的TextPrompt迁移到MobileSAM中
  • KY191 矩阵幂(用Java实现)
  • 基于Python的股票市场分析:趋势预测与策略制定
  • 【C++】了解一下编码
  • 生成式人工智能在金融领域:FinGPT、BloombergGPT及其未来
  • webpack5零基础入门-10babel的使用
  • SAR ADC教程系列5——FFT频谱泄露以及相干采样
  • 算法D48 | 动态规划10 | 121. 买卖股票的最佳时机 122.买卖股票的最佳时机II
  • Windows10安装RubyRails步骤
  • Sqlserver 模糊查询中文及在mybatis xml【非中文不匹配查询】N@P2问题
  • 旧华硕电脑开机非常慢 电脑开机黑屏很久才显示品牌logo导致整体开机速度非常的慢怎么办
  • 【go语言开发】性能分析工具pprof使用
  • ARM_基础之RAS
  • VScode(1)之内网离线安装开发环境(VirtualBox+ubuntu+VScode)
  • Python爬虫与数据可视化源码免费领取
  • Android Studio 打包 Maker MV apk 详细步骤
  • react中hooks使用限制