基于Python的人脸检测与分类

本文介绍了基于Python的人脸检测与分类算法,通过改进的RESNET101_V2网络实现小目标敏感,采用FDDB数据集进行训练。算法分为人脸检测和分类两部分,检测流程包括ROI处理、特征提取和Bounding Box回归,训练策略借鉴YOLO,测试结果显示网络能够有效识别人脸。
摘要由CSDN通过智能技术生成

人脸识别

算法简介

我们的算法可以分成两个部分,识别人脸位置和确定人脸分类。这两个部分可以看成:
1.检测出人脸之间相似性。
2.检测出人脸之间不同性。
由于这两项工作截然相反,所以我们使用了两个网络来分别完成这两项工作。

人脸检测

简述

我们的人脸检测网络采用了和Faster RCNN类似的策略,但我们在ROI Polling上进行了创新,兼顾了小目标检测和大目标检测,为此,我们还使用了改进后的RESNET101_V2的网络,使我们的网络对于小目标更加敏感。在增加了少量的运算单元后,我们的网络可以识别24*24像素下的人脸(甚至于更低!)。我们调整了网络结构,并没有采用传统的卷积网络(提取特征)+全连接层(分类)的结构,而是采用了全卷积结构,这让我们的识别网络的速度远远高于传统的神经网络识别方法,识别精度也高于传统的算子和特征值人脸识别算法。

数据集介绍

采用的数据集为FDDB数据集,该数据集图像+注释有600M左右。
图像有各种大小和形状,主要集中在(300600)*(300600)的像素上。
注:我们的训练网络不在乎训练图像的大小形状(只要长宽大于192就好)。
其注释内容为图像中的人脸椭圆框:

[ra, rb, Θ, cx, cy, s]
ra,rb:半长轴、半短轴
cx, cy:椭圆中心点坐标
Θ:长轴与水平轴夹角(头往左偏Θ为正,头往右偏Θ为负)
s:置信度得分

通过坐标变换后我们可以得到矩形框:

w = 2*max([abs(ra*math.sin(theta)),abs(rb*math.cos(theta))])
h = 2*max([abs(ra*math.cos(theta)),abs(rb*math.sin(theta))])
rect = [cx-w/2,cy-h/2,w,h]
即:
rect = [x,y,w,h](x,y为左上角坐标)

我们以图为单位,从图中抽取128个anchors,这128个anchors包括该图中的全部正例和随机的负例。最后使用我们进行坐标变换的矩形框进行Bounding Box回归。

算法介绍

流程图

img = tf.constant(img,shape = (1,h,w,mod),dtype = tf.float32) # 图像原始数据

# 使用无pool1&pool5的RESNET 101
net, endpoints = my_resnet(img,global_pool = False,num_classes=None,is_training=True,reuse = tf.compat.v1.AUTO_REUSE) # net's w&h = original_img's w&h / 8

我们进行模型搭建和使用的平台为windows10-python3.6.2-tensorflow-gpu。
首先,我们的图像(img_batch = [batch_size,h,w,mod],batch_size为图像的数量,h为图像高度,w为图像宽度,mod为图像通道数,这里我们处理的均为RGB三色彩图,所以我们的通道数均为3)通过我们改进版的RESNET101_V2网络,传统的RESNET101_V2的网络结构如下:www.biyezuopin.vip

而我们的网络去掉了pool1和pool5层,使网络放缩系数从32下降到了8。这使我们的网络对于小目标更加的敏感。通过了该网络后,我们得到了卷积后的信息图:img_batch_conv = [batch_size,h/8,w/8,2048]

weights = {
            'down':tf.compat.v1.get_variable(name = 'w_down',shape = [1,1,2048,1024]),# 降采样
            'feature':tf.compat.v1.get_variable(name = 'w_feature',shape = [1,1,1024,K*K*2])
            }
biases = {
            'down':tf.compat.v1.get_variable(name = 'b_down',shape = [1024,]), # 降采样
            'feature':tf.compat.v1.get_variable(name = 'b_
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python人脸检测与认证系统的设计流程图包括以下几个步骤: 1. 获取图像:首先,系统需要从用户处获取一张图像。这可以通过摄像头、照片或已保存的图像文件来实现。 2. 图像预处理:接下来,系统需要对获取到的图像进行预处理。这一步骤可以包括裁剪、调整大小和灰度化等操作,以便提高后续的人脸检测和识别的准确性和效率。 3. 人脸检测:使用已经训练好的人脸检测模型(如Haar级联检测器、深度学习模型等),系统对预处理后的图像进行人脸检测。这一步骤可以通过定位人脸的特征点、边界框或轮廓等方式来实现。 4. 人脸特征提取:在成功检测到人脸后,系统需要提取人脸的特征,以便后续的认证过程。常用的特征提取方法包括局部二值模式(LBP)、主成分分析(PCA)和人脸识别网络模型等。 5. 训练分类器:系统需要使用已提取的人脸特征来训练一个分类器或模型,以便将不同的人脸区分开来。训练分类器的方法包括支持向量机(SVM)、随机森林和深度学习模型等。 6. 人脸认证:在训练好分类器后,系统可以使用该分类器来对新的人脸进行认证。这一步骤可以通过计算人脸特征与已注册用户特征的相似度或距离来判断人脸是否匹配。 7. 结果输出:最后,系统将认证结果输出给用户。如果认证成功,则用户可以继续访问系统中的相关功能或资源;如果认证失败,则可能需要重新提交图像或进行其他验证方式。 通过以上流程图设计,Python人脸检测与认证系统可以实现对用户的人脸图像进行检测、特征提取和认证的功能,有效保障系统的安全性和可靠性。 ### 回答2: Python人脸检测与认证系统设计流程图如下: 1. 系统初始化:导入所需的Python库和模块,如OpenCV、numpy、dlib等。 2. 人脸检测:使用OpenCV或dlib库中的人脸检测算法,对输入的图像进行人脸检测。算法会返回一个或多个人脸的位置坐标。 3. 人脸对齐:根据检测到的人脸位置坐标,对人脸进行对齐和裁剪,以保持人脸在后续步骤中的统一性。 4. 人脸特征提取:使用dlib或其他相关库中的人脸特征提取算法,将每个人脸的特征转换为一个向量。这个向量可以用于后续的识别和认证。 5. 数据库比对:将得到的人脸特征向量与已存储在数据库中的特征向量进行比对。可以使用基于距离的相似度算法,如欧氏距离或余弦相似度,来计算两个向量之间的相似度。 6. 人脸认证:根据数据比对结果,判断输入的人脸是否与数据库中的匹配。根据设定的相似度阈值,判断是否认证成功。如果相似度高于阈值,则认证成功;否则,认证失败。 7. 结果展示:根据认证的结果,将结果以图像或文字的方式展示给用户。如果认证成功,可以显示“认证通过”;如果认证失败,可以显示“认证失败,请重试”或者“用户不存在”。 8. 系统优化:根据用户反馈和系统需求,对系统进行优化和改进,如改进人脸检测算法、优化人脸对齐和特征提取过程等。 9. 系统测试:使用真实数据对系统进行测试和评估,分析系统在不同场景和条件下的性能和准确度。 10. 系统部署:将系统部署到实际使用环境中,保证系统的稳定性和可靠性。同时进行监测和维护,及时处理可能出现的问题和异常。 ### 回答3: Python人脸检测与认证系统设计流程图如下: 1. 开始:系统启动。 2. 人脸检测:使用Python中的人脸检测库(如OpenCV)进行人脸检测。通过处理图像或视频流,检测出图像中的人脸,并标记出人脸边界框。 3. 人脸特征提取:从每个检测到的人脸中提取出关键的人脸特征点或特征描述符。可以使用深度学习模型(如人脸关键点检测模型)或特征提取算法(如Dlib库)来实现。 4. 人脸识别:将提取的人脸特征与已有的人脸特征数据库进行比对,进行人脸识别。可以使用机器学习算法(如支持向量机、K近邻等)或深度学习模型(如人脸识别模型)来实现。 5. 认证结果判断:判断人脸识别的结果是否符合认证要求。可以根据比对得分、置信度或阈值进行判断。 6. 认证通过:如果人脸识别结果符合认证要求,则认证通过,允许对应的操作或权限。 7. 认证未通过:如果人脸识别结果不符合认证要求,则认证未通过,拒绝对应的操作或权限。 8. 结束:系统结束。 以上为Python人脸检测与认证系统的设计流程图,通过使用人脸检测、特征提取和识别等技术,实现对人脸进行检测和认证,从而实现对系统的访问权限控制或其他相关应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值