TensorFlow WaveNet声音合成

2024-03-26 08:50

本文主要是介绍TensorFlow WaveNet声音合成,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

WaveNet 是生成原始音频波形的深层生成模型。这项突破性的技术已经被 Google DeepMind 引入(https://deepmind.com/blog/generate-mode-raw-audio/),用于教授如何与计算机对话。结果确实令人惊讶,在网上你可以找到合成声音的例子,电脑学习如何用名人的声音与人们谈话。

所以,你可能想知道为什么学习合成音频是如此困难。听到的每个数字声音都是基于每秒 16000 个样本(有时是 48000 个或更多)建立一个预测模型,在这个模型中学习基于以前所有的样本来重现样本,这是一个非常困难的挑战。

尽管如此,有实验表明,WaveNet 已经改进了当前最先进的文本到语音(Text-To-Speech,TTS)系统,降低了英语和普通话之间 50% 的差异。

更酷的是,DeepMind 证明了 WaveNet 可以教会电脑如何产生乐器的声音,比如钢琴音乐。

下面给出一些定义。TTS 系统通常分为两个不同的类别:

  • 连续TTS:其中单个语音片段首先被记忆,然后在语音再现时重新组合。这种方法没有大规模应用,因为它只能再现记忆过的语音片段,并且不可能在没有记忆片段的情况下再现新的声音或不同类型的音频。
  • 参数TTS:其中创建模型用于存储要合成的音频的所有特征。在 WaveNet 之前,使用参数 TTS 生成的音频不如连续 TTS 自然。WaveNet 通过直接建模音频声音的生成来改进现有技术,而不是使用过去常用的中间信号去处理算法。


原则上,WaveNet 可以看作是一堆卷积层(已经在前面章节中看到了二维卷积图像),而且步长恒定,没有池化层。请注意,输入和输出的结构具有相同的尺寸,所以 ConvNet 非常适合对音频声音等连续数据进行建模。

然而,实验表明,为了达到输出神经元中的感受野大尺寸,有必要使用大量的大型滤波器或者不可避免地增加网络的深度。请记住,一个网络中一层神经元的感受野是前一层神经元对其提供输入的横截面。由于这个原因,纯粹的卷积网络在学习如何合成音频方面效率不高。

WaveNet 的关键在于所谓的扩张因果卷积(有时称为带孔卷积),这就意味着当应用卷积层的滤波器时,一些输入值被跳过。例如,在一个维度上,一个具有扩张 1、大小为 3 的滤波器 w 将计算如下所示的加权和。

简而言之,在扩张值为 D 的扩张卷积中,通常步长是 1,你也可使用其他的步长。下图给出了一个例子,扩大(孔)尺寸为 0,1,2:


由于引入“孔”这个简单的想法,使得堆叠多个扩张的卷积层与指数增加的过滤器、学习长距离输入而不用担心有一个过深的网络成为可能。

因此,WaveNet 属于卷积网络,其卷积层具有各种扩张因子,使得感受野随深度呈指数增长,有效地覆盖了数千个音频时间步长。

当训练时,输入是来自人类说话者的录音。这些波形量化为一个固定的整数范围。WaveNet 定义了一个初始卷积层,只访问当前和之前的输入。然后,有一堆扩大的卷积层,仍然只能访问当前和之前的输入。最后,有一系列密集层结合了前面的结果,接下来是分类输出的 softmax 激活函数。

在每个步骤中,从网络预测一个值并将其反馈到输入中。同时,计算下一步的新预测。损失函数是当前步骤的输出和下一步的输入之间的交叉熵。

NSynth是最近由 Google Brain 小组发布的一个 WaveNet 的演变,它不是因果关系,而是旨在看到输入块的整个上下文。如下图所示,神经网络确实是复杂的,但是作为介绍性讨论,知道网络学习如何通过使用基于减少编码/解码期间的误差的方法来再现其输入就足够了:

总之, WaveNet 是一种卷积网络,卷积层具有各种扩张因子,使得感受野随深度呈指数级增长,因此可以有效地覆盖数千个音频时间步长。NSynth 是 WaveNet 的一种演变,其中原始音频使用类似 WaveNet 的处理来编码,以学习紧凑的表示。然后,这个紧凑的表示被用来再现原始音频。

一旦学习如何通过扩张卷积创建一段紧凑的音频,可以发现其中的乐趣,比如说:

  • 你可以看到一个环境中学习的模型如何在另一个环境中重新混合。例如,通过改变扬声器的身份,可以使用 WaveNet 用不同的声音描述同样的事情(https://deepmind.com/blog/wavenet-generative-model-raw-audio/)。
  • 另一个非常有趣的实验是学习乐器的模型,然后重新混合,这样就可以创造出以前从未听过的新乐器。这真的很酷,它打开了一个新世界。
    例如,在这个例子中,把西塔琴和电吉他结合起来,形成一种很酷的新乐器。还不够酷?那么把低音贝斯和狗的叫声结合起来怎么样(https://aiexperiments.withgoogle.com/sound-maker/view/)?

这篇关于TensorFlow WaveNet声音合成的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/847937

相关文章

Java实战之自助进行多张图片合成拼接

《Java实战之自助进行多张图片合成拼接》在当今数字化时代,图像处理技术在各个领域都发挥着至关重要的作用,本文为大家详细介绍了如何使用Java实现多张图片合成拼接,需要的可以了解下... 目录前言一、图片合成需求描述二、图片合成设计与实现1、编程语言2、基础数据准备3、图片合成流程4、图片合成实现三、总结前

树莓派5_opencv笔记27:Opencv录制视频(无声音)

今日继续学习树莓派5 8G:(Raspberry Pi,简称RPi或RasPi)  本人所用树莓派5 装载的系统与版本如下:  版本可用命令 (lsb_release -a) 查询: Opencv 与 python 版本如下: 今天就水一篇文章,用树莓派摄像头,Opencv录制一段视频保存在指定目录... 文章提供测试代码讲解,整体代码贴出、测试效果图 目录 阶段一:录制一段

win10不用anaconda安装tensorflow-cpu并导入pycharm

记录一下防止忘了 一、前提:已经安装了python3.6.4,想用tensorflow的包 二、在pycharm中File-Settings-Project Interpreter点“+”号导入很慢,所以直接在cmd中使用 pip install -i https://mirrors.aliyun.com/pypi/simple tensorflow-cpu下载好,默认下载的tensorflow

稀疏自编码器tensorflow

自编码器是一种无监督机器学习算法,通过计算自编码的输出与原输入的误差,不断调节自编码器的参数,最终训练出模型。自编码器可以用于压缩输入信息,提取有用的输入特征。如,[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]四比特信息可以压缩成两位,[0,0],[1,0],[1,1],[0,1]。此时,自编码器的中间层的神经元个数为2。但是,有时中间隐藏层的神经元

Tensorflow实现与门感知机

感知机是最简单的神经网络,通过输入,进行加权处理,经过刺激函数,得到输出。通过输出计算误差,调整权重,最终,得到合适的加权函数。 今天,我通过tensorflow实现简单的感知机。 首先,初始化变量:     num_nodes = 2     output_units = 1     w = tf.Variable(tf.truncated_normal([num_nodes,output

Tensorflow lstm实现的小说撰写预测

最近,在研究深度学习方面的知识,结合Tensorflow,完成了基于lstm的小说预测程序demo。 lstm是改进的RNN,具有长期记忆功能,相对于RNN,增加了多个门来控制输入与输出。原理方面的知识网上很多,在此,我只是将我短暂学习的tensorflow写一个预测小说的demo,如果有错误,还望大家指出。 1、将小说进行分词,去除空格,建立词汇表与id的字典,生成初始输入模型的x与y d

Deepin Linux安装TensorFlow

Deepin Linux安装TensorFlow 1.首先检查是否有Python,一般deepin系统都自带python的。   2.安装pip Sudo appt-get install pip来安装pip,如果失败就先更新一下sudo apt-get updata,然后再sudo apt-get install pip,如果定位失败,就sudo apt-get install pyth

unity导入半透明webm + AE合成半透明视频

有些webm的文件导入unity后无法正常播报,踩坑好久才知道需要webm中的:VP8 标准 现在手上有几条mp4双通道的视频,当然unity中有插件是可以支持这种视频的,为了省事和代码洁癖,毅然决然要webm走到黑。 mp4导入AE合成半透明 打开 AE 软件,创建一个新的合成项目。在项目面板中,选择 “导入” 或直接将 MP4 视频文件拖放到项目面板中,导入视频素材。项目面板中,右击

终止distributed tensorflow的ps进程

1.直接终止: $ ps -ef | grep python | grep 文件名 | awk {'print $2'} | xargs kill文件名为当前运行的程序,名称如:distribute.py 2.查找pid,后kill: $ ps -ef | grep python | grep 文件名 | awk {'print $2'}$ kill -9 <pid>

三文带你轻松上手鸿蒙的AI语音03-文本合成声音

三文带你轻松上手鸿蒙的AI语音03-文本合成声音 前言 接上文 三文带你轻松上手鸿蒙的AI语音02-声音文件转文本 HarmonyOS NEXT 提供的AI 文本合并语音功能,可以将一段不超过10000字符的文本合成为语音并进行播报。 场景举例 手机在无网状态下,系统应用无障碍(屏幕朗读)接入文本转语音能力,为视障人士提供播报能力。类似微信读书,可以实现将文章内容通过语音朗读,可以