使用 CNN 将固定长度的频谱图嵌入张量的方法

Way to embed fixed length spectograms to tensor with CNN perhaps

我正在开发一种方法来比较两个 频谱图 并对它们的相似性进行评分。 想了很久怎么办,怎么挑全model/approach。 我用来制作频谱图的音频剪辑是来自 android phone 的录音,我将它们从 .m4a 转换为 .wav,然后处理它们以绘制频谱图,全部在 python.

所有录音长度相同

这真的很有帮助,因为所有数据都可以用相同的维度表示 space。

我使用 Butterworth 带通滤波器对音频进行了过滤,由于其在信号的持续部分中表现稳定,因此常用于语音过滤。作为截止频率,我使用 400Hz3500Hz

完成此过程后,输出如下所示

我的第一个想法是在那个频谱图上使用 OpenCV 找到感兴趣的区域,所以我过滤颜色并得到这个输出,它可以粗略地用于获取信号的限制,但这会使每个剪辑的长度不同我可能不希望发生这种情况

现在开始回答我的问题——我正在考虑将这些频谱图嵌入到多维点中,并简单地将它们的准确性评分为到最准确样本的距离,这将是可视化的,这要归功于某些类群中的降维 space。但这似乎很简单,不涉及培训,因此很难验证。所以

是否有可能使用卷积神经网络,或像 CNN -> 延迟 NN 这样的网络组合来将这个频谱图嵌入到 multidim 点,从而可以不直接比较它们而是比较网络的输出?

如果我在这个问题中有任何遗漏,请发表评论,我会立即解决,非常感谢您抽出宝贵的时间。

约瑟夫·K.

编辑:

根据 Nikolay Shmyrev 的提示,我转而使用 Mel 频谱图:

这看起来更有希望,但我的问题仍然几乎相同,我可以使用预训练的 CNN 模型,如 VGG16 将这些频谱图嵌入到张量中,从而能够比较它们吗?如果是这样,怎么办?只需删除最后一个完全连接的层并将其展平吗?

你当然可以使用 CNN,tensorflow 有 special classes 和许多其他框架一样。您只需将图像转换为张量并应用网络,结果您将获得可以比较的低维向量。

你也可以训练自己的 CNN。

为了获得最佳精度,最好缩放较低的频率(底部)并压缩图片中的较高频率,因为较低的频率更重要。您可以阅读有关 Mel Scale 的更多信息

在我看来,根据 Yann Lecun,当您使用深度神经网络进行语音识别时,您有两个义务:

  • 你将需要大量训练数据

你可以尝试使用RNN on tensorflow,但你肯定需要大量训练数据。

如果您不想(或不能)找到或生成大量训练数据,那么您已经忘记了深度学习来解决这个问题...

在那种情况下(忘记深度学习)你可以看看如何Shazam work (based on fingerprint algorithm)