基于深度学习的语音情绪识别 Speech emotion recognition based on Deep Learning(二)
基于深度学习的语音情绪识别 Speech emotion recognition based on Deep Learning前言数据预处理IEMOCAP读取数据集数据集的特殊处理模型处理训练结果前言基于深度学习的语音情绪识别一因为法一遇到点困难,先用较为简单的方法二来实现,之后逐步更改.数据预处理IEMOCAP我们使用的是IEMOCAP数据集.我之后会做一个IEMOCAP数据集详...
基于深度学习的语音情绪识别 Speech emotion recognition based on Deep Learning
前言
- 因为法一遇到点困难,先用较为简单的方法二来实现,之后逐步更改.
数据预处理
IEMOCAP
我们使用的是IEMOCAP数据集.我之后会做一个IEMOCAP数据集详解,因为目前没有找到很合适的数据集介绍.官方文档里也没有看到…
读取数据集
- 对EmoEvaluadtion中的txt文件进行读取,导入到DataFrame中.我们用df来表示,对应列如下:
'start', 'end', 'file', 'emotion', 'activation', 'valence', 'dominance', 'session', 'script_impro', 'gender', 'utterance'
file:文件名 Ses01M_impro06_F000- emotion: 情感 用英文简写表示,共9种情绪 neu
anger, happiness, excitement, sadness, frustration, fear, surprise, other and neutral state
- session:对应在哪个文件夹下,共5个,数字1-5表示 1
- emotion: 情感 用英文简写表示,共9种情绪 neu
- 对情绪进行数字编号,以便于我们进行深度学习:
_emotions = { ‘ang’: 0, ‘hap’: 1, ‘exc’: 1, ‘sad’: 3, ‘fru’: 4, ‘fea’: 5, ‘sur’: 6, ‘neu’: 7, ‘xxx’: 8 }
- 根据file(文件名)和session可以获取对应的语音片段的root(路径)
- 用torchaudio.load导入对应root下的wav文件,并根据file(文件名)可以在df中索引到对应的emotion.
- 此时返回一个带标签的sample.标签为对应的emotion
return:[‘声音Tensor(1行n列的tensor)’‘emotion’]
数据集的特殊处理
1.看到这里的同学应该会产生一个疑问,我们的声音片段为不定长,也就是说,我们的n是不固定的,因此,我们需要定义collate_fn来对数据进行处理.Dataloader中关于collate_fn的讲解
2.所有音频信号的采样率为 16000Hz,我们这里将一段语音数据分成 size=25ms,stride=10ms的片段,则根据每一帧的采样个数计算的公式,可得每一帧的总时长=每一帧的采样个数×每个采样时长 0.025 = n * (1/16000) 可得 n = 400,同理,计算步长为160.则为size=400,stride=160(等效:size=25ms,stride=10ms),对此将每个语音片段进行分割(split)处理.
> 注意需要padding处理(可能无法分为全部长为400的片段,最后的片段需要补全)
3.最后return:frames, emotions, n_frames
- frames :**size=(n,400)**的Tensor
- emotions:对应的情绪的编号 (n,1)
- n_frames: num of frames. 值为**n**
模型处理
因为模型很简单很简单,就简要写一下吧
利用Deep neural network
input size=400
hidden size1=1000
hidden size2=1500
output size =9
Loss:CrossEntropyLoss 为什么要用CrossEntropyLoss
optim:Adam算法 Adam介绍
在对模型进行训练时候,对模型进行梯度衰减参考函数:optim.lr_scheduler.StepLR(),每训练7次梯度衰减为原来的1%
训练结果
这是跑了10批的结果,Loss有在减小的趋势,同时Acc也在不断增加
Epoch 0/9
----------
train Loss: 1.3846 Acc: 0.3162
val Loss: 1.3642 Acc: 0.2989
Epoch 1/9
----------
train Loss: 1.3164 Acc: 0.3790
val Loss: 1.3359 Acc: 0.3962
Epoch 2/9
----------
train Loss: 1.3096 Acc: 0.3991
val Loss: 1.3341 Acc: 0.3901
Epoch 3/9
----------
train Loss: 1.2992 Acc: 0.3961
val Loss: 1.3492 Acc: 0.3084
Epoch 4/9
----------
train Loss: 1.2973 Acc: 0.4041
val Loss: 1.3412 Acc: 0.3232
Epoch 5/9
----------
train Loss: 1.2935 Acc: 0.4107
val Loss: 1.3345 Acc: 0.3136
Epoch 6/9
----------
train Loss: 1.2930 Acc: 0.4279
val Loss: 1.3273 Acc: 0.4396
Epoch 7/9
----------
train Loss: 1.2767 Acc: 0.4717
val Loss: 1.3331 Acc: 0.3388
Epoch 8/9
----------
train Loss: 1.2774 Acc: 0.4616
val Loss: 1.3267 Acc: 0.4414
Epoch 9/9
----------
train Loss: 1.2753 Acc: 0.4715
val Loss: 1.3291 Acc: 0.3962
Training complete in 4m 28s
Best val Acc: 0.441355
Process finished with exit code 0

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)