我的目的是创建一个模型来检测音频中的稀有声音
例如,2 小时的音频可能包含 2 或 3 个这种罕见事件我无法告诉你更多关于确切主题的信息,所以很抱歉(因为它是私有(private)的)。
我不得不处理几个包含一些罕见事件声音的音频文件,并用它创建了我自己的数据集。所有音频文件都已注释。
所以为了达到这个目的,我做了这个管道:
然后我标准化每个“图像”
并使用CNN的通用架构:
model = Sequential()
model.add(Conv2D(128, kernel_size=(5, 5),activation='sigmoid',input_shape=inputShape))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (5, 5), activation='sigmoid'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(128, (5, 5), activation='sigmoid'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (5, 5), activation='sigmoid'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))
每一步都应该告诉 10 秒的片段是否包含罕见的事件声音。所以基本上这是一个二元分类。问题:但是该模型的召回率和准确性非常差。我尝试过的任何事情都无法改变这一点。训练数据的准确率约为 60%,召回率约为 10%。我想改进这一点。
我尝试:我已经尝试过使用 vgg16 模型进行迁移学习,欠采样导致它不平衡和数据增强。我还更改了优化器,降低或提高学习率并使用不同的损失函数
任何想法将不胜感激。
最佳答案
根据我的说法,MFCC 特征本来是一种更好的方法,并且将它与序列网络而不是卷积网络一起使用会更好。对于序列,LSTM、RNN、Transformers 等序列网络会工作得更好。
但是,如果您仍想使用上述模型,则使用 5x5 过滤器,其效率将低于 2 层 3x3 过滤器。因此,减少这些以查看您的网络会发生什么。然后,您在整个网络中增加和减少了过滤器的数量,随着您的深入,过滤器的数量通常遵循增加的顺序。您已经在整个网络中使用了 sigmoid 激活,但从未这样做过。 sigmoid 激活应该只在预测层上。其余的应该有 ReLU 激活。将所有这些放在一起应该会对您的模型有很大帮助。
关于python-3.x - 使用梅尔谱图的罕见事件卷积神经网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63478509/