You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

128 lines
4.1 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 基于深度学习的语音情感识别系统
## 1 项目概述
本项目是一个基于深度学习的语音情感识别系统,使用 **PyTorch** 实现。该系统能够从音频中识别 **6种不同的情感状态**愤怒、恐惧、开心、中性、悲伤和惊讶。项目实现了完整的数据处理、模型训练和评估流程并提供了友好的图形用户界面GUI进行实时预测。
### 1.1 数据集
本项目使用的数据集来自 [百度AI Studio 的情感语音数据集](https://aistudio.baidu.com/datasetdetail/221024)。数据集包含以下信息:
- **类别**生气、恐惧、开心、正常、伤心、惊讶共6种类别。
- **样本数量**每类50个样本总计300条数据。
- **格式**:音频文件为 `.wav` 格式。
### 1.2 模型性能概述
| 模型 | 特征类型 | 准确率 | F1得分 | 备注 |
|------|---------|-------|-------|------|
| ResNet18 | MFCC频谱图 | 73.3% | 74.4% | 使用预训练权重 |
| ResNet18 | 原始波形 | 80.0% | 78.0% | 不使用预训练权重 |
### 1.3 目录说明
```
|
|-- checkpoints/ # 保存训练好的模型
| |-- <model_name>_<timestamp>
| | |-- plots/ # 保存训练过程中的图像
| | |-- results.txt # 保存评价指标
| | |-- <model_name>_best.pth # 保存最佳模型
| |-- ...
|
|-- dataset/ # 划分后的数据集根目录
| |-- train/ # 训练集
| | |-- <emotion>/
| | | |-- <audio_file>.wav
| | |-- ...
| |-- val/ # 验证集
| |-- <emotion>/
| | |-- <audio_file>.wav
| |-- ...
|
|-- wav # 原始音频数据集
| |-- <emotion>/
| | |-- <audio_file>.wav
| |-- ...
|
|-- dataset.py # 数据集类
|-- models.py # 模型定义
|-- process_data.py # 数划分数据集
|-- README.md # 项目说明
|-- requirements.txt # 依赖库
|-- SIMSUN.TTC # 字体文件
|-- train.py # 训练脚本
|-- ui.py # 交互界面
```
## 2 环境配置
### 2.1 创建虚拟环境
建议使用 `conda` 创建虚拟环境以避免依赖冲突:
```shell
conda create -n audio_classification python=3.10
conda activate audio_classification
```
### 2.2 安装 `PyTorch` 及相关库
请根据 PyTorch 官方[安装指南](https://pytorch.org/get-started/locally/) 安装适合自己硬件版本的 `torch`、`torchvision` 和 `torchaudio`
### 2.3 安装依赖库
运行以下命令安装项目所需的其他依赖库:
```shell
pip install -r requirements.txt
```
## 3 运行说明
### 3.1 数据集划分
将原始数据集划分为训练集和验证集。运行以下命令:
```shell
python process_data.py
```
您可以通过命令行参数控制数据集根目录、验证集比例等。更多参数说明请参考文档 [process_data.md](doc/process_data.md)。
### 3.2 训练模型
运行以下命令开始训练模型。您可以通过命令行参数灵活调整超参数。
#### 基本运行(使用默认参数)
```python
python train.py
```
#### 调整模型和超参数
例如,使用 MFCC 频谱图作为输入特征,选择 ResNet34 模型,并启用预训练权重:
```python
python train.py --use_mfcc --model spec_resnet34 --pretrained --batch_size 32 --epochs 50 --lr 0.0005 --scheduler
```
完整的参数说明请参考文档 [train.md](doc/train.md)。
### 3.3 交互界面
运行以下命令启动图形用户界面,进行实时预测:
```shell
python ui.py
```
## 4 功能特点
1. **完整的训练流程**
包含数据加载、模型训练、验证和测试的全流程,方便用户快速上手。
2. **多种模型选择**
支持不同规模的 ResNet 模型(如 ResNet18、ResNet34并支持原始音频和 MFCC 频谱图作为输入特征。
3. **超参数控制**
用户可通过命令行参数灵活调整学习率、批量大小、训练轮数等超参数。
4. **丰富的评估指标**
提供准确率、精确度、召回率、F1分数、混淆矩阵等评价指标帮助用户全面评估模型性能。
5. 自动绘图:
- 训练和验证损失曲线
- 准确率曲线
- 精确度曲线
- 召回率曲线
- F1分数曲线
- 混淆矩阵
- PR曲线