使用 librosa 进行音频分类的 MFCC 特征描述符

Posted

技术标签:

【中文标题】使用 librosa 进行音频分类的 MFCC 特征描述符【英文标题】:MFCC feature descriptors for audio classification using librosa 【发布时间】:2014-11-17 06:50:28 【问题描述】:

我正在尝试获取音频文件的单向量特征表示,以用于机器学习任务(特别是使用神经网络进行分类)。我有计算机视觉和自然语言处理方面的经验,但我需要一些帮助来加快处理音频文件的速度。

目前有多种音频文件的特征描述符,但似乎 MFCC 最常用于音频分类任务。我的问题是:如何将 MFCC 表示为一个音频文件,它通常是一个矩阵(可能是系数),并将其转换为单个特征向量?我目前正在为此使用librosa。

我有一堆音频文件,但它们的形状各不相同:

for filename in os.listdir('data'):
    y, sr = librosa.load('data/' + filename)
    print filename, librosa.feature.mfcc(y=y, sr=sr).shape

213493.ogg (20, 2375)
120093.ogg (20, 7506)
174576.ogg (20, 2482)
194439.ogg (20, 14)
107936.ogg (20, 2259)

作为 CV 人员,我会做的是通过 k-means 量化这些系数,然后使用 scipy.cluster.vq 之类的东西来获得形状相同的向量,我可以将其用作我的 NN 的输入。这也是您在音频案例中会做的事情,还是有不同/更好的方法来解决这个问题?

【问题讨论】:

【参考方案1】:

查看scikits.talkbox。它具有多种功能,可帮助您从音频文件生成 MFCC。具体来说,您会想做这样的事情来生成 MFCC。

import numpy as np
import scipy.io.wavfile
from scikits.talkbox.features import mfcc

sample_rate, X = scipy.io.wavfile.read("path/to/audio_file")
ceps, mspec, spec = mfcc(X)
np.save("cache_file_name", ceps) # cache results so that ML becomes fast

然后在进行 ML 时,执行以下操作:

X = []
ceps = np.load("cache_file_name")
num_ceps = len(ceps)
X.append(np.mean(ceps[int(num_ceps / 10):int(num_ceps * 9 / 10)], axis=0))
Vx = np.array(X)
# use Vx as input values vector for neural net, k-means, etc

我在构建音频流派分类工具 (genreXpose) 时使用了这些东西。

PS:我使用的一个方便的音频转换工具是PyDub

【讨论】:

按照我的理解,mfcc 特征是一个二维数组,形式为 (numFrames, numMFCCoeffiecients)。也就是说,每一帧都会产生一个 MFCC 列表。 ceps 变量似乎只是一维系数数组。为什么会这样?另外 X.append 行的目的是什么?我真的对此很好奇,如果能对此事有所了解,我将不胜感激【参考方案2】:

这真的取决于任务。我会尝试 kmeans 等,但在很多情况下这可能没有帮助。

有几个使用dynamic time warping with librosa 的好例子。

还有使用已知形状的滑动窗口的想法,也可能很好。然后你可以考虑之前的预测和转移概率矩阵。

【讨论】:

【参考方案3】:

通常,在音频分类文献中,所有音频文件都会根据分类任务被截断为相同的长度(即,我正在研究跌倒检测设备,所以我知道音频文件的持续时间不应超过 1 秒,因为这是跌倒事件的预期持续时间)。

然后,对于每个音频文件,您可以提取每个帧的 MFCC 系数并将它们堆叠在一起,从而为给定的音频文件生成 MFCC 矩阵。由于每个音频文件都具有相同的长度,并且我们假设所有帧都包含相同数量的样本,因此所有矩阵将具有相同的大小。

【讨论】:

你能分享你的代码吗?我正在做一个类似的任务。想了解方法【参考方案4】:

您可以使用 https://github.com/jsingh811/pyAudioProcessing 之类的库来获取您的 mfcc 功能,然后使用一个命令完成分类。 它计算 mfcc,将其转换为每个音频的一个特征向量,并提供从不同的 sklearn 分类器中进行选择以对 mfcc 特征进行分类的选项。

【讨论】:

能否请您提供一个简短的示例来演示如何使用该库?

以上是关于使用 librosa 进行音频分类的 MFCC 特征描述符的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Weka 中使用 MFCC 进行音频分类?

Librosa MFCC 特征提取

人工智能下的音频还能这样玩!!!!

Python 音频信号分类 MFCC 特征神经网络

音频特征:mfcc提取

执行命令提取mfcc后返回的是什么?