audtorch

audtorch-系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

 

文章目录

  • 系列文章目录
  • 前言
  • 一、audtorch是什么?
  • 二、使用步骤
    • 1.引入库
    • 2.读入数据
  • 总结

 


前言

为了让自己成功攀登上语音处理深度学习的高山,特开此贴!


提示:以下是本篇文章正文内容,下面案例可供参考,全文译自audtorch文档,渣翻,轻怼!

一、audtorch是什么?

示例:audtorch是基于Pytorch框架的一种音频处理工具/库,该工具是为了解决音频处理任务而创建的。

二、GETTING STARTED

2.1 安装

Python3.5及3.5以上版本支持audtorch(最好是在虚拟环境中):

pip install audtorch

2.2 Usage

audtorch利用PyTorch实现了深度神经网络训练数据迭代过程的自动化。它提供了一组特征提取转换,可以在CPU上实时实现.

下面的示例创建一个语音样本的数据集,该数据集被切割到固定长度的10240个样本。此外,在数据加载过程中,它们还通过一个转换来扩展,该转换添加了来自另一个数据集的示例:

import sounddevice as sd
from audtorch import datasets, transforms
noise = datasets.WhiteNoise(duration=10240, sampling_rate=16000)
augment = transforms.Compose([transforms.RandomCrop(10240),transforms.RandomAdditiveMix(noise)])
data = datasets.LibriSpeech(root='~/LibriSpeech', sets='dev-clean',download=True, transform=augment)
signal, label = data[8]
sd.play(signal.transpose(), data.sampling_rate)

除了数据集和转换之外,该包还提供了标准的评估指标、取样器和必要的排序函数,用于训练音频任务的深层神经网络。

该处使用的url网络请求的数据。

三、TUTORIALS

3.1 Introduction

在本教程中,我们将看到如何使用 audtorch 来快速加快基于音频的深度学习应用程序的开发。

3.2 Preliminaries

  • PyTorch已经为数据集提供了一个接口,恰当地称为DataSet。
  • 然后,它使用DataLoader包装这个接口,它允许我们并行地遍历数据,并处理随机顺序。
  • 我们所需要做的就是实现DataSet接口,以获取模型和标签的输入。
  • 然而,对于初学者来说,很难看出如何从硬盘中的一堆文件转到机器学习模型中用作输入的特性。

在开始之前,您可能需要熟悉PyTorch的PyTorch’s data pipeline

3.3 Data loading

我们将从加载必要的数据开始。

Audtorch提供了越来越丰富的数据集。通常,使用此接口需要在硬盘上设置特定的数据集。其中的一些数据集可以从他们的原始来源下载。

在本教程中,我们将使用柏林情感语音数据库。为了方便起见,我们在一个子目录中包含了它的两个文件。我们建议您从其原始网站获取整个数据库。

%matplotlib inline
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import audtorch
import IPython.display as ipddataset = audtorch.datasets.EmoDB(root='data/emodb'
)
print(dataset)x, y = dataset[0]
print(x.shape)
print(y)ipd.Audio(x, rate=dataset.sampling_rate)

3.4 Feature extraction

特征提取是使用audtorch的第一个重要益处。

audtorch收集了越来越多的特征转换和数据预处理工具。这样,您就不需要太担心数据管道的准备工作了,但是您可以快速地从很酷的建模部分开始。

音频领域中使用的一种典型特征是频谱特征。音频信号是通过傅立叶变换来分析其频率内容的。

此外,由于内容随时间变化,我们通常使用短时傅立叶变换。这导致了所谓的频谱图的产生,它只不过是信号随时间变化的频率内容的图像表示。

我们假设读者已经熟悉这个术语。需要指出的重要一点是,audtorch的设计允许在典型的PyTorch工作流程中轻松使用这些功能。下面,我们看一个如何定义特征提取变换的例子:

spec = audtorch.transforms.Spectrogram(window_size=int(0.025 * dataset.sampling_rate),hop_size=int(0.010 * dataset.sampling_rate)
)
print(spec)

通过绘制频谱图,我们可以看到我们的信号随着时间的推移所包含的频率内容。

spectrogram = spec(x)
plt.imshow(spectrogram.squeeze())
plt.gca().invert_yaxis()

上图看起来大多是空的。这就是为什么我们有很多低功率的内容,这些内容主要由少数几个信号功率集中的频率组成。

通常通过计算谱图的对数来揭示更多的信息。这挤压了输入,并揭示了以前隐藏在其他频带的结构。顺便说一下,这种挤压降低了结果图像的动态范围,这使得我们的输入更适合深度神经网络训练。

Audtorch为numpy的日志提供了一个很好的包装器功能来简化事情。

lg = audtorch.transforms.Log()
print(lg)
log_spectrogram = lg(spectrogram)
plt.imshow(log_spectrogram.squeeze())
plt.gca().invert_yaxis()

这张图片显示,我们的信号比我们之前想象的要多得多。一般来说,我们建议您在开始建模之前,总是从初步的数据分析开始,以确保您对您的问题有正确的理解。

audtorch在这里帮助您,另一个有用的特性是它允许您在一个组合转换中堆叠多个转换。下面,我们将声谱图和对数变换叠加在一起,形成一个单一的对象。

t = audtorch.transforms.Compose([audtorch.transforms.Spectrogram(window_size=int(0.025 * 16000),hop_size=int(0.010 * 16000)),audtorch.transforms.Log()]
)
print(t)plt.imshow(t(x).squeeze())
plt.gca().invert_yaxis()

这种堆叠可以继续进行,如下面的标准化转换所示

t = audtorch.transforms.Compose([audtorch.transforms.Spectrogram(window_size=int(0.025 * 16000),hop_size=int(0.010 * 16000)),audtorch.transforms.Log(),audtorch.transforms.Standardize()]
)
print(t)plt.imshow(t(x).squeeze())
plt.gca().invert_yaxis()

 

3.5 Data augmentation 数据扩充

最近深度学习成功的最关键方面之一可以说是数据扩充。粗略地说,这意味着在不改变标签的情况下,通过创建与原始输入略有不同的副本来增加输入空间的采样。

在图像域中,人们使用各种转换,例如:

  • 加噪
  • 裁剪
  • 旋转
  • ..............

在音频领域,这并不容易。例如,旋转对于谱图特征没有任何意义,因为两个轴是不可互换的。一般来说,社区似乎使用以下转换:

  • 噪声
  • 时/频掩蔽
  • 音高移位(pitch shift)
  • .................

audtorch的一个重要特点是使这些转换在实践中非常容易使用。在下面的例子中,我们将使用RandomAdditiveMix。这种转换允许您随机混合音频样本和您选择的噪声数据集(例如像AudioSet这样的大型音频数据集)。

在这个例子中,我们将使用一个内置的数据集,WhiteNoise,它只是在每次调用时创建一个随机的白噪声信号。

random_mix = audtorch.transforms.RandomAdditiveMix(dataset=audtorch.datasets.WhiteNoise(sampling_rate=dataset.sampling_rate)
)
print(random_mix)

您可以看到,这种转换通过将这种“静态”电视噪声添加到我们的原始信号中,修改了音频信号本身。显然,说话者的情绪保持不变。这是一种非常实用的方法,可以在不改变标签的情况下增加您的训练集。

import IPython.display as ipd
ipd.Audio(random_mix(x), rate=dataset.sampling_rate)

3.6 Stacking data augmentation and feature extraction 叠加数据增强和特征提取

真正重要的是,audtorch允许我们在运行中同时进行数据增强和特征提取。

这在我们通过网络多次运行相同的训练样本的典型情况下非常有用(即,当我们针对多个时期进行训练时),并且希望每次稍微改变输入。我们所要做的就是将我们的数据增强转换叠加在我们的特征提取转换之上。

t = audtorch.transforms.Compose([audtorch.transforms.RandomAdditiveMix(dataset=audtorch.datasets.WhiteNoise(sampling_rate=dataset.sampling_rate),expand_method='multiple'),audtorch.transforms.Spectrogram(window_size=int(0.025 * dataset.sampling_rate),hop_size=int(0.010 * dataset.sampling_rate)),audtorch.transforms.Log(),audtorch.transforms.Standardize()]
)
print(t)

我们可以清楚地看到这个声谱图看起来比我们以前的声谱图更嘈杂。希望这足以让我们的分类器更好的泛化!

plt.imshow(t(x).squeeze())
plt.gca().invert_yaxis()

 


目录

audtorch-系列文章目录

文章目录

前言

一、audtorch是什么?

二、GETTING STARTED

2.1 安装

2.2 Usage

三、TUTORIALS

3.1 Introduction

3.2 Preliminaries

3.3 Data loading

3.4 Feature extraction

3.5 Data augmentation 数据扩充

3.6 Stacking data augmentation and feature extraction 叠加数据增强和特征提取

未完待续...


未完待续...

本文链接:https://my.lmcjl.com/post/986.html

展开阅读全文

4 评论

留下您的评论.