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

vs网站开发平台新网站建设脑图

vs网站开发平台,新网站建设脑图,网站后台程序下载,网站优化平台说明:该系列文章从本人知乎账号迁入,主要原因是知乎图片附件过于模糊。 知乎专栏地址: 语音生成专栏 系列文章地址: 【GPT-SOVITS-01】源码梳理 【GPT-SOVITS-02】GPT模块解析 【GPT-SOVITS-03】SOVITS 模块-生成模型解析 【G…

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

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

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

1.SOVITS 鉴别器

1.1、概述

GPT-SOVITS 在鉴别器这块在SOVITS原始版本上做了简化,先回顾下SOVITS的鉴别器。主要包含三类:
在这里插入图片描述
各个鉴别器的输出都包括两类,即各层中间输出和最终结果输出,分别用来计算特征损失和生成损失。如下:
在这里插入图片描述

1.2、MRD举例

在这里插入图片描述

import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.nn.utils import weight_norm, spectral_normclass DiscriminatorR(torch.nn.Module):def __init__(self, hp, resolution):super(DiscriminatorR, self).__init__()self.resolution = resolutionself.LRELU_SLOPE = hp.mpd.lReLU_slopenorm_f = weight_norm if hp.mrd.use_spectral_norm == False else spectral_normself.convs = nn.ModuleList([norm_f(nn.Conv2d(1, 32, (3, 9), padding=(1, 4))),norm_f(nn.Conv2d(32, 32, (3, 9), stride=(1, 2), padding=(1, 4))),norm_f(nn.Conv2d(32, 32, (3, 9), stride=(1, 2), padding=(1, 4))),norm_f(nn.Conv2d(32, 32, (3, 9), stride=(1, 2), padding=(1, 4))),norm_f(nn.Conv2d(32, 32, (3, 3), padding=(1, 1))),])self.conv_post = norm_f(nn.Conv2d(32, 1, (3, 3), padding=(1, 1)))def forward(self, x):fmap = []# 获取频谱,这里是做了窗口傅里叶变换# 傅里叶变换时,频谱数量、窗口的移动、窗口大小由参数 resolution 决定x = self.spectrogram(x)x = x.unsqueeze(1)for l in self.convs:# 与其他鉴别器一样经过conv-1d 和 leak-relue 形成中间层特征x = l(x)x = F.leaky_relu(x, self.LRELU_SLOPE)# 中间层特征被保存在 fmap 中fmap.append(x)x = self.conv_post(x)fmap.append(x)x = torch.flatten(x, 1, -1)# 返回各层的中间层特征 fmap  和 最终输出 xreturn fmap, xdef spectrogram(self, x):n_fft, hop_length, win_length = self.resolutionx = F.pad(x, (int((n_fft - hop_length) / 2), int((n_fft - hop_length) / 2)), mode='reflect')x = x.squeeze(1)x = torch.stft(x, n_fft=n_fft, hop_length=hop_length, win_length=win_length, center=False, return_complex=False) #[B, F, TT, 2]mag = torch.norm(x, p=2, dim =-1) #[B, F, TT]return magclass MultiResolutionDiscriminator(torch.nn.Module):def __init__(self, hp):super(MultiResolutionDiscriminator, self).__init__()self.resolutions = eval(hp.mrd.resolutions)self.discriminators = nn.ModuleList([DiscriminatorR(hp, resolution) for resolution in self.resolutions])def forward(self, x):ret = list()# 这里做了一个不同尺度的 DiscriminatorR"""在 base.yml 中 mrd 的参数如下,有四个不同的尺度:mrd:resolutions: "[(1024, 120, 600), (2048, 240, 1200), (4096, 480, 2400), (512, 50, 240)]" # (filter_length, hop_length, win_length)use_spectral_norm: FalselReLU_slope: 0.2"""for disc in self.discriminators:ret.append(disc(x))return ret  # [(feat, score), (feat, score), (feat, score)]

2.GPT-SOVITS 鉴别器

2.1、主要更改

GPT-SOVITS 鉴别器结构与 SOVITS基本类似,只是去除了多分辨率鉴别器,其余基本一样,包括多周期鉴别器的尺度也是 2, 3, 5, 7, 11。其返回结果也包含最终【生成鉴别结果】和各层输出【特征鉴别结果】两类。

class MultiPeriodDiscriminator(torch.nn.Module):def __init__(self, use_spectral_norm=False):super(MultiPeriodDiscriminator, self).__init__()periods = [2, 3, 5, 7, 11]discs = [DiscriminatorS(use_spectral_norm=use_spectral_norm)]discs = discs + [DiscriminatorP(i, use_spectral_norm=use_spectral_norm) for i in periods]self.discriminators = nn.ModuleList(discs)def forward(self, y, y_hat):y_d_rs = []y_d_gs = []fmap_rs = []fmap_gs = []for i, d in enumerate(self.discriminators):y_d_r, fmap_r = d(y)      # 原始音频输入,返回鉴别结果y_d_g, fmap_g = d(y_hat)  # 推测音频输入,返回鉴别结果y_d_rs.append(y_d_r)y_d_gs.append(y_d_g)fmap_rs.append(fmap_r)fmap_gs.append(fmap_g)return y_d_rs, y_d_gs, fmap_rs, fmap_gs

2.2、损失函数

y_d_hat_r, y_d_hat_g, fmap_r, fmap_g = net_d(y, y_hat)
with autocast(enabled=False):loss_mel = F.l1_loss(y_mel, y_hat_mel) * hps.train.c_melloss_kl = kl_loss(z_p, logs_q, m_p, logs_p, z_mask) * hps.train.c_klloss_fm = feature_loss(fmap_r, fmap_g)loss_gen, losses_gen = generator_loss(y_d_hat_g)

如前文所述,这里特征损失基于各层输出,计算逻辑在 feature_loss

def feature_loss(fmap_r, fmap_g):loss = 0for dr, dg in zip(fmap_r, fmap_g):for rl, gl in zip(dr, dg):rl = rl.float().detach()gl = gl.float()loss += torch.mean(torch.abs(rl - gl))return loss * 2

最终生成损失判别基于最终结果,计算逻辑在 generator_loss

def generator_loss(disc_outputs):loss = 0gen_losses = []for dg in disc_outputs:dg = dg.float()l = torch.mean((1 - dg) ** 2)gen_losses.append(l)loss += lreturn loss, gen_losses
http://www.yayakq.cn/news/938670/

相关文章:

  • 旅游攻略网站模板深圳建筑工程交易服务主页
  • 福建省建设局网站在织梦网站做静态网页
  • 网络营销效果好的网站台州营销型网站建设
  • 包头网站制作 建设大学生网站设计作品
  • 太仓网站建设找哪家wordpress页面怎么写
  • 网站做404页面怎么做南宁网站建站公司
  • 没有备案的网站百度能收录网站建设方案对比分析报告
  • 做网站用百度浏览器石家庄网站开发公司
  • 青海省网站建设公司哪家好自媒体平台快看点注册下载
  • 网站js修改头像代码中国企业500强出炉
  • 怎么把网站放到空间吗渭南市住建设局网站
  • 网站名称需要注册吗网站开发软件 手机
  • 佛山网站页面优化设计制作费税率是多少
  • 网站的设计制作流程团队logo标志设计
  • 溧阳手机网站设计公司做个网页要多少钱
  • 做电影网站要多少钱重庆市建设工程信息网中标项目
  • 国家工信部 网站备案汕头金平区
  • 做网站代码编辑工具四川省建设厅官方网站首页
  • 中国各大网站开发语言网站建设商家
  • 做公司网站每年多少钱美食网站开发开题报告
  • 网站建设的课程增光路网站建设
  • 网站个人中心wordpress电子商务网站建设渠道
  • 免费企业网站建设哪个陕西城乡建设局网站
  • 展台设计灵感网站工作感悟的句子
  • 技术支持 长沙网站建设-创研科技北京软件有限公司
  • wordpress 1h 1g郑州企业网站排名优化
  • 在哪里购买虚拟空间建设网站最近军事新闻热点
  • 杭州定制网站开发赣州章贡区景点
  • 一个企业官网多个营销型网站南京网站建设王道下拉強
  • 商务网站的建设有哪几个步骤短视频平台