对 CNN 建模的理想方法是什么?

What would be the ideal approach to model a CNN?

我正在尝试检测音频文件中某种类型的声音。这些录音的长度可变,我想要检测的声音类型通常约为 1~5 秒长,我有数据集的标签(事件发生时的开始和偏移)。

我最初的方法是将其视为二元分类问题。我每半秒计算一次梅尔频谱图(例如)。如果在这 0.5 秒内没有事件,我会将该频谱图标记为 0,如果不是,则标记为 1。

我可以用什么方法来对抗它?我试图通过传递 0.1 而不是 1 来进行更改(假设前面的示例)。基本上标记图像中发生的事件的百分比:标记 [0~1] 而不是 {0,1}.

非常感谢。

我已经通过使用固定 input-size CNN 进行简单分类然后在扫描可变长度样本(1-5 秒声音片段)时多次调用 CNN 来解决此类问题。

例如,假设您创建了一个输入 0.2s 数据的 CNN,现在输入大小是固定的。您可以根据样本的中心点是否在您在问题中定义的 event 内来计算该 0.2s 的 {0, 1} 标签。您可以使用相同的方法尝试不同的输入大小。

现在您要求 CNN 在您的 1-5 秒样本中的每个点进行预测。首先,您向 CNN 传递前 0.2 秒的数据,然后前进一个或多个数据点(您的步长是 hyper-parameter,您可以调整)。假设您的步长为 0.1s,您的第二步将使用样本中 0.1s 到 0.3s 的数据生成 CNN 分类。继续,直到到达样本的末尾。您现在对样本进行了分类。原则上,您可以在每个数据点进行分类,因此您拥有与数据点一样多的预测。滚动中值滤波器(参见 pandas)是平滑预测的好方法。

这是一个非常简单的 CNN 设置。您还可以通过大量增加训练数据而受益,因为每个声音文件现在都是许多训练样本。使用此方法,您的预测分辨率非常精细。

这里有一篇更深入地描述该方法的论文(如果你付费的话,arXiv 上还有一个稍早的同名版本),从第 3 部分开始阅读:

https://academic.oup.com/mnras/article/476/1/1151/4828364

在那篇论文中,我们使用的是 1D 天文数据,其结构与 1D 音频数据基本相同,因此该技术将适用。在那篇论文中,我所做的不仅仅是分类,我使用相同的技术来定位零个或多个事件以及表征这些事件(我将从分类开始,以满足您的目的)。所以你可以看到这种方法扩展得很好。事实上,即使是在时间上部分重叠的多个事件也可以被有效地识别和提取。