【论文笔记】语音情感识别之声谱图卷积方法
本文章主体基于PilgrimHui的《论文笔记:语音情感识别(二)声谱图+CRNN》,在原来基础上,补充了数据处理部分以及论文方法的一些细节,欢迎语音情感分析领域的同学一起讨论。
1. An Attention Pooling based Representation Learning Method for Speech Emotion Recognition(2018 InterSpeech)
(1)数据处理:训练集:给定一个句子,按2秒时间窗切分,窗移为1秒(overlap 1s),切分成多个segments。测试集:时间窗大小跟训练集一致,不同的是窗移为0.4秒(overlap 1.6s)。
(2)频谱提取:对每个segment,采用40毫秒Hamming窗,10ms窗移,得到一系列frames(举例大小199*D)。对每个frame进行DFT变换(参数NFFT=1600)得到每帧的频谱,将所有frames的频谱合并(多个一维向量纵向拼接得到矩阵)得到该segment的频谱图(N*(NFFT/2+1)=199*801)。截断频谱图(矩阵)的列(去除了频率较高部分),变成199*400的频谱图,转置后变成400*199,补零padding后变成400*200,水平方向表示时间,垂直方向表示频率。
(3)频谱处理:对于频谱矩阵预处理的做法是先归一化到[-1, 1],然后做一个u为256的u率压扩。u率压扩通过增大数值较小的元素,人为改变数据的分布,减少矩阵中最大值与最小值之间的差距,在信号处理领域认为可以改善信噪比率而不需要增添更多的数据,论文作者认为可以提高训练的稳定性。我在复现的时候,发现有些数据集进行归一化和u率压扩能提升性能,但有的数据集效果不佳。
(4)论文模型:论文的模型如下图,输入声谱图,CNN先用两个不同的卷积核分别提取时域特征和频域特征,concat后喂给后面的CNN,在最后一层使用attention pooling的技术,在IEMOCAP的四类情感上取得71.8% 的weighted accuracy (WA) 和68% 的unweighted accuracy (UA),WA就是平时说的准确率,而UA是求各类的准确率然后做平均 。比state-of-art多了3%的WA和4%的UA。
(5)模型训练与预测:训练阶段,每个segment对应一个label,作为一个sample输入模型训练,因此一句话将产生多个sample用于训练。预测阶段对每个segment进行预测,然后将一句话的所有segment预测概率取平均,得到一句话的预测标签。
(6)论文代码实现基于python_speech_feature库,其中有三种声谱图可以选择,振幅图,能量图,log能量图。PilgrimHui认为:debug的时候发现振幅和能量值的range还是挺大的,用log可以把range很大的值压到比较小的范围,所以我用的是log能量图。论文中提到对声谱图做一个预处理,说是可以让训练过程更加稳定,我在实现论文的时候有发现不加这个预处理结果会比较高。预处理的做法是先归一化到[-1, 1],然后做一个u为256的u率压扩,看到这里的256我估计论文是把声谱图直接保存成图像后做的归一化,而我是保存成声谱图矩阵来作为输入。
(7)PilgrimHui复现的经验:我在复现这篇论文模型的时候一直都达不到论文中的结果,反复看了一下,最后是注意到论文在attention pooling合并前对bottom-up attention的feature map先做了一个softmax,这个softmax我觉得很奇怪,把它去掉后发现准确率飙升,可以达到论文中的实验结果,甚至可以超出。可能具体实现细节上有一些其它的出入。
2. Efficient Emotion Recognition from Speech Using Deep Learning on Spectrograms(2017 InterSpeech)
(1)数据处理:跟上一篇论文类似,只是每个segment的大小为3秒,不过segments之间没有重合,训练集测试集处理方式一致。采用的也是Hamming窗,窗大小为20ms/40ms,窗移为10ms,DFT的参数length=800/1600(频率分辨率用10HZ/20HZ)。采用log-spectrum表示频谱。数据集用的也是IEMOCAP,16k采样率,四种情绪分类。
(2)论文模型:模型结构图如下图,输入的也是频谱图,实验对比了不同网络结构(全卷积网络,卷积+LSTM结构,attention结构),LSTM+CNN的方式效果最佳,attention机制并没有提升效果。
(3)模型训练与预测:训练阶段,每个segment对应一个label,作为一个sample输入模型训练,因此一句话将产生多个sample用于训练。预测阶段对每个segment进行预测,然后将一句话的所有segment预测概率取平均,得到一句话的预测标签。
(4)论文还介绍了一种两步预测的方法,先经过1个四分类器(4个情感),如果是中立类,则要另外通过3个二分类器来判定最后的情感。这么做可以提升UA,其背后直觉的解释是,一个非中立情感的大部分性质都是中立的,情感性质只占一小部分,所以对于中立类,需要进一步判定。
(5)调参经验:Hamming窗大小为40ms效果最佳,20ms性能略低0-2%;频率分辨率10HZ比20HZ性能略高1-3%。
3. Deep Spectrum Feature Representations for Speech Emotion Recognition(2018 ACM MM workshop——ASMMC-MMAC)
(1)数据处理:25ms的Hamming窗,每次移动10ms,在一个时间窗(frame)下,采用STFT变换得到频谱向量,将一句话的各frame的频谱向量按时间轴拼接、开平方(都为正值,失去相位信息),得到该句话的频谱图,之后采用40bands梅尔滤波器得到mel频谱图。
(2)输入的是梅尔尺度的声谱图(可以用librosa库调包得到),论文没有详细介绍输入部分和网络的衔接,CNN这边如何处理变长语音不明确,BLSTM则是把很多帧当成一个序列来输入。数据集用的也是IEMOCAP。
(3)论文也探讨了几种预处理和网络结构的实验影响。比较了声谱图特征和其它两个特征集(eGeMAPS和ComParE)的效果(喂给SVM),声谱图特征会稍微好一点。
(4)调参经验:Hamming窗大小为25ms效果最佳,优于15ms-200ms,对应窗移10ms;Mel bands设定在40最佳,优于30,60,80,100。因此最佳组合:window_size, window_shift,mel_bands = 25,10,40。
4. An Image-based Deep Spectrum Feature Representation for the Recognition of Emotional Speech(2017 ACM MM)
(1)数据处理:Hanning窗,窗大小为256个样本点,重合点128个即128的窗移。每个窗下的信号做FFT变换,求得log-powerspectrum(对数能量谱)。采用蓝、绿、黄三色填充得到大小不同的图片,放缩裁剪得到227*227大小的频谱图。
(2)声谱图输入caffe中预训练好的AlexNet训练,然后从第二个全连接层取出特征向量,跟两种传统特征集eGeMAPS,ComParE和BoAW(bag-of-audio-words,对LLDs特征的一种组织,LLDs指那些人工设计的低水平描述符)进行比较(喂给SVM),论文简单介绍了这三种特征。数据集用的是FAU-AIBO,有两种分类方式,一种是五分类,一种是二分类。
(3)做特征比较的时候使用了三个版本的FAU-AIBO数据比较,分别是clean,noisy和de-noised。其中de-noised是对noisy数据做了一个去噪,使用了一个三层LSTM模型,输入是100个Mel谱,模型在几个噪音版本的Audio Visual Interest Corpus上训练。
(4)比较发现声谱图提取的特征对于噪音数据具有更好的鲁棒性,同时可以看到de-noised系统的去噪并没有生效(和noisy版本的表现一样差)。
5. Emotion Recognition from Variable-Length Speech Segments Using Deep Learning on Spectrograms(2018 InterSpeech)
(1)数据处理:给定一个句子,采用40毫秒Hamming窗,10ms窗移,得到一系列frames(举例大小199*D)。对每个frame进行DFT变换(参数NFFT=1600)得到每帧的频谱,将所有frames的频谱合并(多个一维向量纵向拼接得到矩阵)得到该句子的频谱图(N*(NFFT/2+1)=199*801)。截断频谱图(矩阵)的列(去除了频率较高部分),变成199*400的频谱图,转置后变成400*199,补零padding后变成400*200,水平方向表示时间,垂直方向表示频率。跟论文1不同的是,没有预先切分等长的segment,导致得到的频谱图高度都是400,宽度N不定长。
(2)频谱处理:对训练集采用z normalization进行归一化,即0均值1标准差的归一化。
(3)论文模型:模型结构如下图所示。卷积学习空间信息,GRU学习时间信息,全连接层做最后的分类。注意:卷积只做一维卷积,即只做时域上的卷积(x轴)。
(4)通常的定长做法:为了使得模型能够输入定长样本,通常会把语音划分成等长样本(比如3秒)训练,然后在预测阶段也做分割,做多个预测来平均得分。
(5)变长做法:本文用了一种可以在预测阶段直接接受变长样本而不需要切割的方法,具体做法为:使时间长度类似的样本放在一个batch中然后pad到当前batch最长样本的长度。训练/预测的时候使用一个Mask矩阵(向量)来获得有效(valid)的输入区域,padding区域丢弃即可,需要注意的是max pooling的时候要处理好边界问题,对于跨边界数据把边缘值作为padding数据。
(6)训练的时候给不同长度的句子(loss)分配反比权重。另外为了处理IEMOCAP的不平衡问题给不同类别也分配反比权重,之前几篇在IEMOCAP上做实验的论文也有用到这个方法,还有使用重采样的方法。
6. Investigation on Joint Representation Learning for Robust Feature Extraction in Speech Emotion Recognition(2018 InterSpeech)
(1)数据处理:IEMOCAP数据,Hamming窗,25ms时间窗,10ms的窗移。每个窗下的信号采用1024个点的短时傅立叶变换STFT,之后40-bands的log-mel spectrogram。之后以30帧为单位,重叠10帧地移动,将一句话的频谱划分成多个segments频谱。每个segment长度315ms(研究标明长度超过250ms的segment能保留丰富的情绪信息{Emotion classification via utterance-level dynamics: A pattern-based approach to characterizing affective expressions.})。
(2)模型方法:结合了CNN和RNN和CRNN被广泛用于语音情感识别,然而这些模型只是简单地使用了声谱图的信息,并不能捕捉足够的情感特征。本文提出的HSF-CRNN模型结合了HSF手工特征,可以学习更好的情感特征,在2018 InterSpeech非典型情感挑战数据集 和 IEMOCAP 上做了实验,比baseline(CRNN)的效果要好。
(3)模型结构:模型如下两图,第一个是baseline,第二个是本文的模型。CRNN部分输入的是声谱图,而LLD(Low Level Descriptors)指的是基频,能量,过零率,MFCC,LPCC等这些特征。HSF(High level Statistics Functions)是在LLD基础上做统计得到的特征,描述了整个utterance的动态情感内容。
(4)还一种multi-CRNN的方法:采用两种不同长度的segment划分方法,可以让一句话得到两个频谱图序列。分别输入到两个CRNN,将最后的输出拼接融合,输出到softmax分类器。效果优于单个频谱图的CRNN,低于HSF-CRNN。
7. Using Regional Saliency for Speech Emotion Recognition(2017 ICASSP)
(1)数据处理:Hamming窗,25ms时间窗,15ms窗移(10ms重叠)得到多个frames。采用openSmile toolkit,对每个frame提取40-band的梅尔频谱,之后对一个人的所有特征采用均值为0标准差为1的归一化。数据集用的是IEMOCAP和MSP-IMPROV。
(2)数据增广:加速和减速语音信号,参数为0.9倍速和1.1倍速。数据增广后提升2-3%。
(3)将CNN应用于低水平的时域特征(本文用的是40维的log Mel filterbank)来识别情感显著区,这样就不需要在utterance水平上做统计运算。如下图所示,在时间方向上卷积,卷积核的大小在时间轴方向为s,频域方向跟频谱大小一致为d,一帧一帧地卷,然后用全局最大池化来捕捉时间上的重要区域。
(4)实验表明了论文的模型(使用区域显著信息)比“在utterance水平上做统计然后送入全连接”(使用统计特征)的效果好。实验还对比了和“流行的特征集InterSpeech09,InterSpeech13,GeMAPS和eGeMAPS用在SVM”的表现,有优有劣,相较于传统算法提升并不明显。不过论文的模型只使用了40个特征。另外还使用了速度增强来提高表现。
8. 3-D Convolutional Recurrent Neural Networks with Attention Model for Speech Emotion Recognition(2018 IEEE Signal Processing Letters)
(1)数据处理:3秒作为一个segment,每句话划分成多个segments。对每个segment加Hamming窗,25ms时间窗,10ms窗移(15ms重叠)得到多个frames。针对全局(非个人)的语音进行均值为0标准差为1的归一化。
(2)频谱处理:对语音信号DFT后的能量谱进行梅尔滤波然后取log,得到log-Mels,又计算log-Mels的deltas和delta-deltas特征,如下图所示,三种特征组成三个通道,横向上是梅尔滤波组,论文设定为40个,纵向上是时间,丢进3维卷积,池化,线性层,LSTM,然后做个attention,最后接全连接和softmax分类。数据集是IEMOCAP和EmoDB。
(3)LSTM的时间序列中,每个时间片是一个frame卷积后的特征。
(4)模型训练与预测:训练阶段,每个segment对应一个label,作为一个sample输入模型训练,因此一句话将产生多个sample用于训练。预测阶段对每个segment进行预测,然后将一句话的所有segment预测概率取max pooling,得到一句话的预测标签。
(5)论文做了消解(ablation)学习,发现6个卷积层在IEMOCAP上效果最好,5个卷积层在EmoDB上最好。另外对比了DNN-ELM和二维卷积,发现本文模型效果最好。
(6)代码开源:https://github.com/xuanjihe/speech-emotion-recognition
9. A Feature Fusion Method Based On Extreme Learning Machine For Speech Emotion Recognition(2018 ICASSP)
(1)数据处理:语音信号按窗大小265ms,窗移25ms切分成N段segments,每段采用短时傅里叶变换STFT采样256个点,窗大小为256个点,每次重叠50%的窗移。如此,每个segment得到一张频谱图。
(2)一句话的各segment通过启发性特征+CNN深度特征拼接,得到该segment的特征。然后求均值,得到这句话的特征。完了之后输入到ELM分类。本文在流行的“声谱图+CRNN”框架上做了改进,第一个改进是加入启发性特征,第二个改进是用ELM的方法替代BLSTM。
(3)启发性特征有384维,是2009 InterSpeech 挑战赛提议的统计特征,使用openSMILE获得。数据集为EmoDB
(4)BLSTM结构比较复杂,而ELM是一种单隐层网络的学习算法,它的训练更快。另外,BLSTM在数据不充足的时候训练效果并不理想。
(5)研究标明长度超过250ms的segment能保留丰富的情绪信息{Emotion classification via utterance-level dynamics: A pattern-based approach to characterizing affective expressions}。
随时获取华为云AI最新动态,欢迎关注华为云AI公众号: