Skip to content

About

多模态情绪识别方法研究(Multimodal Emotion Recognition)

Topics

Resources

Stars

31 stars

Watchers

2 watching

Forks

Repository files navigation

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

中文 | English

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

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 许可证。

致谢

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


如有问题或建议,欢迎提交 Issue 或 Pull Request。

About

多模态情绪识别方法研究(Multimodal Emotion Recognition)

Topics

Resources

Stars

31 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages