python-3.x - 使用梅尔谱图的罕见事件卷积神经网络

标签 python-3.x tensorflow audio conv-neural-network

我的目的是创建一个模型来检测音频中的稀有声音
例如,2 小时的音频可能包含 2 或 3 个这种罕见事件我无法告诉你更多关于确切主题的信息,所以很抱歉(因为它是私有(private)的)。
我不得不处理几个包含一些罕见事件声音的音频文件,并用它创建了我自己的数据集。所有音频文件都已注释。
所以为了达到这个目的,我做了这个管道:

  • 将所有音频文件切割成 10 秒的片段并对其进行注释
  • 将它们计算成梅尔谱图
  • 将它们保存到 numpy 文件中
  • 在模型
  • 之前重新加载它们

    然后我标准化每个“图像”
    并使用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/

    相关文章:

    java - 使用java运行python

    python-3.x - 在必要的预处理后,如何使用 nltk 文本分析库预测特定文本或文本组

    image - 将路径图像转换为新的 Tensor 为 [1, 224, 224, 3] 形状

    python - 在 TensorFlow 中使用循环填充矩阵

    java - 以 Java dos 风格播放声音频率

    python - Python中的视频和语音聊天可操作性

    android - 设置数组以在Android应用中保存声音

    python - python if/else 中的列表理解

    python - Tensorflow:损失值与精度不一致

    python - 添加按钮时 tk 窗口变小