DIFFWAVE: A VERSATILE DIFFUSION MODEL FOR AUDIO SYNTHESIS (Paper reading)
DIFFWAVE: A VERSATILE DIFFUSION MODEL FOR AUDIO SYNTHESIS
Zhifeng Kong, Computer Science and Engineering, UCSD, ICLR2021, Code, Paper
1. 前言
在这项工作中,我们提出了DiffWave,这是一种用于条件和无条件波形生成的多功能扩散概率模型。该模型是非自回归的,通过具有合成过程中恒定步数的马尔可夫链将白噪声信号转换为结构化波形。通过在数据似然上优化一种变体的变分下界,该模型能够高效训练。DiffWave在不同的波形生成任务中产生高保真音频,包括基于梅尔频谱图的神经声码化、类别条件生成和无条件生成。我们证明DiffWave在语音质量方面与强大的WaveNet声码器相匹配(MOS:4.44对比4.43),同时合成速度更快数个数量级。特别是,在具有挑战性的无条件生成任务中,它在音频质量和从各种自动和人工评估中得到的样本多样性方面明显优于自回归和基于GAN的波形模型。
2. 整体思想
扩散模型的U-Net换为1维的网络,其他基本一致
3. 方法
大多数先前的波形模型侧重于具有信息性局部条件的音频合成(例如,梅尔频谱图或对齐的语言特征),只有少数例外用于无条件生成)。已经注意到,自回归模型在无条件设置下往往会生成虚构的类似词汇的声音,或者在无条件情况下生成较差的样本。这是因为需要生成非常长的序列(例如,一个秒的语音需要生成16,000个时间步),而没有任何条件信息。
扩散概率模型(简称扩散模型)是一类有前途的生成模型,它使用马尔可夫链逐渐将一个简单分布(例如,各向同性高斯分布)转化为复杂的数据分布。尽管数据似然性难以计算,但扩散模型可以通过优化变分下界来高效地进行训练。最近,在图像合成中已经展示了一种特定的参数化方式取得了成功,该方式与去噪分数匹配有关。扩散模型可以利用扩散(加噪)过程而无需可学习参数,从训练数据中获得“白化”的潜在表示。因此,与其他模型相比,训练过程中不需要额外的神经网络。这避免了由于两个网络的联合训练而产生的“后验崩溃”或“模式崩溃”问题,因此对于高保真度的音频合成非常有价值。
在这项工作中,我们提出了DiffWave,一种用于原始音频合成的多功能扩散概率模型。DiffWave相比先前的工作具有几个优势:i) 它是非自回归的,因此可以并行合成高维波形。ii) 它是灵活的,因为与需要保持潜在表示与数据之间双射关系的流模型不同,它不强加任何架构约束。这导致了仍然能够生成高保真语音的小型神经声码器。iii) 它使用基于单一ELBO的训练目标,无需任何辅助损失(例如,基于频谱图的损失)进行高保真度的合成。iv) 它是一个多功能模型,可为有条件和无条件波形生成产生高质量的音频信号。具体而言,我们做出了以下贡献:
DiffWave采用了受WaveNet启发的前馈和双向扩张卷积架构。它在语音质量方面与强大的WaveNet声码器相匹配,同时合成速度更快,因为它仅需要进行少量的顺序步骤即可生成非常长的波形。
我们的小型DiffWave具有2.64M参数,并在V100 GPU上以超过5倍于实时的速度合成22.05 kHz的高保真语音,而无需经过专门设计的内核。虽然它的速度仍然比最先进的基于流的模型慢,但它的占用空间更小。我们期望通过在未来优化其推理机制来进一步提高速度。
在具有挑战性的无条件和类条件波形生成任务中,DiffWave在音频质量和多样性方面显著优于WaveGAN和WaveNet,这是通过多个自动和人工评估进行衡量的。

网络结构如图。输入一维输出一维,算法流程如下,其实和DDPM一样的:

局部条件器:在语音合成中,神经声码器可以在对齐的语言特征、从文本到频谱图模型得到的梅尔频谱图或文本到波形架构中的隐藏状态的条件下合成波形。在这项工作中,**我们将DiffWave作为一个神经声码器,以梅尔频谱图为条件进行测试。我们首先通过转置的2D卷积将梅尔频谱图上采样到与波形相同的长度。在将其梅尔频谱图映射为2C通道的每个层特定的Conv1×1之后,条件器作为偏差项添加到每个残差层的扩张卷积中。超参数可以在第5.1节中找到。
全局条件器:在许多生成任务中,条件信息是由全局离散标签(例如,说话者ID或单词ID)给出的。在所有实验中,我们使用维度为128的共享嵌入。在每个残差层中,我们应用层特定的Conv1×1将dlabel映射到2C通道,并在每个残差层的扩张卷积后将嵌入作为偏差项添加。
相关文章:
DIFFWAVE: A VERSATILE DIFFUSION MODEL FOR AUDIO SYNTHESIS (Paper reading)
DIFFWAVE: A VERSATILE DIFFUSION MODEL FOR AUDIO SYNTHESIS Zhifeng Kong, Computer Science and Engineering, UCSD, ICLR2021, Code, Paper 1. 前言 在这项工作中,我们提出了DiffWave,这是一种用于条件和无条件波形生成的多功能扩散概率模型。该模…...
排序算法8----归并排序(非递归)(C)
1、介绍 归并排序既可以是内排序(在内存上的数据排序),也可以是外排序(磁盘上)(硬盘)(在文件中的数据排序)。 其他排序一般都是内排序。 区别于快速排序的非递归…...
Golang 里的 context
context 的作用 go 的编程中,常常会在一个 goroutine 中启动多个 goroutine,然后有可能在这些 goroutine 中又启动多个 goroutine。 如上图,在 main 函数中,启动了一个 goroutine A 和 goroutine B,然后 goroutine A …...
PHP短链接url还原成长链接
在开发过程中,碰到了需要校验用户回填的短链接是不是系统所需要的,于是就需要还原找出短链接所对应的长链接。 长链接转短链接 在百度上搜索程序员,跳转页面后的url就是一个长链接。当然你可以从任何地方复制一个长链接过来。 长链接 http…...
redis原理(三)redis命令
一、字符串命令: 1、字符串基本操作: 2、自增自减 :如果一个值可以被解释为十进制整数或者浮点数,redis允许用户对这个字符串进行INCR*、DECR*操作。 (1)INCR key:将键存储的值的值加1。 &a…...
教程:在Django中实现微信授权登录
教程:在Django中实现微信授权登录 本教程将引导您如何在Django项目中实现微信授权登录。在本教程中,我们将使用自定义的用户模型User,并通过微信提供的API来进行用户认证。 在进行以下教程之前,请确保你已经在微信开放平台添加了…...
YOLOv5改进 | 主干篇 | 12月份最新成果TransNeXt特征提取网络(全网首发)
一、本文介绍 本文给大家带来的改进机制是TransNeXt特征提取网络,其发表于2023年的12月份是一个最新最前沿的网络模型,将其应用在我们的特征提取网络来提取特征,同时本文给大家解决其自带的一个报错,通过结合聚合的像素聚焦注意力和卷积GLU&…...
【java八股文】之计算机网络系列篇
1、TCP/IP和UDP模型 TCP/IP分层(4层):应用层,传输层,网络层,数据链路层 网络的七层架构 (7层):应用层,表示层,会话层,传输层ÿ…...
SpringAMQP的使用
1. 简介: SpringAMQP是基于RabbitMQ封装的一套模板,并且还利用SpringBoot对其实现了自动装配,使用起来非常方便。 SpringAmqp的官方地址:https://spring.io/projects/spring-amqp SpringAMQP提供了三个功能: 自动声…...
MATLAB - 使用运动学 DH 参数构建机械臂
系列文章目录 前言 一、 使用 Puma560 机械手机器人的 Denavit-Hartenberg (DH) 参数,逐步建立刚体树形机器人模型。在连接每个关节时,指定其相对 DH 参数。可视化机器人坐标系,并与最终模型进行交互。 DH 参数定义了每个刚体通过关节与其父…...
2024年腾讯云新用户优惠云服务器价格多少?
腾讯云服务器租用价格表:轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年,540元三年、2核4G5M带宽218元一年,2核4G5M带宽756元三年、轻量4核8G12M服务器446元一年、646元15个月,云服务器CVM S5实例2核2G配置280.8元一年…...
如何在原型中实现继承和多态
在JavaScript中,我们可以通过原型链来实现继承。以下是如何在原型中实现继承的例子: // 定义一个动物原型 var Animal function() {}; Animal.prototype.move function() { console.log(‘This animal can move.’); }; // 定义一个狗的原型…...
MySQL/Oracle 的 字符串拼接
目录 MySQL、Oracle 的 字符串拼接1、MySQL 的字符串拼接1.1 CONCAT(str1,str2,...) : 可以拼接多个字符串1.2 CONCAT_WS(separator,str1,str2,...) : 指定分隔符拼接多个字符串1.3 GROUP_CONCAT(expr) : 聚合函数,用于将多行的值连接成一个字符串。 2、Oracle 的字…...
【Java SE语法篇】10.String类
📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 文章目录 前言1. String类1.1 字符串的构造1.2 String对象的比…...
【Python】数据可视化--基于TMDB_5000_Movie数据集
一、数据准备 tmdb_5000_movie数据集下载 二、数据预处理 观察数据集合情况 import pandas as pd import ast import warnings warnings.filterwarnings(ignore) # 加载数据集 df pd.read_csv(tmdb_5000_movies.csv) # 查看数据集信息 print(df.info()) 由于原数据集包含的…...
学习Vue的插槽总结
今天学习了Vue的插槽,在这之前学习使用组件的使用还没有试过在父组件中给子组件插入html结构,今天学习的插槽正是拿来实现这一功能的,这也是一种组件中通信的方式,首先插槽分为三类:默认插槽、具名插槽、作用域插槽。接…...
第九篇 API设计原则与最佳实践
深入浅出HTTP请求前后端交互系列专题 第一章 引言-HTTP协议基础概念和前后端分离架构请求交互概述 第二章 HTTP请求方法、状态码详解与缓存机制解析 第三章 前端发起HTTP请求 第四章 前后端数据交换格式详解 第五章 跨域资源共享(CORS):现代W…...
新版AndroidStudio配置maven阿里云镜像
project下的build.gradle: // Top-level build file where you can add configuration options common to all sub-projects/modules. // 注意jdk版本需要17以上,因为8.1.3的gradle需要jdk17以上 //plugins { // id com.android.application version…...
【OSG案例详细分析与讲解】之十一:【多效果的3D动画】
目录 一、【多效果的3D动画】前言 二、【多效果的3D动画】实现效果...
一道使用LinkedList和Stack解决的算法题
一、无法吃午餐的学生数量 学校的自助午餐提供圆形和方形的三明治,分别用数字 0 和 1 表示。所有学生站在一个队列里,每个学生要么喜欢圆形的要么喜欢方形的。 餐厅里三明治的数量与学生的数量相同。所有三明治都放在一个 栈 里,每一轮&#…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
