简介:本文围绕YOLOv5目标检测框架,详细阐述人脸表情情绪情感检测的完整流程,涵盖数据集准备、模型训练、评估指标与推理部署,为开发者提供从理论到实践的完整指南。
人脸表情情绪情感检测是计算机视觉领域的重要研究方向,广泛应用于人机交互、心理健康监测、教育反馈等场景。传统方法依赖手工特征提取,而基于深度学习的目标检测框架(如YOLOv5)通过端到端学习,能够更高效地捕捉面部细微表情变化。本文以YOLOv5为核心,系统介绍从数据集构建、模型训练到评估推理的全流程,为开发者提供可落地的技术方案。
主流人脸表情数据集包括FER2013、CK+、AffectNet等,其中AffectNet包含超过100万张标注图像,覆盖8类基本情绪(中性、快乐、悲伤、愤怒、恐惧、厌恶、惊讶、蔑视)。标注时需确保:
为提升模型泛化能力,需对训练数据进行增强:
示例代码(使用Albumentations库):
import albumentations as Atransform = A.Compose([A.RandomRotate90(),A.HorizontalFlip(p=0.5),A.OneOf([A.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2),A.GaussianBlur(p=0.1),], p=0.3),A.Cutout(num_holes=1, max_h_size=32, max_w_size=32, p=0.2),])
yolov5s.pt(轻量级)或yolov5l.pt(高精度)作为初始化。关键参数配置示例(data.yaml与train.py):
# data.yamltrain: ../datasets/emotions/train/imagesval: ../datasets/emotions/val/imagesnc: 8 # 情绪类别数names: ['neutral', 'happy', 'sad', 'angry', 'fear', 'disgust', 'surprise', 'contempt']
# 训练命令python train.py --img 640 --batch 16 --epochs 100 \--data data.yaml --weights yolov5s.pt --name emotion_detection \--optimizer SGD --lr0 0.01 --lrf 0.01 --momentum 0.937 --weight_decay 0.0005
使用plots.py生成训练曲线与混淆矩阵:
from utils.plots import plot_resultsplot_results(file='runs/train/emotion_detection/results.csv',save_dir='runs/train/emotion_detection/')
import torchfrom models.experimental import attempt_loadfrom utils.general import non_max_suppression, scale_boxesfrom utils.datasets import letterboximport cv2# 加载模型model = attempt_load('runs/train/emotion_detection/weights/best.pt')model.eval()# 预处理img = cv2.imread('test.jpg')img0 = img.copy()img = letterbox(img, new_shape=640)[0]img = img[:, :, ::-1].transpose(2, 0, 1) # BGR to RGBimg = torch.from_numpy(img).to('cuda').float() / 255.0if img.ndimension() == 3:img = img.unsqueeze(0)# 推理pred = model(img)[0]pred = non_max_suppression(pred, conf_thres=0.25, iou_thres=0.45)# 后处理for det in pred:if len(det):det[:, :4] = scale_boxes(img.shape[2:], det[:, :4], img0.shape).round()for *xyxy, conf, cls in det:label = f'{names[int(cls)]} {conf:.2f}'# 绘制边界框与标签
基于YOLOv5的人脸表情情绪检测系统,通过合理的数据集构建、参数优化与部署策略,能够在复杂场景下实现高精度、实时的情绪识别。未来工作可探索结合时序信息(如3D-CNN)或引入自监督学习,进一步提升模型鲁棒性。开发者可根据实际需求调整模型规模(YOLOv5n~YOLOv5x)与部署环境,平衡性能与成本。