文章目录
概要一、整体资源介绍技术要点功能展示:功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出(xls格式)功能6 支持切换检测到的目标查看 二、数据集三、算法介绍1. YOLOv8 概述简介 ? 四、模型训练步骤? 五、模型评估步骤? 六、训练结果?完整代码 总结
往期经典回顾
项目 | 项目 |
---|---|
基于yolov8的车牌识别系统 | 基于yolov8/yolov5的钢铁缺陷检测系统 |
概要
随着5G时代的到来,我们正迈入一个万物互联的智能世界。伴随着这一进程,各类AI算法和深度学习神经网络不断涌现,同时,低功耗、高性能的智能芯片逐渐进入市场。这些技术的快速迭代和发展,加速了智能设备在日常生活中的普及应用。如今,人脸识别技术已经广泛融入社会生活的方方面面,而人脸表情识别作为其中的重要分支,也成为了研究的热点方向。
人脸表情识别在教育、智能医疗、人机交互等领域具有广阔的应用前景。人脸表情是面部器官和肌肉动作共同作用下的表现结果。心理学研究表明,人脸表情不仅仅限于基本的高兴、悲伤、平静等,还包括许多复杂的复合表情,比如惊喜(高兴+惊讶)、紧张(恐惧+焦虑)等。随着社会的智能化进程加快,人脸表情识别技术的应用场景将更加广泛。因此,当前急需一种识别效果好、应用价值高的人脸表情识别系统,以满足各类智能化需求。
关键词:人脸表情;深度学习;特征融合;注意力机制;卷积神经网络
一、整体资源介绍
项目中所用到的算法模型和数据集等信息如下:
算法模型:
yolov8、yolov8 + SE注意力机制
数据集:
网上下载的数据集,格式都已转好,可直接使用。
以上是本套代码算法的简单说明,添加注意力机制是本套系统的创新点 。
技术要点
OpenCV:主要用于实现各种图像处理和计算机视觉相关任务。Python:采用这种编程语言,因其简洁易学且拥有大量丰富的资源和库支持。数据增强技术: 翻转、噪点、色域变换,mosaic等方式,提高模型的鲁棒性。功能展示:
部分核心功能如下:
功能1: 支持单张图片识别功能2: 支持遍历文件夹识别功能3: 支持识别视频文件功能4: 支持摄像头识别功能5: 支持结果文件导出(xls格式)功能6: 支持切换检测到的目标查看功能1 支持单张图片识别
系统支持用户选择图片文件进行识别。通过点击图片选择按钮,用户可以选择需要检测的图片,并在界面上查看所有识别结果。该功能的界面展示如下图所示:
功能2 支持遍历文件夹识别
系统支持选择整个文件夹进行批量识别。用户选择文件夹后,系统会自动遍历其中的所有图片文件,并将识别结果实时更新显示在右下角的表格中。该功能的展示效果如下图所示:
功能3 支持识别视频文件
在许多情况下,我们需要识别视频中的目标。因此,系统设计了视频选择功能。用户点击视频按钮即可选择待检测的视频,系统将自动解析视频并逐帧识别多个目标,同时将识别结果记录在右下角的表格中。以下是该功能的展示效果:
功能4 支持摄像头识别
在许多场景下,我们需要通过摄像头实时识别目标。为此,系统提供了摄像头选择功能。用户点击摄像头按钮后,系统将自动调用摄像头并进行实时识别,识别结果会即时记录在右下角的表格中。
功能5 支持结果文件导出(xls格式)
本系统还添加了对识别结果的导出功能,方便后续查看,目前支持导出xls数据格式,功能展示如下:
功能6 支持切换检测到的目标查看
二、数据集
该数据集包含7种类别的人脸表情图片,并已按照train
、val
、test
文件夹分类,且配备了适用于YOLO
格式的标注文件,用户可以直接使用。
fer2013人脸表情数据集包含35,886张人脸表情图片,分辨率固定为48×48的灰度图像。数据集划分为:训练集(Training) 28,708张,公共验证集(PublicTest)和私有验证集(PrivateTest)各3,589张。
数据集中共有7种表情类别,并使用数字标签0-6进行标注。具体表情及其标签对应关系如下:
0
- anger(生气)
1
- disgust(厌恶)
2
- fear(恐惧)
3
- happy(开心)
4
- sad(伤心)
5
- surprised(惊讶)
6
- normal(中性)
但是,数据集并没有直接给出图片,而是将表情、图片数据、用途的数据保存到csv文件中,如下图所示,
我提供的都是将其转换好的,可以直接拿来训练。
转换后的数据样式如下:
三、算法介绍
1. YOLOv8 概述
简介
YOLOv8算法的核心特性和改进如下:
全新SOTA模型YOLOv8 提供了全新的最先进(SOTA)的模型,包括P5 640 和 P6 1280分辨率的目标检测网络,同时还推出了基于YOLACT的实例分割模型。与YOLOv5类似,它提供了N/S/M/L/X五种尺度的模型,以满足不同场景的需求。Backbone
骨干网络和Neck部分参考了YOLOv7 ELAN的设计思想。
将YOLOv5的C3结构替换为梯度流更丰富的C2f结构。
针对不同尺度的模型,调整了通道数,使其更适配各种任务需求。
网络结构如下:
相比之前版本,YOLOv8对模型结构进行了精心微调,不再是“无脑”地将同一套参数应用于所有模型,从而大幅提升了模型性能。这种优化使得不同尺度的模型在面对多种场景时都能更好地适应。
然而,新引入的C2f模块虽然增强了梯度流,但其内部的Split等操作对特定硬件的部署可能不如之前的版本友好。在某些场景中,C2f模块的这些特性可能会影响模型的部署效率。
? 四、模型训练步骤
使用pycharm打开代码,找到train.py
打开,示例截图如下:
修改 model_yaml
的值,根据自己的实际情况修改,想要训练 yolov8s
模型 就 修改为 model_yaml = yaml_yolov8s
, 训练 添加SE注意力机制的模型就修改为 model_yaml = yaml_yolov8_SE
修改data_path
数据集路径,我这里默认指定的是traindata.yaml
文件,如果训练我提供的数据,可以不用改
修改 model.train()
中的参数,按照自己的需求和电脑硬件的情况更改
# 文档中对参数有详细的说明model.train(data=data_path, # 数据集 imgsz=640, # 训练图片大小 epochs=200, # 训练的轮次 batch=2, # 训练batch workers=0, # 加载数据线程数 device='0', # 使用显卡 optimizer='SGD', # 优化器 project='runs/train', # 模型保存路径 name=name, # 模型保存命名 )
修改traindata.yaml
文件, 打开 traindata.yaml
文件,如下所示:
在这里,只需修改 path 的值,其他的都不用改动(仔细看上面的黄色字体),我提供的数据集默认都是到 yolo
文件夹,设置到 yolo 这一级即可,修改完后,返回 train.py
中,执行train.py
。
打开 train.py
,右键执行。
出现如下类似的界面代表开始训练了
训练完后的模型保存在runs/train文件夹下
? 五、模型评估步骤
打开val.py
文件,如下图所示:
修改 model_pt
的值,是自己想要评估的模型路径
修改 data_path
,根据自己的实际情况修改,具体如何修改,查看上方模型训练中的修改步骤
修改 model.val()
中的参数,按照自己的需求和电脑硬件的情况更改
model.val(data=data_path, # 数据集路径 imgsz=300, # 图片大小,要和训练时一样 batch=4, # batch workers=0, # 加载数据线程数 conf=0.001, # 设置检测的最小置信度阈值。置信度低于此阈值的检测将被丢弃。 iou=0.6, # 设置非最大抑制 (NMS) 的交叉重叠 (IoU) 阈值。有助于减少重复检测。 device='0', # 使用显卡 project='runs/val', # 保存路径 name='exp', # 保存命名 )
修改完后,即可执行程序,出现如下截图,代表成功(下图是示例,具体以自己的实际项目为准。)
评估后的文件全部保存在在 runs/val/exp...
文件夹下
? 六、训练结果
我们每次训练后,会在 run/train 文件夹下出现一系列的文件,如下图所示:
如果大家对于上面生成的这些内容(confusion_matrix.png、results.png
等)不清楚是什么意思,可以在我的知识库里查看这些指标的具体含义,示例截图如下:
?完整代码
如果您希望获取博文中提到的所有实现相关的完整资源文件(包括测试图片、视频、Python脚本、UI文件、训练数据集、训练代码、界面代码等),这些文件已被全部打包。以下是完整资源包的截图:
您可以通过下方演示视频的视频简介部分进行获取,获取位置看下方图片文字:
演示视频:
基于深度学习的人脸表情检测系统(v8)
总结
本文介绍的基于深度学习的人脸表情识别系统,通过引入SE注意力机制等创新点,有效提升了表情识别的精度和系统的稳定性。SE注意力机制能够为模型分配更合适的特征权重,使其更敏锐地捕捉到面部细微表情变化,从而增强模型的识别能力。
系统基于YOLOv8等先进的目标检测框架,实现了高效快速的人脸定位与表情分类,使得在各种复杂场景下,系统依然能够保持高效的检测速度和识别准确率。通过结合YOLOv8的强大检测能力与SE模块的特征优化,表现出了良好的泛化能力和稳定性。