让音视频学习变得简单之音频深度学习(3):数据准备和增强技术

启发式音视频深度学习系列

增强频谱图功能以实现其最佳性能的指南,用通俗易懂的语言对数据增强进行讲解。


图片由 Vidar Nordli-MathisenUnsplash上提供

本文是我讲解音视频之音频深度学习系列的第三篇文章。到目前为止,我们已经了解了声音是如何用数字表示的,并且深度学习了常用声音声谱图的架构、如何在Python中预处理音频数据以生成梅尔频谱图。

在本文中,我们会通过调整梅尔频谱图超参数的方式进一步增强其性能,还会了解到音频数据的增强技术。这两个方面都为音频数据准备奠定了基础,以便我们能从音视频之音频深度学习模型中获得更好的性能。

这里有我相关文章的索引。我的目标始终是不仅要理解某件事情的工作原理,还要理解它工作的动因。

1.最先进的技术-本文(声音及其数字化方式。在日常生活中深度学习音频会遇到那些问题?什么是声谱图,为什么它们对使用语音聊天室至关重要?)

2.为什么梅尔频谱图的性能更好(在Python中处理音视频数据。什么是梅尔频谱图以及如何生成它们)

3.功能的优化和增强(增强频谱图功能可通过超参数调整和数据增强实现最佳性能)

4.音频分类(端到端的示例和用于对普通声音进行分类的体系结构。适用于语音聊天室使用的各种场景。)

5.自动语音识别(语音转文本算法和体系结构,使用CTC Loss和解码来对齐序列)

调整超参数以优化频谱图性能

在上一篇文章中,我们了解到了什么是 梅尔频谱图,以及如何使用一些简便的库函数创建一个频谱图。但是,要想真正为我们的深度学习模型获得其最佳性能,我们应该有针对性地对梅尔频谱图进行优化。

我们可以使用一些超参数来调整频谱图的生成方式。为此,我们需要了解一些关于如何生成频谱图的概念。(我会尽量让这些概念变得更加简单和直观)

快捷的傅立叶变换技术(FFT)

DFT技术(即分离傅立叶变换技术)是计算傅立叶变换的一种方法。但DFT的计算成本很高,所以在实践过程中,使用FFT(即快捷的傅立叶变换)算法,是实现DFT的有效方法。

然而,FFT会为你提供整个音频信号时间序列的整体频率成分,它不会告诉你这些频率成分在音频信号中是如何随着时间而变化的。例如,你将无法看到音频第一部分是高频率,而第二部分却是低频率的,以此类推。

短时Fourier Transform(STFT)

为了得到更精细的视图,并看到随时间而变化的频率,我们将使用STFT算法(即短时傅立叶变换)。STFT是傅立叶变换的另一种变体,它通过使用滑动时间窗口将音频信号分解成更小的部分,它对每个部分进行FFT,然后将其合并。因此,STFT算法能够捕捉随时间而变化的频率。
1_KoXWCAyudh0AIe0HlLeeNw
STFT沿着信号滑动一个重叠的窗口,并在每个片段上进行傅立叶变换(Source

这就把信号沿时间轴分成了几个部分。其次,它还将信号沿频率轴分割成几个部分。它将整个频率范围划分为等距的频段(以梅尔刻度表示)。然后,对于每个时间段,它能计算出每个频段的振幅或能量。

让我们用一个例子来阐明这一点。我们有一个1分钟的音频片段,其中包含0Hz到10000 Hz之间的频率(以梅尔刻度表示)。假设梅尔频谱图的算法为:

  • 选择窗口,将我们的音频信号分成20个时段。
  • 将我们的频率范围划分为10个频段(即0–1000Hz、1000–2000Hz、…9000–10000Hz)。

该算法的最终输出是形状为(10,20)的2D Numpy数组,其中:

  • 20列中的每一列都代表一个时间段的FFT。
  • 10行中的每行都代表一个频段的振幅值。

让我们看第一列,这是第一时间段的FFT。它有10行。

  • 第一行是介于0–1000 Hz之间的第一个频段的振幅。
  • 第二行是第二个频段在1000-2000 Hz之间的振幅。
  • … 以此类推。

数组中的每一列在我们的梅尔频谱图图像中都变成了“列”。

梅尔谱图超参数

这为我们提供了用于调整梅尔频谱图的超参数。我们将使用Librosa使用的参数名称。(其他库具有相同的参数)

频段

  • fmin —最小频率
  • fmax-显示的最大频率
  • n_mels —频段数(即Mel bin)。这是频谱图的高度

时间段

  • n_fft —每个时间段窗口的长度
  • hop_length —每步滑动窗口所用的样本数。因此,频谱图的宽度=样本总数/ hop_length

你可以根据所拥有的音频数据类型和要解决的问题来调整这些超参数。

MFCC(用于人类语音)

梅尔频谱图对于大多数音视频之音视频深度学习应用程序来说都是很给力的。但是,对于人类语音的问题(如自动语音识别),你可能会发现相比较而言,MFCC(梅尔频率倒谱系数)的效果有时会更好。

这些基本上就是利用梅尔频谱图并应用几个进一步深度处理的步骤了。从梅尔频谱图中选择了一个压缩的频段表示,这些频段代表了人类说话的最常见频率。

import sklearn
import librosa
import librosa.display

# Load the audio file
samples, sample_rate = librosa.load(AUDIO_FILE, sr=None)
mfcc = librosa.feature.mfcc(samples, sr=sample_rate)

# Center MFCC coefficient dimensions to the mean and unit variance
mfcc = sklearn.preprocessing.scale(mfcc, axis=1)
librosa.display.specshow(mfcc, sr=sample_rate, x_axis='time')

print (f'MFCC is of type {type(mfcc)} with shape {mfcc.shape}')
# MFCC is of type <class 'numpy.ndarray'> with shape (20, 134)

1_hrV0kAzu7AIYNOWHtljbPQ
从音频生成的MFCC(作者提供的图像)

通过以上内容我们发现,相同音频的梅尔频谱图的形状为(128,134),而MFCC的形状为(20,134)。MFCC从音频中提取出一组与捕获的基本音质联系最密切的功能。

数据增强

数据增强是增加数据集多样性的一种常见技术,特别是当你没有足够数据时,它可以自动地帮你增加数据。我们可以通过对现有数据样本进行小范围的修改来实现这一目的。

拿图像举例,我们可能会对其进行旋转、裁剪或缩放、修改颜色或灯光、或者给图像添加一些噪音。由于图像的语义并没有发生实质性的变化,所以原始样本中相同的目标标签仍将适用于增强样本,例如,如果图像被标记为 “猫”,那么增强后的图像也将是 “猫”。

但是,从模型的角度来看,它就像是一个新的数据样本。这有助于你的模型泛化到更大范围的图像输入。

和图像一样,同样有几种技术可以增强音视频数据。这种增强既可以在生成频谱图之前对原始音频进行增强,也可以在已生成的频谱图上进行增强,后者通常会产生更好的效果。

频谱图增强

用于图像的普通变换并不适用于频谱图。例如,水平翻转或旋转会大大改变频谱图和它所代表的声音。

取而代之的是,我们使用了一种名为SpecAugment的方法,在这种方法中,我们屏蔽了频谱图的各个部分。具体如以下两种形式。

  • 频率掩码-通过在频谱图上添加水平条来随机屏蔽一系列连续频率。

  • 时间掩码-和频率掩码类似,但不同之处在于,我们使用竖线从频谱图中随机地遮挡了时间范围。
    1_1h_Zy3w2Qjk-VmHS0dYZQg
    (图片由作者提供)

  • 原始音频增强

有以下几个选项:

时移–将音频向左或向右随机移动。

  • 对于交通或海浪等这类没有特定顺序的声音,音频可能会环绕。
    1_8sPjEehpVvWnmDu-Vc8p1A
    时移增强 (图相由作者提供)

  • 或者,对于像人类语音这类很看重顺序的声音,间隙可以用静音来填补。

音高变化—随机修改部分声音的频率。
1__8-A1VTg7_ch0ZgcuktYfQ
通过音高移位增强(图像由作者提供)

时间拉伸—随机降低或加快声音的速度。
1_W4NMyqyUHSU-Ni6wDuq1WA
通过时间拉伸进行增强(图像由作者提供)

添加噪音—向声音添加一些随机值。
1_tDZ4rjMl_w8U_hBDO4e_Qw
通过添加噪声进行增强(图像由作者提供)

结论

现在我们已经学习了如何预处理和准备音频数据,以便输入到深度学习模型。这些方法通常适用于大多数音视频之音频应用程序。

现在,我们已经做好了有关深度学习应用程序的充足的准备,并将在下一篇文章中介绍有关“音视频分类”示例,之后我们会看到这些技术的实际操作。

原文作者 Ketan Doshi

原文链接 https://towardsdatascience.com/audio-deep-learning-made-simple-part-3-data-preparation-and-augmentation-24c6e1f6b52

推荐阅读
作者信息
AgoraTechnicalTeam
TA 暂未填写个人简介
文章
154
相关专栏
本专栏仅用于分享音视频相关的技术文章,与其他开发者和 Agora 研发团队交流、分享行业前沿技术、资讯。发帖前,请参考「社区发帖指南」,方便您更好的展示所发表的文章和内容。