【GPT-SOVITS-06】特征工程-HuBert原理

news2025/1/9 21:18:39

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

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

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

1.概述

HuBert 模型目的在于提取音频自编码特征,其核心架构如下:

说明:代码主要参考 HuggingFace 的transformers 开源库

在这里插入图片描述

  • 输入原始音频数据,通过类似Bert原理的编码器形成隐变量,即在进入多头注意力模块前增加了随机的掩码
  • 训练时,第一轮比对原始音频的 MFCC 特征做 kmean 编码,类似残差向量量化网络。针对隐变量与编码做交叉熵损失
  • 训练时,第二轮比对编码器生成的隐变量(第6/9层)做 kmean 编码,再针对隐变量与编码做交叉熵损失

与论文中的截图做一下对比:
在这里插入图片描述
在这里插入图片描述

2.核心源码解析

2.1、特征提取:HubertFeatureEncoder

在这里插入图片描述
默认为 7层一维卷积,每层卷积参数,主要是 kernel 和 stride 不同

2.2、核心编码器:HubertEncoder

在这里插入图片描述

  • 默认为 12层编码器模块
  • 在输出时,包含了最终层的输出,以及中间各层的输出

2.3、有监督微调:HubertForCTC

在这里插入图片描述

  • 论文中同样给出了基于CTC损失的微调
  • 在微调时,特征提取编码器参数固定

CTC 损失的价值,主要是用于输出和标签的不一致性。举例:
假设 hello 这个单词在10秒内完成,则按秒分帧,每一秒对应一个字母的概率。即可能是 hhhhellooo。损失计算的时候是要对比 hhhhellooo 和 hello 的差异。

3、调试代码参考

from transformers import HubertModel, HubertConfig
import torch
import librosa
import torch.nn as nn


def _test_pred_vec():
    config = HubertConfig()

    model = HubertModel(config)
    device = "cuda" if torch.cuda.is_available() else "cpu"
    model.to(device)

    wav_in = "../data/test.wav"
    audio, sr  = librosa.load(wav_in, sr=16000)

    audio = torch.from_numpy(audio).to(device)
    x = audio[None, :]

    vec = model.forward(x)

    print(vec)

def _test_ctc_loss():
    ctc_loss        = nn.CTCLoss()
    log_probs       = torch.randn(50, 16, 20).log_softmax(2).requires_grad_()
    targets         = torch.randint(1, 20, (16, 30), dtype=torch.long)
    input_lengths   = torch.full((16,), 50, dtype=torch.long)
    target_lengths  = torch.randint(10, 30, (16,), dtype=torch.long)
    loss            = ctc_loss(log_probs, targets, input_lengths, target_lengths)

    print(loss)


if __name__ == '__main__':
    #_test_pred_vec()

    _test_ctc_loss()

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

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

相关文章

从0开始写一个问卷调查APP的第11天

1.今日任务 分析:上次我们实现了从数据库中成功的查找到对应问卷的问题并在前端展示出来,那么今天我们增加难度。在数据库中插入多项选择问题,在接口中查找到并在前端显示出来。 2.实现 2.1数据库中插入测试数据 我们先查看一下表的结构 2.2接口实现…

软件架构设计 C/S与B/S架构的区别

一、什么是C/S架构? C/S是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle或SQLServer。 C/S架构软件有一个特点,就是如果用户要使用的话,需要下载一个客户端&#x…

nodejs部署

字符集转换: mysql报错:Incorrect string value: \xF0\x9F... for column XXX at row 1_incorrect string value: \\xf0\\x9f\\x94\\xa5\\xe8-CSDN博客 查看nginx是否启动 ps -ef|grep nginx 检查nginx是否配置正确 nginx -t 防火墙开启端口 启动并…

CCDP.01.使用NotePad++辅助部署OpenStack的说明

前言 对于象OpenStack(OS)这样的复杂分布式系统(云计算平台),一次部署通过是需要相当的Linux基础、网络基础、分布式系统基础、云计算基础的。这里类比在开发大型复杂系统常常采用的“防御式编程”方法论,探…

Vue中使用Lodash

Vue中使用Lodash 前言安装Lodash引用方法vue中使用1、cloneDeep 深拷贝2、uniq 数组去重3、uniqWith 数组对象去重 isEqual 深度比对4、intersection 提取数组相同元素5、chunk 数组切分6、compact去除假值7、reject:根据条件删除指定的值8、find:查找结果的第一个值9、filter:…

Machine Learning ---- Multiple linear regression equation

一、Multiple linear regression: In the study of real-world problems, the changes in the dependent variable are often influenced by several important factors. In this case, it is necessary to use two or more influencing factors as independent variables to e…

如何用Selenium通过Xpath,精准定位到“多个相同属性值以及多个相同元素”中的目标属性值

前言 本文是该专栏的第21篇,后面会持续分享python爬虫干货知识,记得关注。 相信很多同学,都有使用selenium来写爬虫项目或者自动化页面操作项目。同样,也相信很多同学在使用selenium来定位目标元素的时候,或多或少遇见到这样的情况,就是用Xpath定位目标元素的时候,页面…

AI系统性学习01- Prompt Engineering

文章目录 面向开发者的Prompt Engineering一、简介二、Prompt设计原则1 环境配置2.两个基本原则2.1 原则1:编写清晰、具体的指令2.1.1 策略一:分割2.1.2 策略2:结构化输出2.1.3 策略3:模型检测2.1.4 策略4:提供示例 2.…

Godot 学习笔记(1):环境配置

文章目录 前言Godot 环境配置相关链接最简单的按钮项目Sence打包最简单的按钮事件 总结 前言 我从小就有个梦想,我想做游戏。虽然我大学的时候选择了计算机,工作也是计算机,但是我一直没有时间去学游戏引擎。原因有二:第一&#…

学习数据结构和算法的第16天

单链表的实现 链表的基本结构 #pragma once #include<stdio.h> #include<stlib.h> typedf int SLTDataType; typedy struct SListNode {SLTDataType data;struct SListNode*next; }SLTNode;void Slisprint(SLTNode*phead); void SListPushBack(SLTNode**pphead,S…

常用芯片学习——DS3231M芯片

DS3231M RTC实时时钟 芯片介绍 DS3231M是一款低成本、极其精确的 I2C 实时时钟 &#xff08;RTC&#xff09;。该设备集成了电池输入&#xff0c;并在设备主电源中断时保持准确的计时。微型电子机械系统 &#xff08;MEMS&#xff09; 谐振器的集成提高了器件的长期精度&…

【记录搭建elk 如何在linux共享文件】

『如何在linux共享文件 &#xff0c;搭建elk直接看第二部分』 新增用户a b c adduser a adduser b adduser c新增用户组 A groupadd developteam将用户a b c 加入 组 usermod -a -G developteam hadoop usermod -a -G developteam hbase usermod -a -G developteam hive设置um…

Flutter 核心原理 - UI 框架(UI Framework)

Flutter 既能保证很高的开发效率&#xff0c;又能获得很好的性能。 这两年 Flutter 技术热度持续提高&#xff0c;整个 Flutter 生态和社区也发生了翻天覆地的变化。目前Flutter 稳定版发布到了3.0&#xff0c;现在已经支持移动端、Web端和PC端&#xff0c;通过Flutter 开发的…

【计算机视觉】二、图像形成——实验:2D变换编辑器2.0(Pygame)

文章目录 一、向量和矩阵的基本运算二、几何基元和变换1、几何基元(Geometric Primitives)2、几何变换(Geometric Transformations)2D变换编辑器0. 项目结构1. Package: guibutton.pywindow.py1. __init__(self, width, height, title)2. add_buttons(self)3. clear(self)4. dr…

WEB前端 HTML 列表表格

列表 有序列表 使用“ol”创建“有序列表”&#xff0c;使用“li”表示“列表项” <body><ol type"1"><li>列表1</li><li>列表2</li><li>列表3</li></ol><ol type"A"><li>列表A<…

Redis进阶——redis消息队列

目录 redis消息队列认识消息队列基于List实现消息队列如何基于List结构模拟消息队列基于List的消息队列有哪些优缺点&#xff1f; 基于PubSub的消息队列基于Stream的消息队列读取消息的方式之一&#xff1a;XREAD基于Stream的消息队列–消费者组redis三种消息队列的对比 Stream…

Spring炼气之路(炼气二层)

一、bean的配置 1.1 bean的基础配置 id&#xff1a; bean的id&#xff0c;使用容器可以通过id值获取对应的bean&#xff0c;在一个容器中id值唯一 class&#xff1a; bean的类型&#xff0c;即配置的bean的全路径类名 <bean id"bookDao" class "com.zhang…

Java八股文(MyBatis Plus)

Java八股文のMyBatis Plus MyBatis Plus MyBatis Plus MyBatis Plus 是什么&#xff1f;它与 MyBatis 有什么区别&#xff1f; MyBatis Plus 是基于 MyBatis 进行扩展的一款持久层框架&#xff0c;它提供了一系列增强功能&#xff0c;简化了 MyBatis 的使用。 与 MyBatis 相比…

(十八)【Jmeter】取样器(Sampler)之BeanShell 取样器

简述 操作路径如下: 作用:通过Beanshell脚本来编写自定义请求。配置:编写Beanshell脚本代码,实现请求逻辑。使用场景:在JMeter中利用Beanshell脚本语言的特性进行自定义请求。优点:可以利用Beanshell脚本语言的丰富功能。缺点:脚本语言的性能可能不如其他编译语言,且…

论文阅读——SpectralGPT

SpectralGPT: Spectral Foundation Model SpectralGPT的通用RS基础模型&#xff0c;该模型专门用于使用新型3D生成预训练Transformer&#xff08;GPT&#xff09;处理光谱RS图像。 重建损失由两个部分组成&#xff1a;令牌到令牌和频谱到频谱 下游任务&#xff1a;