基于 YOLOv11 的人脸表情识别系统

一、项目概述

本项目基于 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/labelstest/labels 目录下。


三、训练过程与参数

3.1 训练流程

  1. 加载预训练模型(yolo11n.pt
  2. 读取数据集配置 loopy.yaml
  3. 执行 100 轮(epoch)训练
  4. 每 10 轮保存一次检查点
  5. 训练结束后保存最佳权重 best.pt 与最终权重 last.pt
  6. 自动生成损失曲线、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 年

相关推荐
小兵张健2 小时前
35岁程序员的春天来了
人工智能
大怪v3 小时前
AI抢饭?前端佬:我要验牌!
前端·人工智能·程序员
冬奇Lab3 小时前
OpenClaw 深度解析(六):节点、Canvas 与子 Agent
人工智能·开源
刀法如飞4 小时前
AI提示词框架深度对比分析
人工智能·ai编程
IT_陈寒6 小时前
Python开发者必知的5大性能陷阱:90%的人都踩过的坑!
前端·人工智能·后端
1G6 小时前
openclaw控制浏览器/自动化的playwright MCP + Mcporter方案实现
人工智能
踩着两条虫6 小时前
VTJ.PRO 双向代码转换原理揭秘
前端·vue.js·人工智能
扉川川6 小时前
OpenClaw 架构解析:一个生产级 AI Agent 是如何设计的
前端·人工智能
星浩AI7 小时前
让模型自己写 Skills——从素材到自动生成工作流
人工智能·后端·agent
千寻girling11 小时前
Python 是用来做 AI 人工智能 的 , 不适合开发 Web 网站 | 《Web框架》
人工智能·后端·算法