我正在做一个个人项目,目的是为了学习Keras和机器学习。首先,我想对声音是拍手还是踩脚进行分类。
我正在使用触发声音并在20usec采样声音的微控制器。然后微控制器会将原始的ADC数据发送到PC进行Python处理。我目前正在取1000点,并使用numpy获取FFT(使用rfft并获取其绝对值)。
现在,我想将捕获的FFT信号拍手或踩踏作为训练数据,以使用神经网络对其进行分类。我整天都在研究此问题,有些文章说应该使用卷积神经网络,而有些文章应该使用递归神经网络。
我看了卷积神经网络,它提出了另一个问题,是否应该使用Keras的1-D或2-D转换。
答案 0 :(得分:1)
您需要处理FFT信号以区分声音是拍手声还是脚踩声。
对于卷积神经网络(CNN):
CNN可以从固定长度的输入中提取特征。带有Max-Pooling的一维CNN在信号数据上效果最好(我个人将它们用于加速度计数据上。)
如果您的输入是固定长度并且具有重要功能,则可以使用它们。
对于递归神经网络:
当信号具有时间特征时应使用。
可以以这种方式考虑时态特征(例如),以便识别拍手。拍手立即发出高声,然后发出轻声(拍手结束时)。 RNN将按顺序学习这两个功能(如上所述)。拍手也是一个顺序动作(它由依次的各种活动组成)。
如果RNN和LSTM具有出色的功能,它们可能是最佳选择。
混合Conv LSTM:
此NN是CNN和LSTM(RNN)的混合体。他们使用CNN进行特征提取,然后LSTM学习此序列。 CNN提取的特征还包含时间特征。
如果您使用Keras,这可能非常容易。
提示:
在执行音频分类时,我还将建议使用MFCC提取特征。
我认为您应该尝试所有3种方法,然后看看哪种方法最合适。 RNN和ConvLSTM很可能会适合您的用例。
希望有帮助。
答案 1 :(得分:1)
由于在这种情况下,训练/测试系统不是嵌入式系统,因此请查看VGGish(https://github.com/tensorflow/models/tree/master/research/audioset-也指包括拍手的论文和数据集),它使用以下内容来计算集合功能:
VGGish经过训练,具有如下音频功能:
注意-拍手已被涵盖(https://research.google.com/audioset/dataset/clapping.html)