一、项目概述
本项目基于 YOLOv11 深度学习模型实现人脸表情的智能识别,提供完整的训练流程与可视化桌面应用。系统支持图片、视频、摄像头三种识别方式,具备用户登录、历史记录、模型管理、指标可视化等功能。
二、数据集
2.1 数据集信息
- 数据集名称:FER Dataset(YOLO 格式)
- 配置文件 :
fer-dataset-yolo/loopy.yaml - 训练集 :12,271 张图像(
fer-dataset-yolo/train/images) - 验证集 :3,068 张图像(
fer-dataset-yolo/test/images) - 总图像数量:15,339 张
2.2 图片种类与类别
系统识别 7 类 人脸表情:
| 英文名称 | 中文名称 |
|---|---|
| Surprise | 惊讶 |
| Fear | 恐惧 |
| Disgust | 厌恶 |
| Happiness | 快乐 |
| Sadness | 悲伤 |
| Anger | 愤怒 |
| Neutral | 中性 |
标注格式为 YOLO 标准格式(归一化坐标:class_id x_center y_center width height),标签文件存放在 train/labels 与 test/labels 目录下。
三、训练过程与参数
3.1 训练流程
- 加载预训练模型(yolo11n.pt)
- 读取数据集配置
loopy.yaml - 执行 100 轮(epoch)训练
- 每 10 轮保存一次检查点
- 训练结束后保存最佳权重
best.pt与最终权重last.pt - 自动生成损失曲线、mAP 曲线等可视化图表
3.2 主要训练参数
| 参数 | 取值 | 说明 |
|---|---|---|
| 基础模型 | YOLOv11n | Nano 轻量版 |
| 输入尺寸 | 640×640 | 图像输入分辨率 |
| 训练轮次 | 100 epochs | 总迭代次数 |
| 批次大小 | 16 | batch size |
| 优化器 | SGD | 随机梯度下降 |
| 初始学习率 | 0.01 | lr0 |
| 最终学习率 | 0.000199 | lrf |
| 动量 | 0.937 | momentum |
| 权重衰减 | 0.0005 | weight_decay |
| Warmup 轮次 | 3 | warmup_epochs |
| 早停耐心值 | 20 | patience |
| 置信度阈值 | 0.001 | 训练时 conf |
| IoU 阈值 | 0.7 | NMS 用 |
3.3 训练结果
- 最佳模型路径 :
fer_yolov11_runs/train_20260121_1241292/weights/best.pt - 最终 Precision:80.69%
- 最终 Recall:76.95%
- mAP50:84.82%
- mAP50-95:70.39%
四、可视化图表含义
系统提供多种训练指标可视化图表,存放于 fer_yolov11_runs/train_20260121_1241292/ 目录:
| 图表文件 | 含义说明 |
|---|---|
| 1_results_overview.png | 训练结果总览:训练损失、验证损失、精确率/召回率、mAP 四合一 |
| 2_train_vs_val_loss.png | 训练损失与验证损失对比,分 Box/Class/DFL 三类 |
| 3_learning_rate.png | 学习率随 epoch 变化曲线 |
| 4_precision_recall_f1.png | 精确率、召回率及 F1-Score 曲线 |
| 5_map_metrics.png | mAP@0.5 与 mAP@0.5:0.95 曲线 |
| 6_training_time.png | 每轮耗时与累计训练时间 |
| 7_all_losses.png | 全部 6 条损失曲线汇总 |
| 8_final_metrics_summary.png | 最终 Precision/Recall/mAP 柱状图 |
| 9_convergence_analysis.png | 总损失收敛与验证损失 vs mAP50 对比 |
指标说明:
- Box Loss:边界框回归损失
- Class Loss:分类损失
- DFL Loss:Distribution Focal Loss,分布焦点损失
- Precision:精确率,预测为正例中实际为正例的比例
- Recall:召回率,实际正例中被正确预测的比例
- mAP50:IoU 阈值为 0.5 时的平均精度
- mAP50-95:IoU 从 0.5 到 0.95 步长 0.05 的平均 mAP
五、系统功能
5.1 登录与注册
- 左右对称布局:左侧为登录/注册表单,右侧为系统介绍
- 支持用户注册与登录,数据存储在本地
app_data/users.json
5.2 图片识别
- 支持选择本地图片进行人脸表情检测
- 左侧展示图片预览(含检测框标注),右侧展示识别结果
- 结果包含:检测人脸数量、各人脸表情类别、置信度、边界框坐标等
5.3 视频识别
- 支持选择视频文件(mp4、avi、mov 等)
- 对视频进行采样帧分析,统计各表情出现次数
- 结果展示视频总帧数、采样帧数及表情统计
5.4 摄像头识别
- 实时调用摄像头进行人脸表情检测
- 左侧显示实时画面与检测框,右侧显示当前帧识别结果
5.5 历史检测记录
- 查询当前用户的检测历史
- 展示记录类型、来源、检测数量、时间等
- 数据存储在本地
app_data/detection_history.json
5.6 模型选择
- 默认使用最佳权重
best.pt - 支持添加其他
.pt权重文件并切换使用 - 配置保存在本地
app_data/models_config.json
5.7 指标可视化
- 展示训练过程生成的各类可视化图表
- 以标签页形式呈现,便于查看损失、mAP、学习率等指标
六、项目技术栈
| 技术 | 用途 |
|---|---|
| Python 3.8+ | 主要开发语言 |
| PyTorch | 深度学习框架 |
| Ultralytics YOLOv11 | 目标检测与表情识别模型 |
| PyQt6 | 桌面 UI 框架 |
| OpenCV (cv2) | 图像与视频处理 |
| NumPy | 数值计算 |
| Pandas | 数据处理 |
| Matplotlib | 训练曲线可视化 |
七、项目结构
c114/
├── app_main.py # PyQt6 主程序入口
├── config.py # 配置文件(路径、类别等)
├── inference.py # YOLO 推理模块
├── data_manager.py # 用户、历史、模型配置管理
├── ui_styles.py # UI 样式与主题
├── train.py # 模型训练脚本
├── plot_metrics.py # 训练指标可视化脚本
├── plot_results.py # 基础训练结果绘图
├── README.md # 项目说明文档
├── app_data/ # 本地数据目录(自动创建)
│ ├── users.json # 用户数据
│ ├── detection_history.json # 检测历史
│ └── models_config.json # 模型配置
├── fer-dataset-yolo/ # 数据集
│ ├── loopy.yaml # 数据集配置
│ ├── train/ # 训练集
│ └── test/ # 验证集
└── fer_yolov11_runs/ # 训练输出
└── train_20260121_1241292/
├── weights/ # 模型权重
│ ├── best.pt # 最佳模型
│ └── last.pt # 最终模型
├── results.csv # 训练日志
└── *.png # 可视化图表
八、运行说明
8.1 环境准备
安装依赖:
pip install torch ultralytics PyQt6 opencv-python numpy pandas matplotlib
8.2 启动系统
python app_main.py
首次运行会显示登录界面,可先注册用户再登录。登录成功后进入主界面,左侧为导航栏,右侧为功能区域。
8.3 生成可视化图表
若指标可视化页无图表,可先运行:
python plot_metrics.py fer_yolov11_runs/train_20260121_1241292/results.csv
图表将保存至训练结果目录,系统会自动加载展示。
九、开发信息
- 开发作者:Jay
- 定制联系:vx Jay8059
- 开发时间:2026 年














