HiFi-GAN——基于 GAN 的声码器,能在单 GPU 上生成 22 KHz 音频

拟议的 HiFiGAN 可从中间表征生成原始波形

源码地址:https://github.com/NVIDIA/DeepLearningExamples
论文地址:https://arxiv.org/pdf/2010.05646.pdf

研究要点包括

  • **挑战:**基于 GAN 的语音波形生成方法在质量上不及自回归模型和基于流量的模型。
  • **解决方法:**提出 HiFi-GAN,以实现高效、高质量的语音合成。
  • **要点:**现在,单个 V100 GPU 就能生成 22.05 kHz 的高质量音频。

这意味着高质量的原始语音现在可以通过一种名为 "mel-spectrogram "的语音中间表示有效生成。

神经声码器和语音合成领域的背景

近年来,随着深度学习技术的发展,语音合成技术突飞猛进。

大多数神经语音合成模型采用两阶段管道

  1. 预测中间表征,如文本中的熔谱图。
  2. 从中间表征合成原始波形。

本文的重点是模型设计的第二阶段,即**“从熔体频谱图中高效生成高质量语音波形”**。

顺便提一下,这种第二阶段模型通常被称为 “神经译码器”,是许多研究的主题。

以前的工作问题
波网利用卷积神经网络实现高质量语音合成。
基于流量的模型,如 Parallel WaveNet 和 WaveGlow。并行计算实现更高速度
MelGAN 与 GAN结构紧凑,合成速度快。

顺便提一下,语音合成领域的一个共同问题是,由于语音是由不同周期的正弦信号组成的,因此必须对语音的周期模式进行建模

拟议方法:HiFi-GAN 概述

本研究中的 HiFiGAN 是一种基于 GAN 的生成模型,它可以

来源:https://pytorch.org/hub/nvidia_deeplearningexamples_hifigan/

具体来说,它由一个发生器和两个判别器组成:多周期判别器(MPD)和多尺度判别器(MSD)。

发电机

HiFi-GAN 生成器由一个全卷积神经网络组成。

将mel 频谱图作为输入,通过转置卷积重复进行升采样,并进行扩展,直到输出序列的长度与原始语音波形的时间分辨率相匹配。

每个转置卷积后还会有一个多感受场融合(MRF)模块。

多感知场融合(MRF)

MRF 模块旨在并行捕捉不同长度的模式。具体来说,MRF 模块返回多个残差块的输出总和。

每个残差块都有不同的内核大小和扩张率,以形成各种感受野模式。

鉴别器

HiFi-GAN 使用以下两个标识符。

  • 多周期判别器(MPD)
  • 多尺度判别器 (MSD)

MPD 由多个子识别器组成,每个子识别器只接收来自输入语音的等间距采样信号。这使得每个子识别器都能关注输入语音中的不同周期模式,从而捕捉语音中固有的各种周期结构。

MSD 还能通过连续评估不同尺度的输入语音,捕捉连续模式和长期依赖关系。具体地说,它由三个子鉴别器组成,有三种输入语音类型:原始语音、1/2 降低采样率的语音和 1/4降低采样率的语音。

因此,通过结合 MPD 和 MSD,HiFi-GAN 被认为能够从生成语音的详细周期特征和全局连续特征等多个角度进行评估

损失函数

HiFi-GAN 研究使用了四种损失函数

  • GAN 损失(对抗损失)
  • 梅尔谱仪损失
  • 特征匹配损失
  • 最终损失函数(最终损失)

GAN 损失(对抗损失)

在GAN Loss(对抗损失)中,MPD 和 MSD 被视为一个判别器,并使用 LSGAN 目标函数。鉴别器学会将真实语音分类为 1,将生成语音分类为 0,而生成器学会欺骗鉴别器。

梅尔谱仪损失

梅尔谱图损失(Mel-Spectrogram Loss)在GAN 损失的基础上引入了梅尔谱图损失,以提高生成器的训练效率和生成语音的质量。

具体来说,它的定义是发生器合成的波形与真实波形的熔谱图之间的 L1 距离。

这种损耗使发生器能够合成与输入条件相对应的自然波形,并从对抗学习的早期阶段开始稳定学习。

特征匹配损失

指真实样本和生成样本中鉴别器特征的相似度。

具体来说,提取判别器的中间特征,并计算每个特征空间中真实样本和条件生成样本之间的 L1 距离。

最终损失函数

最终的 HiFi-GAN 损失函数。

在这里,发生器的损失函数表示为上述三个损失函数的加权和。

效果

实验细节

为评估 HiFi-GAN 的语音合成质量和合成速度,我们进行了以下四项实验

  • 主观评估以及与其他先进模型(WaveNet、WaveGlow、MelGAN)的速度比较
  • 调查 HiFi-GAN 的每个组成部分(MPD、MRF、mel spectrogram loss)对质量的影响。
  • 研究语音合成中的泛化性能
  • 端到端语音合成实验

主观评价以及与其他现代模型的速度比较

我们从 LJSpeech 中随机抽取了 50 个语句来测量主观评价(平均意见分值,MOS)和合成速度。

结果表明,与 WaveNet、WaveGlow 和 MelGAN 等其他模型相比,HiFi-GAN 实现了更高的 MOS。至于 HiFiGAN 的 V3,其速度也比 CPU 上的实时合成快 13.44 倍。

-研究 HiFi-GAN 对单个组件质量的影响

为了研究每个分量(MPD、MRF、MelSpectrogram loss)对 HiFiGAN 中语音质量的影响,他们根据 V3 删除了每个分量,并比较了 MOS。他们还研究了在 MelGAN 中引入 MPD 的效果。

结果表明,MPD、MRF 和 mel spectrogram loss 都有助于提高性能。特别是当 MPD 被移除时,质量大大降低。

此外,当将 MPD 引入 MelGAN 模型时,也观察到了显著的改进。

研究语音合成中的泛化性能

数据集中剔除了九位发言者的语音数据,并通过对发言者的语音进行梅尔频谱图转换→使用 HiFiGAN 进行语音合成来测量 MOS。

结果表明,在所有三个变体中,HiFi-GAN 的性能均优于自回归模型和基于流量的模型。

结果表明,语音合成的泛化能力很强。

端到端语音合成实验

HiFi-GAN 与文本到谱模型 "Tacotron2 "相结合,用于评估端到端语音合成的性能。

具体来说,将 Tacotron2 生成的熔谱图输入 HiFi-GAN,并对 MOS 进行测量。此外,还验证了微调的效果。

结果表明,结合Tacotron2 和HiFi-GAN 的语音合成模型优于 WaveGlow。微调结果还显示,V1 的 MOS 达到了 4.18,几乎与人声质量相当。

总结

本文介绍了有关 HiFiGAN 的研究,这是一种用于高效、高质量语音合成的 GAN 模型。

本研究有三个局限性

  • 是否适用于更多的说话者和语言还不得而知。
  • 嗓音的情感和节奏表现力尚未得到充分测试。
  • 尚未对有限计算资源环境下的语音合成性能进行评估。

因此,在未来的研究中,他们计划开发一个 HiFi-GAN 的扩展模型来解决上述问题,并通过在小数据集上学习来缩小规模和提高效率。

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

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

相关文章

纯前端小游戏,4096小游戏,有音效,Html5,可学习使用

// 游戏开始运行create: function(){this.fieldArray [];this.fieldGroup this.add.group();this.score 0;//4096 增加得分this.bestScore localStorage.getItem(gameOptions.localStorageName) null ? 0 : localStorage.getItem(gameOptions.localStorageName);for(var …

vscode及pycharm配置Python文件模板

一、vscode配置方法 第一步,依次点击“File”->“preference”->“Configure User Snippets”,在弹出的框中输入Python,打开python.json 文件 第二步,python.json 文件中输入以下内容: {"Python Template…

QtC++ 设计模式(五)——状态模式

状态模式 序言理解源码 序言 设计模式只是一个抽象的设计模式方法,并不是一个固定使用的搭配,就算是普通switch语句,Map,乃至状态机都是状态模式的其中一种实现方法 状态模式看起来好像和策略模式差不多,主要是其的侧…

快速上手绿联私有云UGOS Pro系统Docker

要快速上手使用绿联私有云UGOS Pro系统上的Docker,可以按照以下步骤进行操作: 1. 设置绿联私有云UGOS Pro 确保你已经成功设置并连接了绿联私有云设备。完成基本的网络配置和用户设置。 2. 访问UGOS Pro系统 通过浏览器访问你的绿联私有云管理界面。…

git记住账号和密码

git记住账号和密码 一、git记住账号和密码1. 全局记住2. 取消全局记住 一、git记住账号和密码 在使用 git 使用 https推送的时候一直需要输入密码。就可以试试下面的方法 1. 全局记住 windows 在git bash 中执行以下命令 linux 直接在bash中执行 git config --global crede…

深入探讨:Node.js、Vue、SSH服务与SSH免密登录

在这篇博客中,我们将深入探讨如何在项目中使用Node.js和Vue,并配置SSH服务以及实现SSH免密登录。我们会一步步地进行讲解,并提供代码示例,确保你能轻松上手。 一、Node.js 与 Vue 的结合 1.1 Node.js 简介 Node.js 是一个基于 …

Java记事本工具Notepad++

常见的高级记事本 Editplus、Notepad、Sublime Notepad软件的安装和使用 安装:傻瓜式安装 1、选择中文-->【OK】 2、点击【下一步】 3、协议点击【我接受】 4、选择安装路径-->【下一步】 5、点击【下一步】 6、最后点击【安装】 7、将运行取消-->点击…

戴尔电脑开机出现no boot device found错误提示原因分析及解决方法

戴尔电脑是一款不的品牌,戴尔电脑一直以来都是以IT直销享誉全球的。而旗下的戴尔笔记本,更是深受用户们的追捧和喜爱。最近有网友反馈戴尔电脑开机出现no boot device found错误提示是怎么回事?后来发现有很多网友将引导模式改成legacymbr后发现启动时出…

Python 中的属性和方法

在面向对象编程(OOP)中,类是代码的基本构造块。类通过属性和方法来定义对象的状态和行为。在 Python 中,属性和方法是定义类时的重要组成部分。本文将深入探讨 Python 中的属性和方法,帮助你更好地理解它们的用法和意义…

2024-07-18 Unity插件 Odin Inspector8 —— Type Specific Attributes

文章目录 1 说明2 特定类型特性2.1 AssetList2.2 AssetSelector2.3 ChildGameObjectsOnly2.4 ColorPalette2.5 DisplayAsString2.6 EnumPaging2.7 EnumToggleButtons2.8 FilePath2.9 FolderPath2.10 HideInInlineEditors2.11 HideInTables2.12 HideMonoScript2.13 HideReferenc…

对消息队列进行深入学习

目录 1.什么是消息队列。1.1消息队列1.1.1同步的理解1.1.2异步的理解 1.2消息传递与消息队列 2. 消息队列应用场景2.1 异步处理2.2 流量削锋2.3 应用解耦2.4 日志处理2.5 消息通讯2.6 延时任务2.7 广播消费2.8 分布式事务 3. 主流消息队列3.1 RabbitMQ3.1.1 RabbitMQ工作原理3.…

河南萌新联赛2024第(一)场:河南农业大学(部分题解)

A 造数 题目链接 题意: 给一个整数n,求出最少的操作数使0转化为n 有三种操作方式: 12*2 解题思路: 我们可以将基础的1,2,3分别需要1,1,2次操作, 当n大于3时&#x…

仅两家!云原生向量数据库 PieCloudVector 全项通过信通院「可信数据库」评测

7月16日,2024 可信数据库发展大会在北京隆重举行。大会以“自主、创新、引领”为主题,近百位数据库领域的专家、学者齐聚一堂,带来高质量的数据库技术洞察与实战经验。 本次可信数据库发展大会中,中国信通院正式公布 2024 年上半年…

紫光展锐5G安卓核心板T760__国产手机芯片方案

展锐T760安卓核心板是具备续航和性能更加均衡的5G移动平台。其主要特点包括主流的6400万像素摄像头和高达120Hz的刷新率。 平台采用多模融合的创新架构和AI智能调节技术,从而在5G数据场景下降低了37%的整体功耗,在5G待机场景下降低了18%的整体功耗。 多…

gin框架 POST 请求参数绑定 JSON数据ShouldBind 使用注意事项 - 结构体必须定义json标签

gin框架中的请求数据绑定ShouldBind可将前端发送的数据直接绑定到自定义结构体, 但是在POST发送JSON 数据时 需要注意 因为gin框架在底层绑定数据时使用了json对参数进行了反序列化, 所以我们在自定义的结构体中,如果前端发送的JSON中的字段和…

直播架构如何设计核心节点和边缘节点

在直播架构中,核心节点和边缘节点的分工及主要服务是确保直播服务稳定、高效和可扩展的关键。以下是对这些节点的详细描述: 核心节点 核心节点通常位于数据中心,负责处理直播的主要逻辑和数据处理。其主要服务包括: 直播管理后…

Redis常见阻塞原因

1、命令阻塞 使用时间复杂度O(n)的不当命令造成全表扫描,导致阻塞 如 keys * 获取所有key 2、RDB持久化save阻塞 Redis提供两个命令来生成RDB快照文件: 1、save:主线程阻塞,写完RDB才放行 2、bgsave : …

qml 实现一个listview

主要通过qml实现listvie功能&#xff0c;主要包括右键菜单&#xff0c;滚动条&#xff0c;拖动改变内容等&#xff0c;c 与 qml之间的变量和函数的调用。 main.cpp #include <QQuickItem> #include <QQmlContext> #include "testlistmodel.h" int main…

js vue axios post 数组请求参数获取转换, 后端go参数解析(gin框架)全流程示例

今天介绍的是前后端分离系统中的请求参数 数组参数的生成&#xff0c;api请求发送&#xff0c;到后端请求参数接收的全过程示例。 为何会有这个文章&#xff1a;后端同一个API接口同时处理单条或者多条数据&#xff0c;这样就要求我们在前端发送请求参数的时候需要统一将请…

C/C++ xml库

文章目录 一、介绍1.1 xml 介绍1.2 xml 标准1.3 xml 教程1.4 xml 构成 二、C/C xml 库选型2.1 选型范围2.2 RapidXML2.3 tinyxml22.4 pugixml2.5 libxml 五、性能比较5.1 C xml 相关的操作有哪些5.2 rapidxml、Pugixml、TinyXML2 文件读取性能比较 六、其他问题6.1 version和 e…