Skip to content

emotion-recognition-lab/emotion-recognition

Repository files navigation

多模态情绪识别 (Multimodal Emotion Recognition)

基于深度学习的多模态情绪识别方法研究套件,支持文本、音频、视频三种模态的情绪分类与情感分析任务。

Python PyTorch License

项目简介

本项目是一个用于多模态情绪识别的研究套件,支持以下功能:

  • 🎯 多模态融合:支持文本(T)、音频(A)、视频(V)三种模态的单独和组合使用
  • 📊 多数据集支持:支持MELD、IEMOCAP、SIMS等主流情绪数据集
  • 🚀 高效训练:集成缓存机制、混合精度训练、知识蒸馏等优化技术
  • ⚙️ 灵活配置:基于TOML配置文件的模块化设计,支持各种实验配置
  • 📈 完整流程:从数据预处理到模型训练、评估的完整工具链

如果需要了解项目的详细结构,请查看项目结构文档

快速开始

环境要求

  • Python 3.12+
  • PyTorch 2.4.1
  • CUDA 12.1 (可选,用于GPU加速)

安装

  1. 克隆项目仓库:
git clone https://github.com/zrr1999/emotion-recognition.git
cd emotion-recognition
  1. 安装依赖:
# 使用uv安装(推荐)
uv sync --all-extras --dev

# 国内用户可使用清华源加速
uv sync --all-extras --dev --index-url https://pypi.tuna.tsinghua.edu.cn/simple --extra-index-url https://download.pytorch.org/whl/cu121
  1. 准备数据集:
# 创建数据集目录
mkdir datasets

# 下载并链接MELD数据集
ln -s /path/to/MELD datasets/MELD

数据集需要按照项目结构文档中的格式组织。

基本使用

命令行工具

项目提供了两个命令行工具:

# 情绪识别工具
emotion-recognize --help

# 数据处理工具
emotion-tool --help

训练模型

使用nanoflow进行实验:

# 运行基础实验
uvx nanoflow run experiments/mdn.toml
uvx nanoflow run experiments/makd.toml

# 运行消融实验
uvx nanoflow run experiments/mdn-ablation.toml
uvx nanoflow run experiments/makd-ablation.toml

核心特性

🚀 高效训练机制

特征缓存机制

由于当特征提取模块冻结时,相同输入的特征提取模块的输出不会发生变化,因此可以将特征提取模块的输出缓存下来,以减少重复计算。本项目使用SafeTensors格式进行特征缓存,相比于其他格式,SafeTensors拥有更好的性能和安全性。

透明模型存储

在实验过程中,我们通常会保存许多模型的检查点,也会通过修改参数训练多个不同的模型。一般情况下,每一份的模型都需要保存一份参数,这样会导致存储空间的浪费。为了解决这个问题,我们使用软连接将相同的模型参数链接到不同的模型文件夹中,以减少存储空间的浪费。同时,这种方法并不会破坏原本的文件夹结构,使得整体结构更加清晰。

混合精度训练

集成自动混合精度(AMP)支持,在保持模型精度的同时显著加速训练过程并减少显存占用。

⚙️ 灵活配置系统

动态配置理念

在实验过程中,为了比较不同的模型,往往需要频繁的修改参数以便训练多个不同的模型。本项目采用配置文件方案,既可以保持代码的整洁,又可以方便的修改参数。配置文件支持列表、字典等复杂数据结构,表达能力远超命令行参数。

采用TOML配置文件实现模块化设计:

  • configs/encoders/:编码器配置(T、A、V及其组合)
  • configs/fusion/:融合策略配置
  • configs/losses/:损失函数配置
  • configs/dataset/:数据集配置

技术依赖:Pydantic 用于配置验证和类型检查。

🔄 知识蒸馏优化

TelME的实现中,使用知识蒸馏训练不同的模态需要进行多次,这样会导致训练时间过长(即使使用了本项目的缓存技术)。为了解决这个问题,我们将多个模态的知识蒸馏训练合并到一次训练中,这样可以大幅度减少训练时间。

📊 多数据集支持

支持主流情绪识别数据集:

  • MELD:情绪分类和情感分析
  • IEMOCAP:情绪分类
  • SIMS:情感分析

🔧 持续集成

本项目实现了基础的持续集成,具体可以参考train-and-eval.yml

项目约定

检查点命名规范

检查点命名格式为{训练类别}/{数据集}/{训练方式}--{批大小}--{分类损失函数}/{网络摘要}/{网络哈希}--{随机种子},例如training/MELD--E/trainable--2--{loss}/1xE--T/51fe7ba3--114

模态简称

  • T (Text): 文本模态
  • A (Audio): 音频模态
  • V (Video): 视频模态

训练方式简称

  • T (Full Tuning): 全参数微调
  • L (LoRA): 低秩适应
  • F (Froze Backbones): 冻结骨干网络

数据集类型简称

  • E (Emotion): 情绪分类任务
  • S (Sentiment): 情感分析任务

技术架构

核心依赖

组件 版本 用途
Python 3.12+ 运行环境
PyTorch 2.4.1 深度学习框架
Transformers 4.48+ 预训练模型支持
Pydantic 2.0+ 配置验证
SafeTensors 0.4+ 高效特征缓存

模型架构

多模态输入 → 特征编码器 → 特征融合 → 分类器 → 情绪预测
    ↓           ↓          ↓        ↓         ↓
  T/A/V    BERT/Whisper  Deep/MoE  Linear   Classes

编码器支持

  • 文本(T):BERT、RoBERTa、ModernBERT等
  • 音频(A):Whisper、Distil-Whisper等
  • 视频(V):OpenCV特征提取

融合策略

  • Vanilla融合:简单拼接
  • Deep融合:深度神经网络
  • MoE融合:混合专家模型
  • 注意力融合:自注意力机制

性能优化

  • 视频读取:OpenCV (0.08s/帧) vs PyAV (0.17s/帧)
  • 特征缓存:使用SafeTensors格式,冻结时避免重复计算
  • 存储优化:软连接机制减少模型存储空间

实验结果

以下结果基于MELD数据集的情绪分类任务

单模态性能

文本模态 (Text-only)

方法 随机种子 准确率 Weighted-F1
APCL (temp=0.08, β=0.1, γ=0.1) 43 67.74% 67.04%
APCL (temp=0.08, β=0.1, γ=0.1) 42 68.05% 66.91%
APCL (temp=0.08, β=0.1, γ=0.1) 114 67.59% 66.55%
APCL (temp=0.08, β=0.1, γ=0.1) 0 67.93% 66.92%
SPCL (temp=0.08, pool=512, support=64) 42 68.31% 67.31%
SPCL (temp=0.08, pool=512, support=64) 114 67.32% 66.55%
SPCL (temp=0.08, pool=512, support=64) 0 66.63% 66.50%

多模态性能

模态组合 方法 准确率 Weighted-F1 备注
T+A+V 待补充 - - 待补充
T+A 待补充 - - 待补充
T+V 待补充 - - 待补充

贡献指南

欢迎贡献代码和想法!请遵循以下步骤:

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/amazing-feature)
  3. 提交更改 (git commit -m 'Add amazing feature')
  4. 推送到分支 (git push origin feature/amazing-feature)
  5. 创建 Pull Request

开发环境

# 安装开发依赖
uv sync --dev

# 运行代码检查
uv run ruff check src/
uv run pyright src/

# 运行格式化
uv run ruff format src/

参考文献

预训练模型

模型压缩技术

知识蒸馏

混合专家模型

语音识别

其他参考资料

技术博客与教程

数据集与基准

学术资源

工具与框架

许可证

本项目采用 MIT 许可证

致谢

感谢所有为本项目提供指导和想法的同学和老师们!


如有问题或建议,欢迎提交 IssuePull Request

About

多模态情绪识别(研究生毕业设计源码)

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published