如何将音频数据输入深度学习算法?
Posted
技术标签:
【中文标题】如何将音频数据输入深度学习算法?【英文标题】:How to input audio data into deep learning algorithm? 【发布时间】:2020-02-07 11:30:34 【问题描述】:我是深度学习的新手,我的目标是使用 GAN(生成对抗网络)来识别情感语音。我只知道图像作为大多数深度学习算法的输入,比如 GAN。但我很好奇除了使用频谱图的图像作为输入之外,音频数据如何作为输入。另外,如果您能用外行的方式解释一下,我将不胜感激。
【问题讨论】:
【参考方案1】:音频数据可以以 numpy 数组的形式表示,但在开始之前,您必须了解音频的真正含义。如果您考虑一下音频的外观,它只不过是一种类似波形的数据格式,其中音频的幅度随时间而变化。
假设我们的音频在时域中表示,我们可以每半秒(任意)提取值。这称为采样率。 由于采样率较低,将数据转换为频域可以减少计算量。
现在,让我们加载数据。我们将使用一个名为 librosa
的库,可以使用 pip 安装它。
data, sampling_rate = librosa.load('audio.wav')
现在,您拥有数据和采样率。我们现在可以绘制波形了。
librosa.display.waveplot(data, sr=sampling_rate)
现在,您有了 numpy 数组形式的音频数据。您现在可以研究数据的特征并提取您感兴趣的特征来训练您的模型。
【讨论】:
【参考方案2】:进一步了解 Ayush 的讨论,有关在音频数据中处理不同时间尺度的大量数据的挑战和解决方法的信息,我建议在 WaveNet 上发这篇文章:https://deepmind.com/blog/article/wavenet-generative-model-raw-audio
之后听起来你想进行分类。在这种情况下,单独的 GAN 是不合适的。如果您有大量数据,您可以使用直接 LSTM(或其他类型的 RNN),它旨在对时间序列进行建模,或者您可以获取设定大小的输入块并使用一维 CNN(类似于 WaveNet)。如果您有大量来自相同或相似领域的未标记数据和有限的训练数据,您可以使用 GAN 来学习生成新样本,然后使用 GAN 的鉴别器作为 CNN 分类器的预训练权重。
【讨论】:
【参考方案3】:由于您尝试使用深度学习执行语音情感识别 (SER),因此您可以选择循环架构(LSTM 或 GRU)或 CNN 和循环网络架构 (CRNN) 的组合来代替 GAN,因为 GAN 很复杂并且难以训练。
在 CRNN 中,CNN 层将提取不同细节和复杂性的特征,而循环层将处理时间依赖性。然后,您最终可以使用全连接层进行回归或分类输出,具体取决于您的输出标签是离散的(用于愤怒、悲伤、中性等类别的情绪)还是连续的(唤醒和效价空间)。
关于输入的选择,您可以使用频谱图输入 (2D) 或原始语音信号 (1D) 作为输入。对于频谱图输入,您必须使用 2D CNN,而对于原始语音信号,您可以使用 1D CNN。梅尔尺度频谱图通常比线性频谱图更受欢迎,因为我们的耳朵听到的频率是对数尺度而不是线性的。
我使用了 CRNN 架构来估计会话语音引起的语言冲突程度。尽管它不是 SER,但它是一个非常相似的任务。 您可以在论文中找到更多详细信息
http://www.eecs.qmul.ac.uk/~andrea/papers/2019_SPL_ConflictNET_Rajan_Brutti_Cavallaro.pdf
另外,请查看我的 github 代码以获取同一篇论文
https://github.com/smartcameras/ConflictNET
以及我用 Python 复制其代码的 SER 论文
https://github.com/vandana-rajan/1D-Speech-Emotion-Recognition
最后,正如 Ayush 提到的,Librosa 是用于音频处理的最佳 Python 库之一。您可以在 Librosa 中创建频谱图。
【讨论】:
以上是关于如何将音频数据输入深度学习算法?的主要内容,如果未能解决你的问题,请参考以下文章