HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

DeepMind 与谷歌大脑联手推出 WaveRNN,移动端合成高保真音频媲美 WaveNet

  • 2018-03-26
  • 本文字数:4653 字

    阅读完需:约 15 分钟

关键摘要

  • 论文提出了单层循环神经网络 WaveRNN,以及双 softmax 层,合成音频质量可与最先进的 WaveNet 模型相媲美。网络的密集形式可以在 GPU 上产生比实时速度快 4 倍的 24kHz 16 位音频。
  • 论文采用权重修剪方法减少了 WaveRNN 的权重数量。参数数量固定时,稀疏网络表现比小型密集网络更好,且稀疏度高达 96% 时也能保持该对比关系。由于权重数量减少,稀疏 WaveRNN 可以在移动 CPU 上生成高保真音频。
  • 论文提出一种新的基于子尺度的生成方法,将长序列分成一批短序列,并可以同时生成多个样本。

研究背景介绍

序列生成模型在自然语言、自然图像、视频、音频等领域都取得了非常好的效果。但是有效的采样一直是该类模型难以解决的问题。论文通过对文本转语音的合成,使用一系列技术减少采样时间,同时保持输出的质量。

论文的目标是增加序列模型的采样效率,而不损失模型的性能。采样过程花费的时间 T(u) 是目标 u 包含的样例个数和产生每个样例所需的时间的乘积。后者可以分解为计算时间 c(opi) 和网络中每层所需的运行时间 d(opi)。

T(u) 受四个参数影响,可能会变得很大:

u:样本数量较多,例如高保真音频由每秒 24000 个 16 位的样例组成。

N:网络结构较深,如 WaveNet。

c(opi):参数较多。

d(opi):每层运行所需时间较多。

作者针对这 4 个参数,分别提出了提升采样速度的方法。在生成音频质量损失最低的情况下,通过减少这 4 个参数的值,从而降低整体的采样所需时间 T(u)。

WaveRNN

针对公式中的参数 N,作者设计了 WaveRNN,降低了序列模型中对每个样本的操作次数 N。

作者利用了循环神经网络(RNN)的核心特点:通过单循环层可以输出对文本的高非线性变换。WaveRNN 由单层 RNN 和双 softmax 层构成,softmax 层用于预测 16 位音频样本。

图 1 WaveRNN 结构图

作者将 RNN 的状态分成两部分,c代表粗(高 8 位)样本,f代表细(低八位)样本。每一个部分分别输入对应的 softmax 层,对 8 位细样本的预测是基于 8 位粗样本的。R 与粗样本和细样本同时相乘,门输出只用于估算粗样本,然后采样得到ct。从P(c)中采样得到c后,估算细样本,然后采样得到ft

表 1 给定模型和 WaveRNN-896 模型之间的 A/B 对比测试

从 A/B 对比试验中可以看出,仅有 896 单元的 WaveRNN 与最大的 WaveNet 达到了相当的 NLL 评分,而且音频保真度之间也没有很大的差距,而且 MOS 评分均很高。WaveRNN 在产生每一个 16 位样本时,仅用了 N=5 次的矩阵矢量相乘,就达到了这样的表现性能。而 WaveNet 用了两层网络,每层 30 个残差块(residual block),即 N=30*2=60 次矩阵矢量相乘。

WaveRNN 采样在 GPU 的实现

即使 N 很小,用普通方法实现 WaveRNN 也无法直接生成实时或更快的音频。内存带宽限制和进行 N 次相乘需要的启动时间都是很严重的瓶颈。作者通过使用持久内核来实现采样过程。在采样开始阶段一次性加载参数,并且在整个过程中将参数保存在寄存器中,来避免内存带宽的限制。同时,由于一次说话间隔的整个采样过程由单次 GPU 操作完成,也避免了操作启动时间的限制。

稀疏 WaveRNN

WaveRNN 的结构大大减少了所需操作次数 N,并且将采样实现成单次 GPU 操作也减少了启动时间消耗 d(opi),下面介绍一下如何减少每次操作的计算时间消耗 c(opi)。

权重稀疏化与结构稀疏化

减少网络的参数数量可以减少采样所需的计算时间 c(opi)。基于此,作者的目标是在给定参数数量情况下最优化表现性能。作者使用二值 mask 来限定权重矩阵的稀疏模式,对 WaveRNN 的权重进行稀疏化。作者采用结构化稀疏(块稀疏)来减少内存负荷。稀疏 mask 的结构是非重叠的权重块,一起修剪或保持,基于块内权重的平均大小。在每块含有 m=16 个权重时,表现性能损失最小,同时减少了存储稀疏模式所需的空间。

在参数固定时,大型稀疏 WaveRNN 比小型密集 WaveRNN 表现性能要好,而且这一对比关系在稀疏程度高达 96% 时也能保持。

图 2 固定参数数量 NLL 与稀疏度变化曲线

从图中可以看出,稀疏结构为 16x1 和 4x4 在高稀疏度可以达到最优表现。

移动 CPU 上的稀疏 WaveRNN 采样

稀疏 WaveRNN 的高质量输出、参数较少和内存带宽低要求的特点使其很适合在低功耗移动平台上得到有效实现。作者在移动 CPU 上实现了稀疏矩阵矢量相乘和非线性单元,并进行了基准实验:

表 2 稀疏 WaveRNN 移动采样性能基准实验结果

上表是稀疏 WaveRNN 移动采样性能基准实验结果,实现平台为通用骁龙 808 和 835 移动 CPU。模型有 1024 个隐藏单元,95% 稀疏度和 4x4 稀疏结构。

作者用 softsign 非线性函数替代了门控循环单元(GRU)中标准的 tanh 和 sigmoid 函数,取得了更快的计算速度。

表 3 移动 CPU 内核非线性单元每秒评测次数和最大相关误差

尽管移动 CPU 的计算量和内存带宽比 GPU 小了 2-3 个数量级,在移动 CPU 上的实验表明这些资源足以让稀疏 WaveRNN 在低功耗设备上实时生成高保真度的音频。这是目前第一个能够在各种计算平台,包括移动 CPU 上进行实时音频合成的序列神经网络模型。

子尺度(Subscale)WaveRNN

最后,针对采样时间 T(u) 公式中的 u 参数(目标中的样本数量),作者提出了 subscale WaveRNN。

子尺度依赖方法

图 3 Subscale WaveRNN 依赖机制

图中每一个方块对应一个 16 位的样本。子尺度方法首先将张量分割成 B 个交错样本的子张量。每个子张量基于之前生成的子张量的过去和未来样本生成。过去范围不受限制,而未来范围为 F,根据条件网络的接受野而定,然后应用批采样。最后的张量由生成的子张量重组而成。

批采样(Batched Sampling)

一个尺度为 L 的 tensor 折叠成 B 个 sub-tensor,每一个尺度为 L/B。Subscale 的方法可以在一个 batch 中一次生成多个样本。由于每个子张量的生成基于前一个子张量,在实际中只需要相对较小的未来状态视野(future horizon F)。下一个子张量的生成可以在前一个子张量的前 F 个样本生成后立刻开始。实验证明,Subscale WaveRNN 能够每一步产生 B=16 的样本,同时不损失音频保真度。

实验

作者在单人北美英语文字转语音数据库上进行测试,输入是语言特征向量,输出是 24kHz,16 位的波形。在验证集上进行三项评估:负 log 似然函数(NLL),人为评价的平均主观意见分(MOS),以及人为评价模型之间的 A/B 对比测试(分数在 -3 非常差和 +3 非常好之间)。

WaveRNN 质量评测

下表给出了不同大小的 WaveRNN 的评测结果。较大的 WaveRNN 的 NLL 分数接近 60 层的 WaveNet 的评分。人为打分的 WaveRNN-896 和 WaveNet 之间的 A/B 对比试验表明在生成语音质量方面没有明显差别。

表 4 WaveRNN NLL 和 MOS 在文本转语音基准实验上的评测结果

WaveRNN 采样速度评测

WaveRNN-896 实现的持久 GPU 操作采样效率最高。下表给出了不同批尺寸的采样速度,随着批尺寸增加,计算吞吐量也随之增加。

表 5 WaveRNN GPU 核速度(样本 / 秒)

WaveRNN-896 采样过程的 GPU 核速度达到了 96000 样本 / 秒,大概是实时高保真 24kHz 16 位音频的 4 倍,而对应的 WaveNet 只有 8000 样本 / 秒。

稀疏 WaveRNN 质量评价

下表给出了不同模型尺寸和稀疏程度的稀疏 WaveRNN NLL 分数。

表 6 不同模型尺寸和稀疏程度的稀疏 WaveRNN NLL 分数。

从表中可以看出,随模型大小增加,网络性能随之增加。随稀疏度增加,网络性能有所下降。WaveRNN-2048 在稀疏度为 99% 时,仅含有 167k 个参数,也能产生高保真度的音频。

稀疏 WaveRNN 采样速度评测

表 7 每秒 ARM 矩阵向量相乘(MVM)和对应的 Gflops,低功耗处理器使用骁龙 808 和 835。

Softsign GRU 评测

图 4 标准非线性单元和 softsign 非线性单元验证曲线

上图给出了标准非线性单元和 softsign 非线性单元在 WaveRNN 和 Subscale WaveRNN 模型的验证曲线。实验表明,softsign GRU 与标准 GRU 单元表现性能无差,且具有更快的计算速度。

Subscale WaveRNN 质量评测

从表 4 中可以看出,Subscale WaveRNN 8x 与基准 WaveRNN-896 取得了同样的 MOS 评分,证明在修改了依赖机制后,Subscale WaveRNN 依然可以准确学习数据分布。从表 1 中可以看出,Subscale WaveRNN 16x 的音频保真度与 WaveRNN-896 基本没有差别。用序列模型进行音频生成对于丢失依赖是十分敏感的,尤其是局部依赖。而作者的实验成功证明了 subscale 依赖机制能够有效保存对序列模型高性能有关键作用的局部依赖。

论文原文: Efficient Neural Audio Synthesis

感谢蔡芳芳对本文的审校。

2018-03-26 07:052892
用户头像

发布了 52 篇内容, 共 29.8 次阅读, 收获喜欢 73 次。

关注

评论 1 条评论

发布
暂无评论
发现更多内容

记一次PHP渗透测试实战教程

网络安全学海

php 网络安全 信息安全 渗透测试 安全漏洞

MySQL知识点整理

一个大红包

8月日更

基于时间和窗口的算子(六)

Databri_AI

flink 窗口函数 算子

DeFi去中心化平台源码开发|智能合约系统搭建

量化系统19942438797

从安卓转到Java开发,我吃透了这份pdf,终于4面拿下美团offer

Java~~~

Java spring 面试 微服务 JVM

【前端 · 面试 】HTTP 总结(十一)—— HTTPS 概述

编程三昧

面试 https 8月日更

端口占用解决方案

一个大红包

8月日更

数据缓存历险记(五)--LRU缓存算法的最终篇

卢卡多多

缓存 LRU Redis 协议 8月日更

CSS 文档中定位指南:static、relative、absolute、fixed、sticky

devpoint

CSS 8月日更

RESTful API

escray

学习 极客时间 如何落地业务建模 8月日更

前端之算法(一)

Augus

数据结构与算法 8月日更

写作 7 堂课——【6. 清单式写作】

LeifChen

清单 写作技巧 8月日更 检查清单

Ipfs靠谱吗?ipfs中国授权公司都有哪些?

分布式存储 区块链+ IPFS fil

Web 框架 Gin | Gin 介绍

xcbeyond

Go 语言 gin 8月日更

从新手村出来,我在 Apache APISIX 社区发出了第一个 PR

API7.ai 技术团队

开源 后端 API网关 APISIX

fil矿机怎么购买?fil矿机在哪买?

fil矿机怎么购买 fil矿机在哪买

企业不可忽视的三大关键时刻

石云升

管理经验 关键时刻 体验设计 8月日更

手把手 Golang 实现静态图像与视频流人脸识别

声网

音视频 人脸识别

网络攻防学习笔记 Day102

穿过生命散发芬芳

态势感知 网络攻防 8月日更

融云CTO杨攀:把握核心技术,促进产学研用融合发展

融云 RongCloud

异步编程的终极解决方案 async/await:用同步的方式去写异步代码

前端依依

大前端 js 经验分享 异步 知识讲解

ipfs矿机挖币哪家最好?ipfs矿机公司实力排行如何?

ipfs矿机挖币哪家最好 ipfs矿机公司实力排行如何

Android开发:引入重复包报错Error:Execution failed for task ‘:app:transform...’解决方法

三掌柜

8月日更 8月

仿imtoken钱包源码,TP钱包源码开发

LeetCode题解:80. 删除有序数组中的重复项 II,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

用区块链加强知识产权保护

CECBC

MinIO Client 使用(一)

耳东@Erdong

Minio 8月日更 mc minio client

【设计模式】代理模式

Andy阿辉

C# 后端 设计模式 8月日更

新药开发瓶颈问题或将被打破,北鲲云超算平台开启药物研发“加速度”

北鲲云

🏆「作者推荐」【JVM 性能调优】JVM分析与调优技巧分析(原理篇)

洛神灬殇

JVM JVm虚拟机 8月日更

区块链难懂?人民日报评论员讲给你听

CECBC

DeepMind与谷歌大脑联手推出WaveRNN,移动端合成高保真音频媲美WaveNet_Google_马卓奇_InfoQ精选文章