PARALLEL WAVEGAN笔记目录

  • 一、论文思想
  • 二、网络结构
    • 2.1 整体结构
      • 2.1.1 生成器损失
      • 2.1.2 判别器损失
    • 2.2 生成器结构(Generator)
    • 2.3 判别器结构(Discriminator)
  • 三、实现细节
  • 四、实验结果
    • 4.1 本论文实验结果
    • 4.2 VOCBENCH实验对比
  • 【相关工作】
    • 1 因果卷积
    • 2 扩展卷积

来源: 2020 ICASSP
机构: 日本line, 韩国naver
论文地址: https://arxiv.org/abs/1910.11480
源码地址: https://github.com/kan-bayashi/ParallelWaveGAN

一、论文思想

PARALLEL WAVEGAN(以下都简称PWG)是一种非常快速轻量的声码器模型。
PWG的主要思想就是采用了多重分辨率STFT损失函数和对抗损失结合的损失去训练生成器。

二、网络结构

2.1 整体结构

由下图所示,PWG由一个生成器和一个判别器组成。

2.1.1 生成器损失

整体损失为STFT lossadversarial loss之和
LG(G,D)=Laux(G)+λadvLadv(G,D)L_{G}(G,D)=L_{aux}(G) + \lambda_{adv}L_{adv}(G,D) LG​(G,D)=Laux​(G)+λadv​Ladv​(G,D)

gen_loss += self.config["lambda_adv"] * adv_loss

>STFT LOSS
输入预测的波形序列真实的波形序列通过不同的stft loss计算多重分辨率损失。STFT损失分为两个部分,分别为频谱收敛损失sc对数幅度谱损失mag
Lsc(x,x^)=∥∣STFT(x)∣−∣STFT(x^)∣∥F∥∣STFT(x)∣∥FL_{sc}(x, \widehat{x}) = \frac{\Vert \vert STFT(x)\vert-\vert STFT(\widehat{x})\vert \Vert_F}{\Vert \vert STFT(x)\vert \Vert_F} Lsc​(x,x)=∥∣STFT(x)∣∥F​∥∣STFT(x)∣−∣STFT(x)∣∥F​​
Lmag(x,x^)=1N∥log∣STFT(X)∣−log∣STFT(x^)∣∥1L_{mag}(x,\widehat{x})=\frac{1}{N}\Vert log\vert STFT(X)\vert-log\vert STFT(\widehat{x})\vert\Vert_1 Lmag​(x,x)=N1​∥log∣STFT(X)∣−log∣STFT(x)∣∥1​
Ls(G)=Ez∼p(z),x∼pdata[Lsc(x,x^)+Lmag(x,x^)]L_{s}(G) = E_{z\sim p(z),x\sim p_{data}}[L_{sc}(x, \widehat{x}) + L_{mag}(x,\widehat{x})] Ls​(G)=Ez∼p(z),x∼pdata​​[Lsc​(x,x)+Lmag​(x,x)]
在具体的实现中,将每一个STFT损失的两个部分分别进行累加,然后除以STFT损失的个数。

for f in self.stft_losses:sc_l, mag_l = f(x, y)sc_loss += sc_lmag_loss += mag_l
sc_loss /= len(self.stft_losses)
mag_loss /= len(self.stft_losses)

将sc和mag相加就得到了生成损失。

gen_loss += sc_loss + mag_loss
gen_loss *= self.config.get("lambda_aux", 1.0)

>adversarial loss
预测的波形输入判别器,然后计算MSE损失
Ladv(G,D)=Ez∼N(0,I)[(1−D(G(z)))2]L_{adv}(G,D)=E_{z\sim N(0,I)}[(1-D(G(z)))^{2}] Ladv​(G,D)=Ez∼N(0,I)​[(1−D(G(z)))2]

p_ = self.model["discriminator"](y_)#y_为生成器预测的波形
adv_loss = F.mse_loss(p_, p_.new_ones(p_.size()))
self.total_train_loss["train/adversarial_loss"] += adv_loss.item()

2.1.2 判别器损失

判别器输入生成器预测的波形序列真实的波形序列,分别通过均方损失(MSE) 得到discriminator loss中的real lossfeak loss
LD(G,D)=Ex∼pdata[(1−D(X))2]+Ez∼N(0,I)[(D(G(z)))2]L_{D}(G,D)=E_{x\sim p_{data}}[(1-D(X))^{2}]+E_{z\sim N(0,I)}[(D(G(z)))^{2}] LD​(G,D)=Ex∼pdata​​[(1−D(X))2]+Ez∼N(0,I)​[(D(G(z)))2]

p = self.model["discriminator"](y) #y是真实波形
p_ = self.model["discriminator"](y_.detach()) #y_是预测波形
real_loss = F.mse_loss(p, p.new_ones(p.size()))
fake_loss = F.mse_loss(p_, p_.new_zeros(p_.size()))
dis_loss = real_loss + fake_loss

2.2 生成器结构(Generator)

输入: 随机噪声和辅助特征(辅助特征为梅尔,能将随机噪声并行的转换为输出波形)
随机噪声的size与判别器输入的音频的size一致。

# make input noise signal batch tensor
if self.use_noise_input:z_batch = torch.randn(y_batch.size())  # (B, 1, T)return (z_batch, c_batch), y_batch
else:return (c_batch,), y_batch

网络: 主体采用wavenet的网络结构,与传统的wavenet不同的地方有——

  • 采用非因果卷积代替因果卷积(见6.1)。
  • 输入之一为来自高斯分布的随机噪声。
  • 模型在训练和推理阶段都是非自回归的。

主体网络由30层dilated residual convolution块组成,以指数方式增加三个dilation cycles。
残差通道数和skip通道数为64个,卷积滤波器大小为3个。

 def forward(self, x, c):# x是噪声, c是梅尔if c is not None and self.upsample_net is not None:c = self.upsample_net(c)assert c.size(-1) == x.size(-1)# encode to hidden representationx = self.first_conv(x)skips = 0for f in self.conv_layers: #30层x, h = f(x, c)skips += hskips *= math.sqrt(1.0 / len(self.conv_layers))# apply final layersx = skipsfor f in self.last_conv_layers:x = f(x)return x

2.3 判别器结构(Discriminator)

判别器由10层一维的非因果扩展卷积组成,激活函数为leaky ReLU。
stride设置为1,除第一和最后一层外,从1到8的一维卷积应用线性增加的扩张。

三、实现细节

  • 生成器先进行训练,生成器训练100000 step后判别器再进行训练。
  • 用于生成器训练的梅尔特征,训练前需进行归一化,使其均值和单位方差都为0
  • 论文实验用到的数据集为24小时左右语音数据集,
  • 将权值归一化应用于所有的卷积层,无论是生成器还是鉴别器。

四、实验结果

4.1 本论文实验结果

本论文对比的基线是ClariNet
MOS评价人群:18个人,20句话

  • 训练时间,PWG远小于基线
  • 模型小,速度快,MOS接近基线

4.2 VOCBENCH实验对比

来自facebook在2021年发表的关于vocoder整体评价的论文VOCBENCH,从下表可得,PWG在现有的声码器中各项指标都居于前列。

【相关工作】

1 因果卷积

什么任务可以用到因果卷积?
利用卷积学习t时刻之前的输入数据,来预测t+1时刻的输出。

在实现上,1D的casual 主要是通过padding来实现的。在2D的casual 主要是通过mask filter map来实现的。

2 扩展卷积

不增加参数和模型复杂度的条件下,可以指数倍的扩大视觉野,dilated为扩展系数。
可以将dilated看成是kernel稀疏化的一种模式。而stride只是dilated的一种特例。

  • 二维扩展卷积
  • 一维扩展卷积

Parallel WaveGan论文和代码笔记相关推荐

  1. LIO-SAM论文与代码阅读笔记(一)论文阅读

    文章目录 0.前言 1.内容介绍 2.研究背景 2.1.不同的地图维护方式 2.2.LIO的紧耦合和松耦合 3.方法 3.1.因子图 3.2.激光里程计因子 3.3.GPS因子 4.实验 4.1.旋转 ...

  2. 【论文学习】《Parallel WaveGAN: A fast waveform generation model based on generative adversarial networks》

    <Parallel WaveGAN : A fast waveform generation model based on generative adversarial networks wit ...

  3. Memory-Associated Differential Learning论文及代码解读

    Memory-Associated Differential Learning论文及代码解读 论文来源: 论文PDF: Memory-Associated Differential Learning论 ...

  4. 推荐系统图算法实用干货汇总(含论文、代码、样例教程)

    Hello,今天为朋友们推荐一个值得学习的公众号「浅梦的学习笔记」,小编目前在电商公司从事推荐系统相关的工作.主要分享关于「推荐系统,图算法,NLP&CV以及求职面试」等内容,欢迎关注一起学习 ...

  5. CVPR2019目标分割论文推荐(附论文及代码链接)

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 本文来源于联盟成员学习笔记 今天推荐几篇CVPR2019目标分割论文,附带论文及代码链接 1.论文题目 <Du ...

  6. CTR调研——博客、论文、代码

    CTR相关理论介绍.论文.代码等资源收集 博客 CTR预估模型发展过程与关系图谱 CTR预估模型:DeepFM/Deep&Cross/xDeepFM/AutoInt代码实战与讲解 对应代码:h ...

  7. 【一文弄懂】优先经验回放(PER)论文-算法-代码

    [一文弄懂]优先经验回放(PER)论文-算法-代码 文章目录 [一文弄懂]优先经验回放(PER)论文-算法-代码 前言: 综合评价: 继续前言唠叨 per论文简述: 参考博客: 背景知识 A MOTI ...

  8. 骨骼动画——论文与代码精读《Phase-Functioned Neural Networks for Character Control》

    前言 最近一直玩CV,对之前学的动捕知识都忘得差不多了,最近要好好总结一下一直以来学习的内容,不能学了忘.对2017年的SIGGRAPH论文<Phase-Functioned Neural Ne ...

  9. Attention论文和代码大全

    前言 这两天,看了不少attention的论文和代码 所以视频和其他文章啥的也都没写. 发现了两个不错的资源. 众所周知,attention是一个即插即用的模块,会发现对应的论文极多,大多数都是有个模 ...

最新文章

  1. 用计算机能改装成万用表吗,用旧手机电池修改万用表
  2. resin3.1+apache2.2.8 整合(笔记)
  3. 如何在柱状图中点连线_练瑜伽,如何放松僵硬紧张的髂腰肌?
  4. SpringSecurity快速入门
  5. CSS display: table-cell 用于水平垂直居中
  6. SQL OVER用法
  7. 对数函数定义域和值域为r_对数函数
  8. python读取文件最后几行_如何用python获取文件的最后一行,文件可能会比较大
  9. ubuntu 16.04: 添加字体
  10. linux iptables命令
  11. 晨风机器人回复词库_qq机器人词库大全下载
  12. RS232 DB9引脚定义
  13. 检查Oracle数据库和PDB数据库的大小
  14. “人活着是为了什么?”“生活的中心是什么?”
  15. android正确释放webview,解决Android WebView内存释放
  16. php抢票程序,HTML实现抢票功能(设定时间打开抢票的页面)
  17. E4A安卓app制作——初识易安卓(一)
  18. 华为浏览器如何进入阅读模式_华为浏览器阅读模式 | 手游网游页游攻略大全
  19. 微信公众号开发系列-玩转微信开发-目录汇总
  20. 环信的使用以及注意事项!

热门文章

  1. Mac系统下无法删除文件夹
  2. 用文件记录游戏最高分【C语言】
  3. 记一次蚂蚁金服的面试经历
  4. ionic开发——获取手机唯一标识imei码
  5. Python之跳出语句(break,continue)
  6. 逆天了!“波士顿动力机器人”离上战场又近了一步
  7. 黑马程序员 网络编程2
  8. 开篇之作之——阅读与思考
  9. 华为HCIE专家认证相关简介
  10. (二)Qt多线程实现海康工业相机图像实时采集