基于卷积神经网络的人脸笑容识别和性别识别

news2024/11/28 14:45:46

文章目录

  • 前言
  • 数据集准备
  • 数据标注
  • 数据集格式转换
  • AI Studio平台介绍及使用
    • 数据集准备
    • 创建工程
    • 模型配置
    • 模型训练
  • 模型转化及优化
    • 模型减支
    • 模型转化
  • 验证测试
  • 总结分析
  • 参考文献

前言

环境:
python 3.7.9
本次项目的内容是基于卷积神经网络的人脸笑容识别和性别识别。
笑容识别:
借助CNN的优势,模型能够自动识别人脸图像中是否含有笑容这一特征。通过对724张带有笑容和非笑容标签的人脸图像样本进行训练,模型能够学习到笑容的关键特征。通过提取这些特征,并结合适当的分类算法,模型能够在新的人脸图像上进行的笑容识别。
性别识别:
通过这个模型,能够自动地根据人脸图像来判断人的性别。
使用了八百多张有标记性别的人脸图像作为训练数据。通过学习这些图像中不同性别之间的特征差异,模型可以识别出人脸图像中的性别信息。通过结合适当的分类算法,模型能够在新的人脸图像上进行性别识别。

本文主要以笑容识别为例,性别检测与笑容检测实现方法相同可以照搬。

数据集准备

如果能够找到相应的数据集建议直接从网上下载,避免自己准备的图片数据集有误,这一步我将会讲解我在数据集准备时候的方法和遇到的问题

首先我们进行了数据集的准备,由于第一次进行模型数据集的收集没有经验,导致后面对数据集进行处理出错埋下了隐患。在进行人脸数据收集时,我们小组通过python写了一个通过输入关键字,自动下载有关图片的程序。这个程序大大节省了收集数据的时间。
在这里插入图片描述
之后,我们通过再次通过python程序将数据集整理成为统一的命名格式,并打乱有笑容与无笑容的图片。
在这里插入图片描述

数据标注

通过在python的环境中安装labelimg,进行数据集的标注。labelimg的使用方法请参考:数据标注

进行数据标注之前要选择YOLO数据集格式
在这里插入图片描述

进行数据标志的时候需要注意的是,如果是多人合作进行数据标注的话,由于最开始的对于不同标签的标注顺序不同,会导致生成的标签不一致。因此,在多人标注数据之前要按照相同的顺序对每一种数据类型进行一次标注。避免由于最开始的标注顺序不同人所标注的标签代号顺序不同。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在完成数据集的标注之后,最好抽样检查一下,是否图片与生成的label文本文件中的标签一致。我这里0代表happy,1代表sad(没有笑容)。

在这里插入图片描述

数据集格式转换

完成数据集的标注之后,由于我们使用的训练平台不支持YOLO数据集,因此需要将YOLO格式的数据集转换成为COCO类型的数据集。转换流程参考:数据转换

AI Studio平台介绍及使用

将刚刚生成的COCO类型的数据源集打包上传到平台上进行模型训练的准备。

以下部分是以参考文献中口罩检测为例,我这里直接使用了口罩检测的操作步骤截图,实际上笑容识别和性别识别操作是一样的

数据集准备

因为数据集过大,启动一个项目,然后直接上传是不行的,所以先创建一个数据集,再在数据集基础上创建项目。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

创建工程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以下页面是点击4.选中我们创建的数据集弹出的框。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

模型配置

在configs下面有很多模型,文件夹名就是模型名字,除了可以使用ppyoloe,还有yolov5,yolov8等。
在这里插入图片描述
选择一个模型文件夹,修改文件夹里面的配置文件,我们选择的是small版本的ppyoloe,需要训练80 epochs。
在这里插入图片描述
我们需要把num_classes修改成2,因为我们的数据集只有两个标签,分别是nomask,mask。改完记得ctrl+s保存。
在这里插入图片描述
因为配置文件中要求数据放到dataset/mask里面,所以需要把数据集放置到此处。
在这里插入图片描述
新建一个mask文件夹,把解压过后的数据文件夹拖到mask里面。
在这里插入图片描述
  为了方便,直接剪切。
  在这里插入图片描述
  粘贴到dataset文件夹下,注意红色框的路径。

在这里插入图片描述

模型训练

因为我们是基础版本环境,没有GPU,所以需要切换环境。如果你像下面这样切换环境,大概率你是切换不了的,因为文件过多过大。
在这里插入图片描述
切到这个页面停止
在这里插入图片描述
重启环境,但是这次你要选择GPU环境,根据自己的算力卡富余量决定选哪个选项,土豪的话,四个GPU起飞。
在这里插入图片描述
这个模型选这个就可以,新人有免费时长,千万不要浪费,如果模型不复杂数据集不大可以选择算力配置低一点的,如果选择高算力的配置也需要考虑自己的模型能不能在免费时长内完成训练,如果选择不当也可能会导致白白训练几个小时。
在这里插入图片描述
在ppyoloe模型文件夹里面有个readme_cn.md,里面有训练模型的命令。将改命令复制到ppyoloe.ipynb文件里面执行。
在这里插入图片描述
命令是多卡训练,我们需要稍作修改,换成单卡训练,因为你启动工程的时候就选了一个卡。

!python tools/train.py -c configs/ppyoloe/ppyoloe_plus_crn_s_80e_coco.yml 

在这里插入图片描述
模型训练标志,此时是0 epoch,eta时间时间由模型复杂度和数据集的体量决定。时间会变,我做的笑容识别和性别识别,在训练四十次的情况下不到半小时就训练完成了,所以可以开个黑回来刚好合适。
在这里插入图片描述
找到自己的模型放置位置,在生成的output文件夹下。如下图操作可以获取模型model_final.pdparams的绝对路径,然后粘贴至weights=后面,导出模型。

!python tools/export_model.py -c configs/ppyoloe/ppyoloe_plus_crn_s_80e_coco.yml -o weights=模型参数绝对路径

在这里插入图片描述
导出模型会放置output_inference文件夹下。
在这里插入图片描述
下载导出的模型,用于下模型转换当中。
在这里插入图片描述
在这里插入图片描述

模型转化及优化

模型减支

模型减支的目的就是从输入到两个输出concat_14.tmp_0,tmp_16为止,后面的节点都删掉。

 运行以下命令:

python prune_paddle_model.py --model_dir ppyoloe_crn_s_80 --model_filename model.pdmodel --params_filename model.pdiparams --output_names tmp_16 concat_14.tmp_0 --save_dir export_model

在这里插入图片描述
运行过后新增一个减支完成的模型文件夹。
在这里插入图片描述

模型转化

先把paddle模型转换为onnx,需要在环境里面提前安装paddle2onnx。执行以下命令。

paddle2onnx --model_dir export_model --model_filename model.pdmodel --params_filename model.pdiparams --input_shape_dict "{'image':[1,3,640,640]}" --opset_version 11 --save_file ppyoloe_crn_s_80.onnx

在这里插入图片描述
执行生成的ppyoloe_crn_s_80.onnx。
在这里插入图片描述
onnx转xml,bin(OpenVINO)。

mo --input_model ppyoloe_crn_s_80.onnx

在这里插入图片描述
 执行结果。
在这里插入图片描述

验证测试

笑容检测:
在这里插入图片描述
性别检测:
在这里插入图片描述

总结分析

缺陷:对于微笑识别不敏感,只有比较明显的露齿笑能够精确判断
原因:数据集选取过于极端,原因在于爬取图片数据时候,关键词限制了获取到的数据集内容,大多都是比较夸张笑容的图片数据,这使得数据集不平衡。
在这里插入图片描述

缺陷:过于将头发特征做为判断性别的条件。
原因:选择的数据集中长发是女性区别于男性的主要特征。
在这里插入图片描述

参考文献

口罩检测——环境准备(1)
口罩检测——数据准备(2)
口罩检测——模型训练(3)
口罩检测——模型转换(4)
添加链接描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/769353.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

音频功放芯片推荐,功放特点及选型注意事项

音频放大器是用于推动扬声器发声,从而重现声音的功放装置,凡是发声的电子产品中都用到它;有助于增加从输入设备馈送的音频波的幅度,然后传输从毫瓦到千瓦的更高幅度的音频波。 目前市面上使用的电子设备都安装了放大器系统&#…

油画|艺术|三峡,诗情画意《彩云间》

《彩云间》尺寸:150x130cm陈可之.2006年绘清晨,山顶上的云霞流向天际,山峦与流云,融为一体。霞光,给山峰着上了五光十色,迷幻的光影,仿佛给大自然披上了一件五彩的轻纱。时空飘渺,给…

Spring Cloud Alibaba【OpenFeign实现服务降级、Dubbo实现服务生产者、 Dubbo消费者调用接口 】(三)

目录 服务调用_OpenFeign实现服务降级 服务调用_Dubbo实现服务生产者 服务调用_Dubbo消费者调用接口 服务调用_OpenFeign实现服务降级 引入降级依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba…

基于 Nginx 实现一个灰度上线系统

目录 前言 原理 实现 项目版本准备 用 nginx 实现灰度 跑一个 nginx 服务 修改下配置文件 重新跑个 nginx 容器 实现流量控制的功能 流量染色 总结 前言 灰度系统可以将流量分成多份&#xff0c;一部分走新版本代码&#xff0c;一部分走老版本代码&#xff0c;从而降…

Java虚拟机——字节码指令简介

Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字&#xff08;称为操作码&#xff09; 以及 跟随其后的零至多个代表此操作所需的参数&#xff08;称为操作数&#xff09;构成。大多数指令都不包括操作数&#xff0c;只有一个操作码&#xff0c;指令参数都存放…

ACL论文-系列2

文章目录 关系抽取——OD-RTE: A One-Stage Object Detection Framework for Relational Triple Extraction目标函数1——object 四个顶点概率目标函数2——span的概率总目标函数 Revisiting Relation Extraction in the era of Large Language ModelsCan NLI Provide Proper I…

TCP 协议简记 01 - TCP 包格式 连接管理

最近对 TCP 协议做了一次系统性的学习&#xff0c;种巨复杂的知识&#xff0c;只有系统性的总结归纳并且不断的实践才能够真正的掌握。后续会分为几篇文章来对 TCP 协议进行系统性的总结&#xff0c;帮助自己更好的理解 TCP 协议&#xff0c;也希望能够帮助到和我一样被 TCP 弄…

STM32MP157驱动开发——LED驱动(设备树)

文章目录 设备树驱动模型如何使用设备树写驱动程序设备树节点要与 platform_driver 能匹配设备树节点指定资源&#xff0c;platform_driver 获得资源 LED 模板驱动程序的改造&#xff1a;设备树驱动模型修改设备树&#xff0c;添加 led 设备节点修改 platform_driver 的源码编译…

【论文阅读】聚集多个启发式信号作为监督用于无监督作文自动评分

摘要 本文提出一个新的无监督的AES方法ULRA&#xff0c;它不需要真实的作文分数标签进行训练&#xff1b;ULRA的核心思想是使用多个启发式的质量信号作为伪标准答案&#xff0c;然后通过学习这些质量信号的聚合来训练神经自动评分模型。为了将这些不一致的质量信号聚合为一个统…

springboot 多数据源配置

1.引入相关pom文件 <!-- spring boot 启动 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><exclusions><exclusion><artifactId>log4j-api</artifactId&…

7.5Java EE——Bean的装配方式

一、基于XML的装配 两种基于XML的装配方式 在基于XML的装配就是读取XML配置文件中的信息完成依赖注入&#xff0c;Spring容器提供了两种基于XML的装配方式&#xff0c;属性setter方法注入和构造方法注入。下面分别对这两种装配方式进行介绍。 a.属性setter方法注入 属性sett…

Vuex 数据共享

文章目录 前言Vuex项目的创建state 配置项getters 配置项mutations 配置项actions 配置项 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 体现数据共享的概念 所有组件都可以使用那数据 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可…

时序数据库 TDengine 与金山云两大产品完成兼容互认证

万物互联时代&#xff0c;企业数字化转型和政企上云如火如荼。在云计算迎来重大发展机遇的同时&#xff0c;数据库在企业数字化转型中也扮演着重要的角色——随着业务量的激增&#xff0c;数据库的弹性扩容、容灾备份等需求逐渐显现&#xff0c;在此挑战下&#xff0c;时序数据…

前端学习记录~2023.7.17~CSS杂记 Day9

前言一、浮动1、使盒子浮动起来2、清除浮动3、清除浮动元素周围的盒子&#xff08;1&#xff09;clearfix 小技巧&#xff08;2&#xff09;使用 overflow&#xff08;3&#xff09;display: flow-root 二、定位1、定位有哪些2、top、bottom、left 和 right3、定位上下文4、介绍…

jupyter notebook更换虚拟环境(内核)

jupyter notebook更换虚拟环境&#xff08;内核&#xff09; 创建一个新的虚拟环境 # stk_env 虚拟环境的名字&#xff0c;任取。 conda create -n stkenv python3.9激活虚拟环境 conda activate stkenv安装ipykernel # 为该虚拟环境&#xff0c;安装内核。 conda install -c a…

rabbitmq模块启动报java.net.SocketException: socket closed的解决方法

问题 最近在接手一个项目时&#xff0c;使用的是spring-cloud微服务构架&#xff0c;mq消息消费模块是单独一个模块&#xff0c;但启动这个模块一直报如下错误&#xff1a; java.net.SocketException: socket closed 这个错误是这个模块注册不到nacos报的错&#xff0c;刚开…

FCOS 论文学习

1. 解决了什么问题&#xff1f; 之前的目标检测器如 RetinaNet、SSD、YOLOv3 都依赖于 anchors。基于 anchors 的检测器有如下三个缺点&#xff1a; 检测表现对于 anchors 的大小、宽高比和数量等超参数很敏感&#xff1b;即使精心设计了 anchors&#xff0c;但由于大小和宽高…

架构训练营学习笔记:4-2 存储架构模式之复制架构

高可用的关键指标 问题&#xff1a;分为故障跟灾难。不是有了多活架构就不在用复制架构 &#xff0c;还是之前的合适原则&#xff1a;多活架构的技术复杂度 跟成本都比复制架构高。 高可用的关键指标 恢复时间目标(RecoveryTimeObjective&#xff0c;RTO)指为避免在灾难发生后…

rabbitmq部署(docker方式)

前言&#xff1a;rabbitmq一旦有漏洞&#xff0c;版本升级麻烦&#xff0c;于是改为docker部署 环境&#xff1a;centos7 #停掉之前的服务 systemctl stop rabbitmq-server systemctl disable rabbitmq-server 查了官网&#xff0c;当前3.11.x 最高版本是3.11.19, 虽然3.12…

【开源分享】在线客服系统源代码-thinphp网站在线客服系统源码(附源码完整搭建教程)...

本文的核心是一个多国语言在线客服聊天系统源码。我们将在这里保持非常简单。 这是一款旧版本的PHP客服源码。 基于ThinkPHP5 workerman&#xff0c;整体架构比较老&#xff0c;PHP客服端以及界面等需要在php-fpm下运行&#xff0c;即时通讯websocket服务端需要命令行执行。 源…