当前位置: 首页 > 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))

相关文章:

  • 电影aac是什么意思?如何播放、转换、编辑aac?
  • 广州高新技术企业认定申报条件、申报材料的具体指南!
  • webGIS开发第六章
  • Python二级备考(1)考纲+基础操作
  • 力扣爆刷第102天之hot100五连刷96-100
  • 【leetcode】67.二进制求和
  • 2733: 【搜索】【广度优先】 马遍历棋盘
  • 一分钟了解JAVA语言
  • RuoYi-Vue开源项目2-前端登录验证码生成过程分析
  • C++提高笔记(五)---STL容器(set/multiset、map/multimap)
  • flutter 局部view更新,dialog更新进度,dialog更新
  • 【热门话题】深入浅出:npm常用命令详解与实践
  • Redis监控工具
  • mac安装rust开发环境,使用brew安装和全局配置
  • 【GPT-SOVITS-03】SOVITS 模块-生成模型解析
  • [译]如何构建服务器端web组件,为何要构建?
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 4个实用的微服务测试策略
  • Angularjs之国际化
  • HTTP中GET与POST的区别 99%的错误认识
  • java2019面试题北京
  • JavaScript DOM 10 - 滚动
  • JavaScript创建对象的四种方式
  • JSONP原理
  • MySQL几个简单SQL的优化
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • python大佬养成计划----difflib模块
  • SQLServer之创建数据库快照
  • Tornado学习笔记(1)
  • TypeScript实现数据结构(一)栈,队列,链表
  • Zepto.js源码学习之二
  • 前端存储 - localStorage
  • 深入浅出webpack学习(1)--核心概念
  • 算法系列——算法入门之递归分而治之思想的实现
  • 新手搭建网站的主要流程
  • 译自由幺半群
  • ionic入门之数据绑定显示-1
  • MyCAT水平分库
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (六)Hibernate的二级缓存
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (一)WLAN定义和基本架构转
  • (正则)提取页面里的img标签
  • (转)Linux下编译安装log4cxx
  • (转)ORM
  • .jks文件(JAVA KeyStore)
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET 读取 JSON格式的数据
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET/C# 的字符串暂存池
  • .net反混淆脱壳工具de4dot的使用
  • 。Net下Windows服务程序开发疑惑