语音情感识别

news/2025/1/2 1:58:30/

语音情感识别

语音是人类最自然的表达方式。因此,将这种交流方式扩展到计算机应用是很自然的选择。我们将语音情感识别(SER)系统定义为一系列处理和分类语音信号以检测其中包含情感的方法。

本项目探索了不同的音频特征和基于CNN的架构,以构建有效的语音情感识别(SER)系统。目标是提高检测语音信号中情感的准确性。该代码库包含代码、笔记本和实验的详细说明,包括特征提取技术、模型架构、训练程序和评估指标。欢迎对语音处理和情感识别感兴趣的贡献者探索并参与此项目。

目录

  • 语音情感识别
    • 数据集
      • 预处理
      • 数据增强
      • 数据分割
    • 特征提取
    • 构建模型
      • DummyNet
      • RezoNet
      • ExpoNet
    • 备注
    • 结果
    • 贡献者

数据集

CREMA(众包情感多模态演员数据集)是一个包含91位演员的7,442个原始片段的数据集。对于语音情感识别来说,7442个样本可以被认为是一个相对适中的数据集规模。这些片段来自48位男性和43位女性演员,年龄在20至74岁之间,来自不同种族和民族(非裔美国人、亚裔、白人、西班牙裔和未指定)。演员们朗读了12个句子中的选择。这些句子以六种不同的情感(愤怒、厌恶、恐惧、快乐、中性和悲伤)呈现。该数据集可在Kaggle上获取。

预处理

由于音频文件长度不一,我们将通过零填充使其长度统一,以匹配数据集中最长音频文件的长度。我们还将确保所有音频文件具有相同的采样率(16 KHz),必要时进行重采样。

数据增强

我们使用以下数据增强技术:

  • 噪声注入: 向音频信号添加随机噪声
  • 时间移位: 在时间上移动音频信号
  • 音高偏移: 改变音频信号的音高
  • 时间拉伸: 在时间上拉伸或压缩音频信号
  • 音量缩放: 调整音频信号的音量

特征提取

我们主要使用librosa库处理音频文件(wav文件)。提取以下特征:

  • 过零率
  • 能量
  • 梅尔频谱图
size (in samples) = duration (in seconds) x fs (sampling rate in Hz)

主要参数设置:

  • 窗口大小:512个样本
  • 跳跃大小:128个样本
  • 梅尔频带数:40个频带

构建模型

本项目构建了三个模型:

DummyNet

基础CNN模型,可以接受原始音频信号、过零率、能量或梅尔频谱图作为输入。

模型结构
第一卷积层:1D 卷积层,输入通道为 1,输出通道为 512,卷积核大小为 5,步长为 1。
第一池化层:最大池化层,池化核大小为 5,步长为 2。
第二卷积层:1D 卷积层,输入通道为 512,输出通道为 512,卷积核大小为 5,步长为 1。
第二池化层:最大池化层,池化核大小为 5,步长为 2。
第三卷积层:1D 卷积层,输入通道为 512,输出通道为 128,卷积核大小为 5,步长为 1。
第三池化层:最大池化层,池化核大小为 5,步长为 2。
展平层:将输入张量展平成一维向量。
第一全连接层:全连接(线性)层,输入大小为 输入形状 * 128,输出大小为 256。
第二全连接层:全连接(线性)层,输入大小为 256,输出大小为 6。
Softmax 激活:应用于最后一层以生成输出概率。
除了最后一层以外,每个卷积层和全连接层的输出均应用 RELU 激活函数。

  • Using Zero Crossing Rate:使用过零率

在这里插入图片描述

  • Using Energy:使用能量
    在这里插入图片描述
  • Using Zero Crossing Rate and Energy:使用过零率和能量
  • 在这里插入图片描述

Using Mel Spectrogram:使用梅尔频谱图
在这里插入图片描述

RezoNet

RezoNet 是一种基于深度神经网络的轻量级 CNN(卷积神经网络)语音情感识别模型。该模型在卷积层和池化层中使用了一组不同矩形形状的卷积核。它的设计灵感来源于研究论文《Deep-Net: A Lightweight CNN-Based Speech Emotion Recognition System Using Deep Frequency Features》。该模型基于从音频文件中提取的二维梅尔频谱图特征进行训练。
在这里插入图片描述
看起来你正在训练一个音频分类模型,并且已经发现了过拟合的问题。你通过使用数据增强技术来解决这个问题,并且在第5个epoch保存了最佳的模型检查点。以下是分类报告的一般概述:

分类报告:

分类报告通常包括以下几个指标,用于评估每个类别的表现:

  • 精确率(Precision):正预测结果(真阳性,TP)占所有预测为正的样本数(包括假阳性,FP)。精确率高意味着模型较少将负样本误判为正样本。

    [
    \text{Precision} = \frac{\text{TP}}{\text{TP + FP}}
    ]

  • 召回率(Recall):正预测结果(真阳性,TP)占所有真实为正的样本数(包括假阴性,FN)。召回率高意味着模型能够识别大部分的正样本。

    [
    \text{Recall} = \frac{\text{TP}}{\text{TP + FN}}
    ]

  • F1-score:精确率和召回率的调和均值,提供一个综合性的指标,尤其适用于类别不平衡的情况。

    [
    F1 = 2 \times \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}}
    ]

  • 支持度(Support):每个类别在数据集中的真实实例数,反映类别的分布情况。

此外,还可以报告 整体准确率(Accuracy)

[
\text{Accuracy} = \frac{\text{TP + TN}}{\text{总实例数}}
]

示例分类报告:

如果你有多个类别,以下是一个示例分类报告的格式:

类别精确率召回率F1-Score支持度
类别10.850.900.87100
类别20.780.740.76150
类别30.920.930.92120
类别40.790.810.80130
总体0.830.840.83500

对于你的情况,保存了第5个epoch的最佳模型检查点,你可以基于上述指标评估分类模型的表现。这将帮助你判断数据增强技术是否有效地减轻了过拟合,并且改善了模型的泛化能力。

如果你想分享分类报告的详细结果,或者需要进一步的分析和帮助,随时告诉我!

ExpoNet

将过零率、能量和梅尔频谱图作为1D输入的CNN模型,使用方形核进行特征提取。
以下是你提供的 模型架构训练 部分的中文翻译:


模型架构

网络的输入预期为一维,表示语音信号,其中包含零交叉率(Zero Crossing Rate),并将其附加到能量(Energy)上,再附加到一维展平的梅尔频谱图(Mel Spectrogram)上。

网络架构从一个卷积层开始,具有1个输入通道、512个输出通道,卷积核大小为5,步幅为1,采用相同填充(same padding)。接着是ReLU激活函数、批量归一化(Batch Normalization)和最大池化层(Max Pooling),池化层的卷积核大小为5,步幅为2,采用相同填充。每次池化后,输入的形状会相应更新。

接下来,重复四个卷积层,配置与前一个卷积层类似,但输入和输出通道数量有所不同。每个卷积层之后都会跟着ReLU激活、批量归一化和最大池化层,每次池化后输入形状会更新。

卷积层之后,使用nn.Flatten()模块将特征展平。然后,展平的特征会通过两个全连接层,分别有512个和6个输出单元。第一个全连接层后面跟着ReLU激活函数和批量归一化。最后,输出通过softmax函数得到每个情感类别的预测概率。

为了加速计算和提高实用性,模型可以修改为使用Log Softmax代替Softmax。然而,由于我们使用GPU运行模型,因此使用Softmax在此情况并不会成为问题。


训练

在音频处理方面,我们使用了以下参数:

  • 窗口大小(Window size):512
  • 步长(Hop size):160
  • 梅尔频率带数(Number of mel):40

优化器使用Adam,学习率为0.00001,批大小为8。我们训练了10个epoch,并根据验证准确度保存了最佳模型。使用了L2正则化,权重衰减(weight decay)为0.001。此外,为了防止过拟合,我们还使用了数据增强技术,如噪声注入、时间偏移、音调偏移、时间拉伸和音量缩放。


分类报告

你提到的分类报告部分是模型评估的标准输出,通常包括每个类别的精确率、召回率、F1得分以及支持度等指标,用于评估模型在不同情感分类上的表现。如果你有分类报告的详细数据,或者希望进一步分析,请分享详细信息!
在这里插入图片描述

备注

  • ExpoNet是表现最好的模型。使用更大的数据集可能会进一步改善结果。
  • 下一步可以构建两层或三层神经网络,集成前述模型,将每个模型的输出作为神经网络的输入。
#完整代码 模型以及数据集 链接
https://mbd.pub/o/bread/mbd-Z52Vkp1s

http://www.ppmy.cn/news/1559242.html

相关文章

七、队列————相关概念详解

队列————相关概念详解 前言一、队列1.1 队列是什么?1.2 队列的类比 二、队列的常用操作三、队列的实现3.1 基于数组实现队列3.1.1 基于环形数组实现的队列3.1.2 基于动态数组实现的队列 3.2 基于链表实现队列 四、队列的典型应用总结 前言 本篇文章,我们一起来…

NVIDIA GB200 Superchip及各厂家液冷服务器和液冷机柜介绍

(一)前言 NVIDIA GB200是一款高度集成的超级计算模块,它是基于NVIDIA的Blackwell架构设计的。这款模块结合了两个NVIDIA B200 Tensor Core GPU和一个NVIDIA Grace CPU,旨在提供前所未有的AI性能。 GB200 搭载液冷,产…

Android使用辅助服务AccessibilityService实现自动化任务

Android 辅助服务(AccessibilityService)旨在帮助具有视觉、身体或年龄相关限制的用户更轻松地使用 Android 设备和应用。通过辅助服务,可以将一些人工操作自动化,从而解放用户的双手。 因此我们可以使用它来实现一些自动化任务&a…

【计算机视觉】轮廓检测

一、轮廓检测 在计算机视觉中,轮廓检测是另一个比较重要的任务,不单是用来检测图像或者视频帧中物体的轮廓,而且还有其他操作与轮廓检测相关。 以下代码展示了如何使用 OpenCV 进行 图像阈值处理、寻找图像轮廓 和 绘制轮廓 的完整流程&…

P1588 [USACO07OPEN] Catch That Cow S 洛谷 BFS-最短路思想

题目描述 FJ 丢失了他的一头牛,他决定追回他的牛。已知 FJ 和牛在一条直线上,初始位置分别为 x 和 y,假定牛在原地不动。FJ 的行走方式很特别:他每一次可以前进一步、后退一步或者直接走到 2x 的位置。计算他至少需要几步追上他的…

计算机专业考研 408 学科学习方法

计算机专业考研 408 学科涵盖数据结构、计算机组成原理、操作系统和计算机网络四门核心课程,内容多且难度大。但只要掌握科学的学习方法,便能化繁为简,稳步提升。以下为大家详细介绍 408 学科的学习方法。 一、基础夯实阶段:全面…

Pytorch | 利用MIG针对CIFAR10上的ResNet分类器进行对抗攻击

Pytorch | 利用MIG针对CIFAR10上的ResNet分类器进行对抗攻击 CIFAR数据集MIG介绍算法流程 MIG代码实现MIG算法实现攻击效果 代码汇总mig.pytrain.pyadvtest.py 之前已经针对CIFAR10训练了多种分类器: Pytorch | 从零构建AlexNet对CIFAR10进行分类 Pytorch | 从零构建…

【每日学点鸿蒙知识】屏幕高度、证书签名、深色模式对上架影响、Taskpool上下文、List触底加载更多

1、HarmonyOS 关于屏幕高度? display.getDefaultDisplaySync 可以获取到整个屏幕的高度, 那顶部的状态栏和底部的安全区高度 怎么获取? 可以在EntryAbility里获取并存储,获取到的高度是px,所以用px2vp()转…