异常声音检测中模型压缩算法研究*
2021-12-05冯凯强潘雨青徐小波
冯凯强 潘雨青 李 峰 徐小波
(江苏大学计算机科学与通信工程学院 镇江 212013)
1 引言
近年来,伴随着科学技术的发展,社会对安防监控系统的需求也在日益增加,然而目前视频监控是安防监控领域中采用的最普遍的方法,但是视频监控对设备性能的要求和通信的要求较高,且对外部环境比较依赖,比如:光照、监控的视野、遮挡等,另外随着监控已经慢慢进入到每个家庭的生活中,视频监控中个人隐私问题变得更加突出,异常声音检测可以很好地弥补目前监控系统中出现的问题,在原本以图像为主的监控领域中,增加了声音的属性,可以更好地提高整个安防系统的安全性,更高效地检测出异常事件。
在传统的音频分类模型中,多数采用DTW[17]、SVM[6]、HMM[10]等方法,自从2006年Hinton[5]发表了关于深层网络的一篇文章后,深度学习在视频和音频等领域有了重大的进步,目前在音频处理领域已经把深度学习作为主要的分类模型,例如语音识别[7~8]、说话人识别[9~10]等,深度学习在音视频领域取得的效果得益于复杂的网络结构和高性能的硬件设备,而物联网设备的计算能力和存储空间硬件参数无法满足深度学习运行标准,因此有必要在保证模型的准确度的同时,进一步缩减模型的大小,使能够满足物联网设备的性能要求,在边缘端进行异常声音识别。在特征选择方面不同的应用场景,也有不同的选择,常见的有MFCC[11]、语谱图[12]。从上述相关文献可以看出,深度学习在语音领域可以很好地应用,但针对异常声音的研究相对较少。针对模型参数较大的问题,常见的压缩算法是先训练一个复杂且功能强大的模型,然后再运用各种算法进行模型压缩,如权重阈值、哈希、哈夫曼编码等。
2 异常声音检测模型
异常声音检测模型如图1所示,主要包括三个阶段,分别是异常声音提取阶段、异常声音检测与异常声音训练阶段。声音信号经过拾音器后变为数字信号,经过端点检测、特征提取后,送入预先训练好的模型进行异常声音检测,下面将对关键的部分进行具体介绍。
图1 异常声音检测模型结构
2.1 预处理
预处理一般包含预加重、分帧、加窗以及端点检测等过程。
端点检测[17]是检测声音的起始事件和结束时间,获取异常声音处理的有效片段。考虑到异常声音的特点和端点检测的计算成本,采用短时幅度和短时过动态门限率[17]两个特征进行端点检测,算法流程图如表1所示。
短时幅度计算:
短时过动态门限率计算公式:
其中T为动态门限,反应了噪声的平均幅度水平,sgn为符号函数。
预加重是将X(n)通过一个高通滤波器,主要作用是提升信号中的高频部分,使得信号频谱变得更加平坦:
其中μ是在0.9~1.0之间,一般情况下取值为0.97。
在对信号截取后,容易存在信号的泄露问题,所以对声音信号进行截取时要进行加窗,可以使时域信号更好地满足周期性的要求。本模型中使用汉明窗[17]形式如下:
其中a的取值为0.46。
端点检测算法如下所示。
2.2 特征提取
目前针对异常声音的特征选择一般是参考语音识别技术领域的特征,常用的特征有梅尔频率倒谱系数(MFCC)、短时能量等,而异常声音的信号之间的区别较大,有相对独立的特征,语音识别领域的不再适合。下面将介绍两种常见的特征MFCC与声谱图。
MFCC是建立了声音频率与人耳听到的声音高低的非线性关系,用符合临界频带分布的一组滤波器序列来模拟人耳听觉的非线性,对声音信号的频谱进行滤波,该滤波器的中心频率是分布在等间距的Mel频率轴上,反映了音频短时幅度谱的特征,目前应用在声音的相关研究领域。MFCC[14]的提取方法是将预处理后的信号xt(τ)作频域变换后,将对能量谱依照Mel标度分布的三角滤波器组做卷积,再对滤波器组的输出向量做离散余弦变换(DCT),这样得到的前维向量称为MFCC。它与频率的关系可以用下式表示:
其中f为实际频率,单位是Hz。
声谱图分别从频率、时间和声压三个方向对声音信号进行描述的,在声谱图中利用颜色的灰度值来表示,为了加强声音信号的特征,通常采用声压值来表示。对异常声音信号进行短时傅里叶变换,傅里叶变换的长度取2Nf点[4],这样每一帧的信号的长度都是Nf:
其中x为信号的频谱值,YdB表示声压值。
2.3 卷积神经网络模型
卷积神经网络(CNN)可以在缺乏先验知识的前提下从数据中提取不同层次的抽象特征,与神经网络相比,卷积引入了局部连接,权值共享等策略,减少了权值的参数的规模,使得模型更加易于优化,同时也降低了过拟合的风险。
输入层:作为下一层卷积层的输入矩阵,一般来说输入层不算作模型的层数。
卷积层:卷积层用来提取输入的数据的特征,是卷积网络模型的重要组成部分。卷积核与输入的数据矩阵进行卷积操作,在卷积操作后,结果将会与偏置参数进行相加运算,最后通过非线性映射层中的激活函数,得到输出的特征图,如下式:
其中公式中Ki表示输入的数据J核第i个卷积核W进行卷积操作后得到的特征,ai是偏置参数,σ是激活函数。
池化层:池化层常用于特征降维,压缩数据和参数数量,可以有效防止模型过拟合,常用的有最大池化层和平均池化层,通常在声音领域中一般使用最大池化层。
全连接层:在最后一个池化层后紧接的是全连接层,在卷积神经网络中一般至少包含一个全连接层,全连接层把不同网络层的节点全部连接,对卷积和池化后的特征进行整合。
输出层:输出层在网络的最后一层,用来对整个模型结果作判定,也就是输出结果。
本文参考文献[2]中的卷积模型作为基线模型,在此基础上进行优化,模型结构如下,主要使用3*3卷积核,模型总共有8层网络,分别是输入层,隐藏层,输出层。使用声谱图作为输入,调整声谱图大小为512×256,使用BN归一化[9],激活函数使用ReLu[8],权重是使用He初始化[16]的方法进行初始化,步长使用2*2,最大池化层为2,最后使用softmax分类器进行分类。在前两层进行了不同卷积核的实验,发现较大的卷积核对整体的分类性能更好。因此使用7*7和5*5卷积核,模型大小为
254MB。
3 模型压缩
卷积模型中的大量冗余参数,往往造成了设备的资源的浪费[3]。随着物联网的发展,为了实现模型部署在移动设备或嵌入式设备上,很多学者已经开始研究模型压缩的方向,在保证精度的前提下,不断降低模型的大小,因此本节将对模型压缩算法进行研究。常见模型压缩一般分为两类,第一类是先建立一个收敛的深度复杂网络,再利用量化、裁剪等手段进行模型压缩[13],另一类就是在构建模型的时候根据经验,设计适合嵌入式设备的网络模型结构[1]。
目前网络裁剪已经被广泛应用于卷积的网络模型压缩,通过删除一些不必要的节点,不仅可以降低模型的大小,还可以防止过拟合,因此本节将重点研究裁剪算法。
在卷积模型中,隐层节点的数量有着很大的缩减空间,所以可以预先训练好一个较复杂的网络模型,然后再进行裁剪,通过重复的训练,确保模型变小的同时保证性能稳定。
因为输入层和输出层的节点都有相对应的特征或者建模单元,所以本节提出了一种通过计算节点输入输出权重之和的裁剪算法。节点裁剪仅限于对隐藏节点的裁剪,标准差值[15]可以作为卷积层中滤波器权重的重要程度,标准差值较小的滤波器,再用作特征提取时作用很小,在裁剪之前需要给出判断节点重要性的标准。
输入权重标准差值:
对于第i层的节点m,它的输入权值是与其i-1层所有Ni-1个节点连接,所以它的输入权值标准差定义为
输出权重标准差值:
对于第i层的节点m,它的输出权值是与其i+1层所有Ni+1个节点连接,所以它的输出权值标准差定义为
在裁剪中,使用输入和输出的和作为判断第i层第m个节点的重要依据:
对于一个已经收敛的卷积模型,现根据式(11)计算每个隐层中节点的重要性,然后在每层中,对该层包含节点进行排序,裁剪掉一些相对不重要的节点。直接裁剪掉一些节点的话,可能会对性能造成明显的损失,即使在通过长时间重新训练,与原始模型的性能依然有差距,因此本文采用一种迭代式裁剪方法:
1)首先是训练一个网络模型直至收敛。
2)根据式(11)计算模型每个隐层的节点的重要性。
3)在每个隐层中,根据第2)步计算得到的重要性对节点排序,并将一小部分重要性最低的节点裁剪。
4)对第3)步裁剪后的模型进行重新训练,直到再次收敛。
5)不断重复2)~4)步,直到参数达到预先设定的规模。
迭代式裁剪依次裁剪隐层中节点,裁剪后再进行重新训练,根据验证集上的准确率来判断节点的敏感度,若准确率下降的较多,则说明裁剪的节点敏感度较大。本节的裁剪算法没有采用根据阈值大小进行直接裁剪节点,因为如果裁剪该层的节点都小于阈值,则会对整个网络的结构造成破坏,同时在相关的裁剪算法中很难确定最终的阈值。根据卷积层中滤波器的敏感程度,分别设置了不同的裁剪比,确保不会因裁剪过多,而破坏模型结果。
4 实验结果及分析
4.1 实验数据
本文根据事件的危险程,分别从影视作品、FreeSound、UrbanSound8K等中整理了包括枪声、玻璃破碎声、尖叫声、爆炸声等四类声音。每类声音数据样本分别为1500个,总共包含6000个样本。
4.2 数据增强
数据增强可以改善数据资源匮乏的现象,在一定程度上减少泛化误差,防止由于数据集更加多样化而导致的过度拟合,并且应该针对训练数据中未充分表示或缺失的测试集属性。其主要的思想确保在增强前后的实际含义没有变化,对于谱图域,必须仔细选择数据集增强。常见的几何变换如水平翻转、缩放、裁剪或剪切都不适合,因为它们可能会掩盖原始信号。本文采用三种增强方法:频率轴上垂直移动5%距离、时间轴上水平移动50%距离和添加随机高斯噪声。垂直或水平滚动输入图像将像素值移动到所需的方向,从而在将边界外像素添加到相反的图像边界时保留完整的信息。
4.3 实验结果及分析
为了确定本文提出的异常声音检测模型特征,针对不同声音特征进行了实验,实验采用本文2.3节中的模型作为分类器,才采用原始信号、MFCC、声谱图,实验结果如表2所示。
表2 不同特征对比实验结果(%)
从表2中可以看出,使用原始信号作为输入的特征,识别率明显低于MFCC与声谱图,因为原始信号在时域不能很好地表示声音的特征。在声谱图在计算量与准确度方面优于MFCC,更加适合在嵌入式设备上使用,因此本文使用声谱图作为异常声音检测模型的特征。
为了验证本文卷积模型的有效性,本文采用不同的分类模型进行对别实验,分别用HMM、SVM以及本文的CNN模型进行异常声音检测实验。从表3中可以看出,本文使用的模型检测效果优于传统的模型,实验结果如表3所示。
表3 不同模型对比实验平均结果(%)
表4 是使用本文提出的裁剪算法进行实验结果,在裁剪的过程中,通过对比不同的裁剪算法,以及不同的裁剪别,来验证本文提出算法的有效性。每次迭代都将模型中每个隐层中最低p%个的节点裁剪掉,其中裁剪量p%分别取{20,40,60},可以看出,当裁剪20%的时候,可以使裁剪性能最佳,当高于40%的时候,准确率开始下降,实验的结果如表4所示。
表4 不同裁剪算法实验结果(%)
5 结语
本文确定了一种异常声音检测模型方案,用于解决传统方法检测准确率不高的问题,针对其中卷积模型参数较大问题,提出一种模型压缩算法,可以根据不同的实际设备选择不同的压缩标准,通过实验结果表明,本文的压缩算法可以一定程度上降低模型的大小。本文后续工作将针对模型压缩的其他方法进一步研究。