当前位置: 首页 > news >正文

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

基于YOLOv8的人脸表情识别系统## 项目简介

本项目以YOLOv8目标检测框架为核心,构建了一套完整的人脸表情识别系统,涵盖数据集处理、模型训练与调优、可视化分析以及交互式推理系统的全流程开发。系统能够在图片、视频及摄像头实时画面中同步完成人脸定位表情分类,支持 7 种基础表情类别的端到端识别。


目录

  • 深度学习开发流程
  • 数据集说明
  • 模型训练
  • 训练参数
  • 训练指标与可视化
  • 系统功能
  • 技术栈
  • 项目结构
  • 快速开始

深度学习开发流程

本项目完整复现了深度学习系统从零到部署的标准流程:

数据集构建与预处理 ↓ 预训练模型选型与配置 ↓ 多策略数据增强 ↓ 模型训练与实时监控 ↓ 指标评估与超参调优 ↓ 最优权重导出 ↓ GUI 推理系统集成

数据集说明

数据集概况

项目内容
数据集名称FER(Facial Expression Recognition)YOLO 格式
标注格式YOLO txt(每行:类别ID cx cy w h,归一化坐标)
训练集图片数约 10,000 张
测试集图片数约 3,068 张
总计约 13,068 张
类别数量7 类

表情类别

ID英文标签中文含义说明
0Surprise惊讶眉毛上扬、嘴巴张开
1Fear恐惧眉毛皱起、眼神紧张
2Disgust厌恶鼻子皱起、嘴角下撇
3Happiness高兴嘴角上扬、面部舒展
4Sadness悲伤眉毛下垂、嘴角下拉
5Anger愤怒眉毛紧锁、目光锐利
6Neutral中性面部无明显情绪特征

数据集目录结构

fer-dataset-yolo/ ├── loopy.yaml # 数据集配置文件 ├── train/ │ ├── images/ # 训练集图片 │ └── labels/ # 训练集标注(YOLO格式) └── test/ ├── images/ # 测试集图片 └── labels/ # 测试集标注

标注格式示例

# 格式:类别ID 中心点x 中心点y 宽度 高度(均为相对图片宽高的归一化值) 4 0.5097 0.3528 0.3948 0.3183

数据预处理与增强策略

训练时采用多种在线数据增强,增强模型对不同场景的鲁棒性:

增强方式参数作用
HSV 色调抖动hsv_h=0.015模拟不同光源色温
HSV 饱和度抖动hsv_s=0.7模拟低/高饱和场景
HSV 明度抖动hsv_v=0.4模拟亮度变化
随机水平翻转fliplr=0.5增加左右对称样本
Mosaic 拼接mosaic=1.04 图合并,扩充上下文
MixUp 混合mixup=0.1提升决策边界平滑性

模型训练

预训练模型

选用YOLOv8s(Small)作为基础模型,在 COCO 数据集预训练权重上进行迁移学习。该规格在精度与推理速度之间取得最佳平衡,适合表情识别这类细粒度分类任务。

训练流程

  1. 加载yolov8s.pt预训练权重,冻结骨干网络初期层
  2. 以小学习率预热(Warmup)3 轮,逐步适应新任务分布
  3. 余弦退火(Cosine Annealing)调度器动态调整学习率
  4. 启用早停(Early Stopping)机制,patience=25,防止过拟合
  5. 每 10 轮保存一次检查点,最优验证 mAP 自动保存为best.pt

运行训练

python train.py

所有训练产物(权重、曲线图、混淆矩阵等)自动保存至train_result/fer_yolov8s/


训练参数

参数名说明
模型yolov8sSmall 规格,兼顾精度与速度
输入分辨率640 × 640标准 YOLO 输入尺寸
训练轮次100(早停于第 93 轮)patience=25 触发早停
批大小16适配 12 GB 显存
优化器AdamW自适应权重衰减优化
初始学习率0.001余弦退火衰减
终止学习率lr0 × 0.01衰减至 0.00001
权重衰减0.0005L2 正则化,抑制过拟合
预热轮次3稳定初期梯度
训练设备NVIDIA RTX 3060 12GCUDA 加速
数据加载线程4DataLoader workers

训练指标与可视化

最终评估指标(测试集)

指标数值含义
mAP@500.8649IoU 阈值 0.5 下的平均精度均值
mAP@50-950.7177IoU 从 0.5~0.95 步长 0.05 的综合均值
Precision0.8316预测为正类中真正正类的比例
Recall0.8105实际正类中被正确预测的比例

损失曲线说明

训练过程中记录三类损失,均保存于train_result/fer_yolov8s/results.csv

损失类型含义正常趋势
Box Loss预测框与标注框的位置偏差(CIoU Loss)持续下降并趋于平稳
Cls Loss表情分类交叉熵损失快速下降后趋于平稳
DFL Loss分布式焦点损失,优化边界框回归精度缓慢下降

验证集损失(val/box_loss、val/cls_loss)与训练损失同步下降且差距不大,说明模型未出现明显过拟合。

指标曲线说明

曲线含义
Precision 曲线随训练轮次提升,代表误检率下降
Recall 曲线随训练轮次提升,代表漏检率下降
mAP@50 曲线综合精度指标,早期快速爬升后趋于收敛
mAP@50-95 曲线更严格的定位精度指标,收敛更慢但更能体现模型质量

项目截图


系统功能

系统基于PyQt6构建可视化交互界面,采用浅色主题,顶部导航栏设计,包含六大功能模块:

图片识别

  • 支持 JPG / PNG / BMP / WebP 格式
  • 一键加载图片,YOLOv8 推理检测人脸区域并输出表情类别
  • 带标注的结果图实时展示(彩色检测框 + 中文标签)
  • 统计摘要:检测人脸总数、表情种类、平均置信度、最高置信度
  • 表情分布可视化(Matplotlib 横向条形图)
  • 支持导出标注图片、导出 CSV 检测明细

视频识别

  • 支持 MP4 / AVI / MOV / MKV 等主流视频格式
  • 可设定每隔 N 帧检测一次,兼顾速度与密度
  • 实时播放标注画面 + 帧进度条
  • 当前帧与累计检测统计同步展示

摄像头实时检测

  • 支持多摄像头设备切换(设备号 0~10)
  • 实时推流 + 表情检测,可随时开启/暂停检测
  • 截图保存功能(保存至train_result/screenshots/
  • 本次会话累计统计一键存入历史记录

检测历史

  • 自动记录每次图片、视频、摄像头检测结果
  • 支持按类型筛选(图片 / 视频 / 摄像头)及关键词搜索
  • 点击记录查看详细检测信息
  • 支持历史数据导出为 CSV

模型管理

  • 默认加载train_result/fer_yolov8s/weights/best.pt
  • 支持浏览加载任意 YOLOv8 权重文件
  • 可动态调节置信度阈值(conf)与 IoU 阈值,实时生效
  • 展示模型基本信息、文件大小及全部类别说明

训练指标展示

  • 自动扫描train_result/下所有实验目录
  • 绘制训练/验证损失曲线、mAP 曲线、Precision/Recall 曲线
  • 展示最终轮次四项核心指标的汇总柱状图

技术栈

层次技术用途
深度学习框架PyTorch模型训练底层计算
目标检测Ultralytics YOLOv8人脸定位 + 表情分类
图形界面PyQt6桌面 GUI 框架
样式系统QSS(Qt Style Sheets)浅色主题
图表绘制Matplotlib训练曲线、分布图
图像处理OpenCV视频读写、帧处理
中文标注Pillow检测框中文标签渲染
数据处理NumPy矩阵运算与图像转换
历史存储JSON轻量级本地检测历史
编程语言Python 3.9

项目结构

c166/ │ ├── app.py # 系统启动入口 ├── train.py # 模型训练入口 │ ├── fer-dataset-yolo/ # 数据集 │ ├── loopy.yaml # 数据集配置 │ ├── train/ # 训练集(图片 + 标注) │ └── test/ # 测试集(图片 + 标注) │ ├── config/ │ └── train_config.py # 训练超参数配置 │ ├── core/ # 核心逻辑层 │ ├── detector.py # YOLOv8 推理封装 + 标注绘制 │ ├── workers.py # QThread 后台检测线程 │ └── trainer.py # 训练器封装 │ ├── ui/ # 界面层 │ ├── main_window.py # 主窗口(顶部导航 + 页面堆栈) │ ├── utils/ │ │ ├── styles.py # 全局 QSS 样式表 │ │ ├── history.py # 检测历史读写管理 │ │ └── image_utils.py # 图像格式转换工具 │ └── pages/ │ ├── image_page.py # 图片识别页 │ ├── video_page.py # 视频识别页 │ ├── camera_page.py # 摄像头实时检测页 │ ├── history_page.py # 检测历史页 │ ├── model_page.py # 模型管理页 │ └── metrics_page.py # 训练指标展示页 │ └── train_result/ # 训练产物(自动生成) └── fer_yolov8s/ ├── weights/ │ ├── best.pt # 最优模型权重 │ └── last.pt # 最终轮次权重 ├── results.csv # 逐轮训练指标 ├── confusion_matrix.png # 混淆矩阵 └── ... # PR 曲线、F1 曲线等

快速开始

环境安装

pipinstall-rrequirements.txt

启动训练

python train.py

训练完成后权重自动保存至train_result/fer_yolov8s/weights/best.pt

启动系统

python app.py

系统会自动加载默认最优权重,若权重不存在,可在【模型管理】页手动选择。


开发信息

  • 作者:Jay
  • 定制联系:vx:Jay8059
  • 开发年份:2026

本项目支持二次开发和定制扩展,可根据实际需求调整功能模块、页面样式、模型参数、数据库字段和部署方式。如需定制开发或远程部署,可通过微信 Jay8059 联系。

http://www.jsqmd.com/news/1219901/

相关文章:

  • 长沙爱彼回收价格查询及各大回收平台实测排行(2026年7月最新) - 尊奢回收二奢平台
  • [具身智能-579]:有 RS422 全双工,工业设备依然大量用 RS485 的核心原因:支持一主多从总线型组网
  • 猫抓浏览器插件:5步掌握免费网页视频下载的终极技巧
  • 2026年最新亨得利官方售后网点核验报告全国60+官方网点地址公布 - 亨得利中国服务中心
  • 办理时间紧怎么委托兄弟姐妹卖二手住宅?2026在线公证委托书攻略 - 跑政通
  • Voice-change-O-matic开发揭秘:Web Audio API音频处理管道的实现原理
  • HarmonyOS ArkTS 实战:实现一个校园水电费查询缴费应用
  • Steam Deck模拟器终极指南:用EmuDeck一键配置复古游戏天堂
  • 华硕笔记本性能管理终极指南:用GHelper告别臃肿软件,3步实现精准控制
  • 北京百达翡丽回收价格查询和靠谱回收平台实测排行(2026年7月最新) - 嘉价奢侈品回收平台
  • 温州旧金变现别乱找!7 家全城免费上门黄金回收门店整理,乡镇、工业园不加远程费 - 不晚生活号
  • 揭秘头部品牌AI数字人直播系统:从0到1搭建全流程,含5大避坑清单与实时推流调优参数
  • 微信批量消息发送终极指南:5分钟完成100位好友的自动化沟通
  • Cursor连接Oracle时ORA-12541频发?我们压测了17种网络拓扑,锁定DNS缓存+TNS别名解析双瓶颈
  • GHelper终极指南:华硕笔记本性能调校的轻量化革命
  • 2026最新!亨得利全国官方售后网点核验报告出炉,超60家正规服务门店详细地址公布 - 亨得利中国服务中心
  • 网络安全学习第138天
  • live-app-android源码深度解读:从启动到位置追踪的完整代码流程
  • 终极指南:如何在Mac上打造专属的美剧影院
  • HarmonyOS ArkTS 实战:实现一个校园成绩查询与学分统计应用
  • 星穹铁道跃迁记录导出工具:免费终极数据分析方案
  • 深入解析TI C2000 ePWM高级功能:斩波、故障保护与数字比较实战
  • 【OpenHarmony/HarmonyOs 】18|好友申请状态机:从 `pending` 到可回溯流转,避免重复申请与脏状态
  • Flutter悬浮窗组件flutter_floating开发指南
  • 3分钟掌握C++ CSV解析神器:告别繁琐数据处理,提升开发效率10倍
  • 零基础怎么在APS官网核验CPPM证书 - 众智商学院职业教育
  • 【AI语音转文字会议记录终极指南】:20年IT专家亲测的7大避坑法则与实时准确率提升42%实战方案
  • AM275x BCDMA寄存器深度解析:从控制到状态,构建高效DMA数据流
  • Android字节码插桩技术详解与应用实践
  • 雷达中国官方售后服务中心|官方地址及售后服务热线权威信息通告(2026年7月更新) - 亨得利钟表维修中心