使用 CNN 将固定长度的频谱图嵌入到张量的方法
Posted
技术标签:
【中文标题】使用 CNN 将固定长度的频谱图嵌入到张量的方法【英文标题】:Way to embed fixed length spectograms to tensor with CNN perhaps 【发布时间】:2017-10-10 09:08:21 【问题描述】:我正在开发一种方法来比较两个 频谱图 并对它们的相似性进行评分。 我一直在思考如何去做,如何选择整个模型/方法。 我用来制作频谱图的音频剪辑是来自 android 手机的录音,我将它们从 .m4a 转换为 .wav,然后处理它们以绘制频谱图,全部在 python 中。
所有录音的长度相同
这真的很有帮助,因为所有数据都可以在相同的维度空间中表示。
我使用巴特沃斯带通滤波器对音频进行了滤波,该滤波器通常用于语音滤波,因为它在信号的持续部分具有稳定的行为。作为截止频率,我使用了400Hz
和3500Hz
在这个过程之后,输出看起来像这样
我的第一个想法是在该频谱图上使用 OpenCV 找到感兴趣的区域,因此我过滤了颜色并获得了这个输出,它可以粗略地用于获取信号的限制,但这会使每个剪辑的长度不同,而且我也许不希望这种情况发生
现在来回答我的问题 - 我正在考虑将这些频谱图嵌入到多维点中,并简单地将它们的准确度作为与最准确样本的距离进行评分,这要归功于某些类簇空间中的降维,这将是可视化的。但这似乎很简单,不涉及培训,因此难以验证。所以
是否有可能使用卷积神经网络,或者像 CNN 这样的网络组合 -> 延迟 NN 将此频谱图嵌入到多维点,从而可以不直接比较它们而是比较网络的输出?
如果我在这个问题中遗漏了什么,请发表评论,我会立即解决,非常感谢您的宝贵时间。
约瑟夫·K.
编辑:
收到 Nikolay Shmyrev 的提示后,我转而使用梅尔谱图:
这看起来更有希望,但我的问题几乎还是一样,我可以使用预训练的 CNN 模型(如 VGG16)将这些频谱图嵌入到张量中,从而能够比较它们吗?如果是这样,怎么办?只需移除最后一个全连接层并将其展平即可?
【问题讨论】:
【参考方案1】:在我看来,根据Yann Lecun,当您使用深度神经网络进行语音识别时,您有两个义务:
您需要使用Recurrent Neural Network才能拥有记忆能力(记忆对于语音识别非常重要...)和
您将需要大量训练数据你可以尝试使用RNN on tensorflow,但你肯定需要大量的训练数据。
如果您不想(或不能)找到或生成大量训练数据,那么您已经忘记了解决这个问题的深度学习...
在那种情况下(忘记深度学习)你可以看看Shazam work(基于fingerprint algorithm)是如何实现的
【讨论】:
看起来也可以使用 CNN 来完成这项工作,看看 [***.com/questions/22471072/…Hrant Khachatrian 说:“我们的准确率大约为 95%……”并给出一个链接到提供的数据集本次 TopCoder 比赛【参考方案2】:你当然可以使用 CNN,tensorflow 有 special classes ,例如许多其他框架。您只需将图像转换为张量并应用网络,即可获得可以比较的低维向量。
您也可以训练自己的 CNN。
为了获得最佳精度,最好在图片中缩放较低频率(底部)并压缩较高频率,因为较低频率更重要。您可以阅读Mel Scale 了解更多信息
【讨论】:
您好 Nikolay,感谢您的回复,我肯定会使用 Mel Scale 进一步过滤我的信号 - 谢谢。关于 CNN - 我很想为此训练我的 CNN,但我没有数千个训练样本,我只是想比较它们,我不知道如何创建具有音频样本准确性的数据集。关于 CNN2 - 您提到了来自 K. Simonyan 和 A. Zisserman 的 VGG16 VeryDeep ConvNet?您的意思是使用该预训练网络将频谱图嵌入到张量中? VGG 在 1000 个分类图像上进行训练...... 是的,你可以使用VGG16 经过图像训练的 VGG16 如何帮助我对音频张量(频谱图)的相似度进行评分?我的意思是,这听起来像是使用在海豚声音上训练的模型来对图像进行分类,我的意思是,由于所有音频样本的过程都是相同的,因此输出张量也将具有可比性,但随机加权的 CNN 不会产生相同的结果吗? VGG 仍然学习基本的图形基元,所以它应该会有所帮助。你也可以使用 CIFAR 网络,总比没有好。这称为“迁移学习”,类似于blog.keras.io/… 如果你愿意扩展你的答案,我可以给你这个赏金。以上是关于使用 CNN 将固定长度的频谱图嵌入到张量的方法的主要内容,如果未能解决你的问题,请参考以下文章