使用 Keras 进行音频分类:人声的存在
Posted
技术标签:
【中文标题】使用 Keras 进行音频分类:人声的存在【英文标题】:Audio classification with Keras: presence of human voice 【发布时间】:2018-03-03 10:00:41 【问题描述】:我想使用 Keras 创建一个音频分类系统,它可以简单地确定给定样本是否包含人声。没有其他的。这将是我的第一次机器学习尝试。
此音频预处理器存在。它声称没有完成,但已经分叉了几次:
https://github.com/drscotthawley/audio-classifier-keras-cnn
我不明白这个是如何工作的,但我准备试一试:
https://github.com/keunwoochoi/kapre
但是假设我要完成其中一个工作,那么其余的过程会类似于图像分类吗?基本上,我从来没有完全理解什么时候使用 Softmax,什么时候使用 ReLu。一旦我将数据映射为张量,这对声音和图像是否相似?
【问题讨论】:
我还在开发一个应用程序来确定给定样本是否包含人声(而不是任何其他可能的声音)。您使用 Keras 取得了良好的效果吗? @eje211 你能分享你的进度代码吗?我正在研究类似的问题。如果我在狗吠上训练模型,我希望模型能够识别出狗吠在测试文件中的所有位置。 我在以前的工作中做过这个。我不再有权访问代码。对不起。但我的雇主对我追求这个并不感兴趣,所以我没有走得太远。 【参考方案1】:通常将音频预处理为频谱图很有用:
将此作为输入,您可以使用经典的图像分类方法(如卷积神经网络)。在您的情况下,您可以将输入音频划分为大约 20ms-100ms 的帧(取决于您需要的时间分辨率)并将这些帧转换为频谱图。卷积网络也可以与循环单元结合使用,以考虑更大的时间上下文。
还可以使用一维卷积在原始波形上训练神经网络。然而研究表明,使用频率变换的预处理方法通常可以取得更好的结果。
【讨论】:
【参考方案2】:声音可以被视为一维图像,并与一维卷积一起使用。 通常,扩张卷积可能会做得很好,请参阅Wave Nets
声音也可以被视为序列并与 RNN 层一起工作(但可能它们的数据量太大)
对于您的情况,您只需要一个输出,最后激活 'sigmoid'
和 'binary_crossentropy'
损失。
何时使用“softmax”?
softmax 函数适用于只需要一个类作为结果的多类问题(不是您的情况)。 softmax 函数的所有结果总和为 1。它旨在类似于每个类的概率。
它主要用在最后一层,因为你只得到类作为最终结果。
这适用于只有一个类是正确的的情况。在这种情况下,它与损失categorical_crossentropy
相得益彰。
模型中间的 Relu 和其他激活
这些都不是很规范。有很多可能性。我经常在图像卷积模型中看到 relu。
需要了解的重要事项是它们的“范围”。他们的输出有什么限制?
Sigmoid:从 0 到 1 -- 在模型结束时,这将是您的存在/不存在分类的最佳选择。也适用于需要许多可能的类的模型。 Tanh:从 -1 到 1 Relu:从 0 到无限(它只是削减负值) Softmax:从 0 到 1,但要确保所有值的总和为 1。适用于在许多类中只需要 1 个类的模型的末尾。【讨论】:
谢谢!我会开始的。我想我明白了。我的最终结果将给出人声的 0 到某个最大值的可能性。 Sigmoid 将从 0 标准化为 1。然后,由我来找出 0 和 1 之间的哪个值真正意味着存在人声。 通常,您创建“真实标签”或从某些数据集中加载它们。所有带有人声的样本都归为 1,所有没有人声的样本都归为 0。然后你用这些数据进行训练,你的模型会带来某种存在声音的概率。粗略地说,当你的模型预测接近零的东西时,它没有声音,而当它预测接近 1 的东西时,它就有声音。如果你的模型预测了中间的东西,那么你的模型就不是很确定......以上是关于使用 Keras 进行音频分类:人声的存在的主要内容,如果未能解决你的问题,请参考以下文章