python-3.x - 哪个声谱图最能代表基于 CNN 模型的音频文件的特征?

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

我希望了解用于音频分析的各种频谱图。我想将音频文件转换为 10 秒的 block ,为每个 block 生成频谱图,并使用 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 训练的音频文件的特征?我使用了线性,但一些音频文件的线性频谱图似乎是相同的

最佳答案

要补充已说明的内容,我建议阅读 A Comparison of Audio Signal Preprocessing Methods for Deep Neural Networks on Music Tagging作者:Keunwoo Choi、György Fazekas、Kyunghyun Cho 和 Mark Sandler。

对于他们的数据,他们在简单的 STFT 和梅尔光谱图之间实现了几乎相同的分类精度。因此,如果您不介意预处理,则梅尔谱图似乎是降维的明显赢家。正如 jonner 提到的,作者还发现对数缩放(本质上是将幅度转换为分贝刻度)可以提高准确性。您可以使用 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)

至于数据库缩放后的标准化,这似乎取决于您的数据。从上面的论文中,作者发现对数据使用各种标准化技术几乎没有差异。

最后值得一提的是一种称为每 channel 能量归一化的新方法。我建议阅读Per-Channel Energy Normalization: Why and How作者:文森特·洛斯坦伦、贾斯汀·萨拉蒙、马克·卡特赖特、布莱恩·麦克菲 安德鲁·法恩斯沃斯、史蒂夫·凯林和胡安·巴勃罗·贝洛。不幸的是,有一些参数需要根据数据进行调整,但在许多情况下似乎比 logmelspectrograms 做得更好或更好。您可以在 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如果您有兴趣,可以帮助您入门。

关于python-3.x - 哪个声谱图最能代表基于 CNN 模型的音频文件的特征?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55513652/

相关文章:

javascript - Web Audio API 分析器节点 getByteFrequencyData 返回空白数组

javascript - Facebook 的视频通话如何运作

python - 如何将这个列表理解扩展到 for 循环,以理解这个递归函数?

python - 循环 scikit-learn 机器学习数据集

python - 一副纸牌的随机迭代

opencv - 计算图片与其草图的相似度

MATLAB fitcSVM 权重向量

Java Sound播放一次然后不再播放

python - 老虎机程序中每次循环都会中断

python - 如何从描述符将属性请求委托(delegate)给 MRO 链