哪个频谱图最能代表基于CNN的模型的音频文件的功能?

时间:2019-04-04 10:28:27

标签: python-3.x machine-learning audio spectrogram librosa

我希望了解用于音频分析的各种频谱图。我想将音频文件转换为10秒的块,为每个块生成频谱图,然后使用CNN模型在这些图像之上进行训练,以查看它们的好坏。

我看了线性,对数,梅尔等,并在某处阅读了基于梅尔的频谱图最适合用于此情况。但是没有适当的可验证信息。我使用了以下简单的代码来生成梅尔频谱图。

y,sr= librosa.core.load(r'C:\Users\Tej\Desktop\NoiseWork\NoiseOnly\song.wav')
S = librosa.feature.melspectrogram(y=y, sr=sr)
librosa.display.specshow(librosa.power_to_db(S, ref=np.max))

我的问题是,哪个频谱图最能代表使用CNN训练的音频文件的功能?我使用了线性,但有些音频文件的线性频谱图似乎是相同的

2 个答案:

答案 0 :(得分:1)

对数缩放的梅尔谱图是当前与卷积神经网络一起使用的“标准”。这是2015-2018年间音频事件检测和音频场景分类文献中最常用的。

为了更恒定地改变幅度,通常应用归一化。要么是整个剪辑,要么是对窗口进行分类。通常,均值/标准差归一化工作正常。

但是从CNN的角度来看,不同光谱仪之间的差异相对较小。因此,如果两个或多个频谱图基本相同,这不太可能解决您的问题。

答案 1 :(得分:0)

要补充说明,我建议您仔细阅读A Comparison of Audio Signal Preprocessing Methods for Deep Neural Networks on Music Tagging,其中包括Keewoo Choi,GyörgyFazekas,Kyunghyun Cho和Mark Sandler。

对于他们的数据,他们在简单的STFT和质谱图之间实现了几乎相同的分类精度。因此,如果您不介意进行预处理,则质谱图显然是缩小尺寸的明显赢家。作者还发现,正如jonner所提到的,对数缩放(本质上将幅度转换为db缩放)提高了准确性。您可以使用Librosa轻松地做到这一点(使用您的代码),如下所示:

y,sr= librosa.core.load(r'C:\Users\Tej\Desktop\NoiseWork\NoiseOnly\song.wav')
S = librosa.feature.melspectrogram(y=y, sr=sr)
S_db = librosa.core.power_to_db(S)

对于db缩放后的规范化,似乎取决于您的数据命中或未命中。从上面的论文中,作者发现使用各种标准化技术对其数据几乎没有区别。

最后要提到的是一种称为“每通道能量归一化”的新方法。我建议阅读Per-Channel Energy Normalization: Why and How,作者是Vincent Lostanlen,Justin Salamon,Mark Cartwright,Brian McFee, Andrew Farnsworth,Steve Kelling和Juan Pablo Bello。不幸的是,有些参数需要根据数据进行调整,但在许多情况下似乎要好于对数声谱图。您可以像这样在Librosa中实现它:

y,sr= librosa.core.load(r'C:\Users\Tej\Desktop\NoiseWork\NoiseOnly\song.wav')
S = librosa.feature.melspectrogram(y=y, sr=sr)
S_pcen = librosa.pcen(S)

尽管,就像我提到的那样,在pcen中有一些参数需要调整!如果您有兴趣,可以通过Librosa's documentation on PCEN入门。