第 6 章 声音之旅 声音之旅
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
Deep Learning 最成功的应用之一就是我们每天随身携带的东西。无论是 Siri 还是 Google Now,为这两个系统和亚马逊的 Alexa 提供动力的引擎都是神经网络。在本章中,我们将了解 PyTorch 的torchaudio 库。你将学习如何使用它来构建一个管道,利用基于卷积的模型对音频数据进行分类。之后,我将向你推荐一种不同的方法,它可以让你使用在图像中学到的一些技巧,并在 ESC-50 音频数据集上获得很高的准确率。
但首先,让我们来看看声音本身。声音是什么?它通常是如何以数据形式表示的?这是否能为我们提供一些线索,让我们知道应该使用哪种类型的神经网络从数据中获得洞察力?
声音
声音是通过空气振动产生的。我们听到的所有声音都是高压和低压的组合,我们通常用波形来表示,如图 6-1 所示。在这幅图中,原点上方的波为高压,下方的部分为低压。
图 6-1. 正弦波
图 6-2显示了一首完整歌曲更为复杂的波形。
图 6-2. 歌曲波形
在数字音频中,我们每秒对波形进行多次采样,传统上 CD 音质的采样次数为 44100 次,并存储每个采样点的波幅值。在时间t 上,我们存储的是单个值。这与图像略有不同,图像需要x和y 两个值来存储一个值(灰度图像)。如果我们在神经网络中使用卷积滤波器,我们需要的是一维滤波器,而不是之前用于图像的二维滤波器。
现在你对声音有了更多了解,让我们来看看我们使用的数据集,以便你能对它更熟悉一些。
ESC-50 数据集
环境声音分类(ESC) 数据集是一组现场录音,每段录音时长 5 秒,并被归入 50 个类别之一(例如,狗叫声、打鼾声、敲门声)。在本章的其余部分,我们将使用该数据集尝试两种音频分类方法,并探索使用torchaudio 来简化音频的加载和操作。
获取数据集
ESC-50 数据集是一组 WAV 文件。您可以通过克隆 Git 仓库下载:
git clone https://github.com/karoldvl/ESC-50
或者使用 curl 下载整个版本库:
curl https://github.com/karoldvl/ESC-50/archive/master.zip
所有 WAV 文件都存储在音频目录中,文件名如下:
1-100032-A-0.wav
我们关心文件名中的最后一个数字,因为它告诉我们这个声音片段被分配到了哪个类别。文件名的其他部分对我们来说并不重要,但大多与更大的 Freesound 数据集有关,ESC-50 就是从该数据集中提取的(但有一个例外,我很快就会提到)。如果您有兴趣了解更多信息,ESC-50 软件仓库中的README文档会提供更多细节。
现在我们已经下载了数据集,让我们来看看其中包含的一些声音。
在 Jupyter 中播放音频
如果你想真正听到来自 ESC-50 的声音,那么你可以使用 Jupyter 内置的音频播放器 ...