机器学习之------信号处理(入门原理)

TensorFlow Signal Processing

  • Problem Overview
    该项目的目标是评估使用深度学习进行音频效果仿真的有效性。对于音频,有两种主要的工具分类:生成器和效果。生成器是接收非音频输入(物理或midi)并从中创建音频的东西。这将包括乐器,合成器,鼓 - 基本上任何真正突出传统音乐的东西。另一个类别,即效果,是将音频作为输入并将其转换为其他音频输出的元素。这可以是从简单的滤波器到更复杂的效果,如失真或混响;即使通过电话呼叫房间或质量下降也是一种效果。这个项目背后的想法是看我们是否可以使用深度学习训练网络来模拟其中一种效果。
    音频是机器学习的有趣媒介。与图像数据一样,可以定量和定性地判断输出。最重要的是,音频本身具有复杂的结构。波的附加属性可能会导致一些无法预料的结果。最重要的是,数字音频数据固有地被卷积:它被存储为从音频信号本身采样的时间序列的点。只要音频准备好输出,这些点就会快速傅里叶变换回信号。因此,许多受效果影响的信息隐藏在此信号处理问题背后。*
    过去,在机器学习中进行信号处理涉及对输入进行一些手动分解,以抽象出信号处理[1]。通常,音频将被渲染成频谱图的图像,其显示音频的频率分布。虽然这适用于分类问题,但似乎没有必要像本文所关注的端到端问题。为此,我们需要进行实际的信号处理,以便检测重要的特征。

*注意 - 仍然可以进行很多效果,因为转换是作为未转换波的应用程序完成的,但通常情况是在频率空间中完成后效果要容易得多。

  • Sample Types
    之前我曾提到音频是一个概念上复杂的结构。 这是因为音频数据是音频幅度的时间序列数据,然而几乎所有我们认为被“存储”为声音的信息都存储在声音的频率空间中。 通过使用傅里叶变换提取两者之间的关系。 下面是一个例子,左边的时间序列数据会产生右边的频率图表。
    在这里插入图片描述
    但是,这过于简单化了。 实际上,频率图表正在为数据添加维度,因此在2D空间中表示它意味着上面的频率图仅对音频的小时间横截面有效。 声音的实际频率分布看起来如此。
    在这里插入图片描述
    事实上,这是大多数机器学习用于训练音频的内容,除了在幅度维度上具有高度之外,他们使用图像的颜色通道和颜色强度来表示它。 这种表示称为谱图。 频谱图实际上存储3维数据,频率显示在垂直方向上,幅度显示为颜色强度,时间沿水平轴显示。 您可以在下面看到一个示例。

在这里插入图片描述

这就是为什么这个项目的目标是让网络自己学习频率 - 幅度关系,这样我们就可以跳过手动提取重要特征的步骤。
数字音频数据被存储为来自幅度与时间图的采样点,这是预期的,因为它是直接形式 - 具有傅里叶变换 - 输出需要。 一个基本的例子如下所示。
在这里插入图片描述
此项目中使用的音频具有统一的采样率,这使我们可以更轻松地批量处理。

  • The Network
    计划教网络如何解释解决2个主要问题所需的音频数据:首先,它需要能够查看音频并从中提取频率数据,其次需要能够“撤消”这个操作使数据可以转换回音频。
    就第一个问题而言,我们可以将时间作为音频数据的维度添加,类似于上面的频谱图概念。在该模型中,时间通过作为其中一个轴来表示为图像的一部分。以这种方式,二维瞬时频率图变为三维图像。对于我们的数据,我们有一维数据:幅度。通过将时间作为维度添加到此数据中,通过在连续的时间块中对其进行批处理,我们可以尝试将网络暴露给数据中的模式。或者至少这是个主意。
    第二个主要问题涉及使系统端到端。我们希望能够获取网络的输出,将其写入文件,然后播放,而无需采取任何额外步骤。对于线性或非线性网络,这不是一个真正的问题。在任何时候,他们本身都应该能够将结果转换为可读格式。然而,对于在网络中引入额外深度的卷积网络,必须具有卷积转置层。这种类型的层有时被称为“反卷积”层,但重要的是要注意这实际上是用词不当,因为反卷积是一种用于计算机视觉的完全不同的过程。无论术语如何,卷积转置层都允许您获取已经卷积的图层,并尝试将数据转换回更有意义的数据。在我们的例子中,它将输出更改回幅度图。卷积变换层的一个很酷的事情是我们可以从变换层中的原始卷积层重用完全相同的滤波器变量。这显着降低了网络的训练难度。考虑到这一点,我们将继续进行主要设计。

*Layer Design
直观地说,线性网络很可能无法正确地模拟这个问题。数据可能太复杂,线性模型无法解释它。但是,我仍然希望形成一个基线,以了解我们通过迁移到更高级的网络将获得什么样的好处。
首先,我使用了一个标准的完全连接的线性回归神经网络,改变隐藏层的深度,找到一些似乎合理训练的东西。这个网络的目标是试图过度训练训练数据,以表明它至少可以被强制逼迫。通过我使用的标准训练集,这些网络需要超过4,000个时期来训练。
移过基本网络,似乎有点直观,卷积网络可以很好地代表这个问题,因为它能够尝试在数据的各个部分上训练过滤器。如果这些滤波器足够大以检测完全振荡,则它可能能够提取一些相关的频率数据。如前所述,每当我们使用卷积层时,我们将不得不在输出上使用卷积转置层。卷积变换层的一个很酷的事情是我们可以从变换层中的原始卷积层重用完全相同的滤波器变量,这将显着降低网络的训练难度。
因此,目前我们已经建立了一个系统,该系统应该能够以一种可能更加真实的数据频率空间的方式查看数据。现在,我们需要做的就是完成这个基本设置,就是在卷积和卷积转置层之间放置一个完全连接的层

  • Sampling and Batching
    查看数据本身,wav文件是立体声16位PCM整数文件。首先,我将数据转换为32位浮点wav文件,并将音频标准化以符合该标准。我将每个文件拆分为单声道音轨,因为它允许我们更快地尝试不同的网络设计。但是,有些滤波器在立体声声道中有不同的效果,因此我们现在将失去训练它们的能力。
    我们正在训练的音频是一组正弦波,方波和锯波,它们在一系列频率上变化。虽然这些波是非常基本的,但这个想法是这些更简单的音频样本可能有助于训练网络更容易理解频率分析。验证数据与训练数据集分开,但测试数据完全不同。虽然测试数据使用相同的过滤器,但它正在测试网络在遇到更困难的问题时的表现:钢琴。这个想法是,它具有更复杂的波形,因此它将更好地测试网络对问题的理解程度。

因为它是时间序列数据,所以批处理过程有点棘手。 虽然数据需要保持在连续的块中,但我们仍然可以提取它的较小部分以进行独立训练,以确保网络统一训练。 为此,我实现了一个批处理系统,该系统在离散时间段内对音频进行滚动窗口选择,然后我为每个时期对这些批次进行随机播放。 如果我们将每个窗口的偏移设置为旁边的偏移量小于每个窗口的长度,那么我们可以在窗口中获得一些重叠以进一步增加可用批次的数量。

旁注 - 起初看起来我们可能希望以足够小的间隔获取数据的一部分,以便仅允许数据中的少数振荡。 这可以确保网络能够了解瞬时频率数据。 但实际上这不起作用。 问题在于振荡的长度直接是音调的结果,因此如果音调改变,则窗口可能会切断提取数据所需的部分。 这是我们必须依靠卷积滤波器为我们切片数据的另一个原因。

猜你喜欢

转载自blog.csdn.net/weixin_41697507/article/details/86770684