深度学习之 人脸识别(1) 人脸预处理

2023-05-16



 人脸识别分两个部分:

 第一步:人脸图片预处理,即检测图片中人脸并裁剪成指定尺寸的人脸图。

 第二步:人脸识别,包括模型训练、目标人脸分类训练、 预测目标人脸。

1. 人脸检测原理


 人脸识别,首先得做人脸检测,也就是找到人脸在哪里,用矩形框框出位置。理想情况下,应该检测出图片中所有的人脸。

人脸检测模型:

 1、MTCNN (TensorFlow)

 2、SSD Face (Caffe)


 获得人脸的矩形框后,然后就要做人脸对齐(Face Alignment),因为原始图片中,人脸的姿态、位置可能有较大区别,

为了统一处理,要把人脸“摆正”。“摆正”的方法,其实就是先找到人脸的关键点,比如眼睛、鼻子、嘴巴、脸轮廓等。根据这些

关键点,使用仿射变换将人脸统一标准,尽量消除姿势不同带来的误差。


 这里采用基于TensorFlow的MTCNN(Multi-task convolutional neural networks) 模型。MTCNN是一种基于深度神经网络的

人脸检测和人脸对其的方法。MTCNN由3个神经网络构成,分别是P-Net,R-Net、O-Net。

 在使用上述网络之前,要对原始图片进行预处理,先将原始图片缩放到不同尺寸,形成一个“图像金字塔”,如下图所示。
在这里插入图片描述
 接着再对每个尺寸的图片通过神经网络计算一次。

 这样做的原因是,原始图片中,人脸可能存在不同的尺寸,有的脸大,有的脸小。对于脸小的,可以在放大后的图片上检测,

对于脸大的,可以在缩小后的图片上检测,这样就可以在统一的尺寸下检测人脸了。


1、P-Net网络结构

在这里插入图片描述
 如上图所示,就是一个P-Net网络结构,输入是一个12123的RGB图像块,该网络要判断这个12*12的图像中是否有人脸,

并给出人脸框和关键点(左眼、右眼、鼻子、左嘴角、右嘴角)位置。所以,对应有三个输出,下面分别介绍,


 第一个输出(face classification):判断该图像是否是人脸。输出形状为112,其实就是两个值,分别对应该图像是人脸的概率

和该图像不是人脸的概率。这两个值加起来严格等于1。


 第二个输出(bounding box regression):框回归,就是给出框的精确位置。输入的12*12的图像块可能不是完整的人脸框位置。

比如,有时候人脸并不是正好为方形;有时候图像块可能偏左,或偏右。所以,需要输出当前框位置相对与完整的人脸框位置的偏移,

这个偏移由4个变量组成。(一般图像中的框由4个数表示,分别为框左上角的横坐标、框左上角的纵坐标、框的宽度、框的高度),

所以,框回归的输出值为:框左上角的横坐标的相对偏移、框左上角纵坐标的相对偏移、框的宽度的误差、框高度的误差。所以输出

向量的形状为114.

 第三个输出(Facial landmark localization): 这个输出就是给出人脸5个关键点的位置。分别为左眼的位置、右眼的位置、鼻子的

 位置、左嘴角的位置、右嘴角的位置。每个关键点由横坐标和纵坐标表示,所以输出向量的形状为1110.
在这里插入图片描述
 如上图所示,在实际计算中,通过P-Net中第一层卷积的移动,会对图像中的每一个12*12区域做一次人脸检测,得到结果

如上图所示。图中框的大小不一,除了框回归的影响之外,主要的原因是图片“金字塔”中的各个尺寸都用P-Net就算过一次,

所以形成的大小不同的人脸框。上面得到的结果很粗糙,还需要进一步优化,这就是R-Net网络的工作了。


2、R-Net网络
在这里插入图片描述
 如上图所示,就是一个R-Net网络结构,输入是一个24243的RGB图像块,R-Net的作用也是判断24243的图像块中

是否包含人脸,以及给出关键点的位置。R-Net的输出和P-Net的输出结构和含义完全一样。

 在实际应用中,一般都对每个P-Net输出的可能包含人脸的区域缩放到24243的大小,再输入到R-Net中。
在这里插入图片描述
 经过R-Net优化后的结构如上图所示,消除了很多P-Net网络的误判情况。接着,将结果送给O-Net网络继续优化。


3、O-Net网络
在这里插入图片描述
 如上图所示,就是一个O-Net网络结构,输入是一个48483的RGB图像块。O-Net网络的结构和P-Net网络结构

依然类似,只不过输入图像块的大小不一样,而且网络通道数和层数更多了。


 如下图所示,就是经过了O-Net网络后的结果。
在这里插入图片描述


4、损失定义和训练过程

 由上可知,每个网络的输出都是由3个部分组成,所以损失也是由这三个部分构成。

 针对判断人脸是否存在的部分,直接使用交叉熵损失。针对框回归和关键点判定部分,使用L2损失。

最后由这三个部分损失各乘上自身的权重,再加起来,就形成最后的损失。


 如何确定各自的权重呢?P-Net和R-Net更关心框位置的准确性,所以框位置的权重就比较大,

而O-Net更关心关键点的判定,所以关键点的权重就比较大。


2. 人脸预处理实例

 开元源码工程
  https://github.com/davidsandberg/facenet


 下载完代码,

 facenet-master\src\align 目录下

 align_dataset_mtcnn.py 对齐

 detect_face.py 人脸检测(MTCNN)

 代码读者自行阅读


 对齐命令,在facenet-master目录下运行:

 python src/align/align_dataset_mtcnn.py …/test …/test_align_160 --image_size 160 --margin 32 --random_order

 test为facenet-master同一级目录下,要预处理的图片文件夹:
在这里插入图片描述

 Aaron_Eckhart 预处理前后的对比:

 预处理前
在这里插入图片描述
 预处理后
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度学习之 人脸识别(1) 人脸预处理 的相关文章

  • 论文学习:Occlusion Robust Face Recognition Based on Mask Learning

    论文地址 Occlusion Robust Face Recognition Based on Mask Learning with Pairwise Differential Siamese Network 综述 深度卷积网络作为人脸识别
  • AI,v3,百度人脸识别库上传---node

    config有必要的grant type client id client secret var https require https var request require request var qs require querystr
  • Python 超简单实现人类面部情绪的识别

    还记得我们之前写过一篇文章 手把手教你人脸识别自动开机 吗 里面用OpenCV对人脸进行简单的识别 让计算机训练认识到某个特定人物后识别对象 今天来做点高级的 识别出人脸的情绪 本文分为两大部分 1 面部检测 检测图像的脸部位置 输出边界框
  • 机器学习20:基于ResNet50和FaceNet实现人脸识别

    说明 这是优达学城的一个机器学习作业项目 我觉得还比较典型综合了几个常见的深度学习技术 值得分享一下 实现包括 数据增广 迁移学习 网络模型构建 训练 评估方法等 这里只是做了一个迁移学习的实现 重在实践过程 其原理没做分析 缺点 由于训练
  • orl_faces数据集分享

    orl faces数据集 今天整理电脑时发现还有这个数据集 本想删掉但想起当初找的时候来之不易 明明github上开源的东西 百度一搜非得是开会员 要这个要那个的 秉着开源精神 关注或者点赞都可以 doge 我今天就把网盘链接放这了 需要的
  • python 图像处理(5):图像的批量处理

    有些时候 我们不仅要对一张图片进行处理 可能还会对一批图片处理 这时候 我们可以通过循环来执行处理 也可以调用程序自带的图片集合来处理 图片集合函数为 skimage io ImageCollection load pattern load
  • 基于Tensorflow+VGG+DBN本地化批量图像识别系统(深度学习+Python)含全部工程源码+视频演示+图片数据集

    目录 前言 总体设计 系统整体结构图 系统流程图 运行环境 1 Python 环境 2 Tensorflow 环境 3 wxPython 环境 4 PIL 环境 模块实现 1 数据预处理 2 模型简化处理 3 用户界面设计 4 翻译模块调用
  • 超详细的人脸检测:MTCNN代码分析,手把手带你从零开始码代码

    前言 之前我发过MTCNN的原理分析 不了解的朋友可以看看深刻理解MTCNN原理 超级详细 从零开始做人脸检测 Tensorflow2实现 授人以鱼 不如授人以渔 本文与其他代码分析的文章不一样 本文不会涉及原理过多的东西 原理参照我的上一
  • 【毕业设计】stm32机器视觉的人脸识别系统 - 单片机 物联网 嵌入式

    文章目录 0 前言 1 简介 2 主要器件 3 实现效果 4 设计原理 K210实现人脸识别 5 部分核心代码 6 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业答辩的要求 这
  • insightface pytorch 答疑指南

    之前写过一篇人脸识别从原理到实践 详细介绍了人脸识别相关的算法 模型和Loss等 里面也提到insightface成为当前工业事实上的基准 但是它各种牛逼 唯一不足的点就是开始时选了mxnet框架开发 奈何现在基本没什么人用了 所以在22年
  • 疯壳AI语音及人脸识别教程2-4串口

    目录 1 1寄存器 1 1 2实验现象 17 视频地址 https fengke club GeekMart su f9cTSxNsp jsp 串口 官方QQ群 457586268 串行接口分为异步串行接口和同步串行接口两种 异步串行接口统
  • 基于opencv-python的人脸识别和鸟图识别

    目录 图像识别 人脸识别 鸟图识别 一 人脸识别 即使是地铁挤压的人脸 也是有尊严的 值得被检测 经过 OpenCV 的努力 成功检测 左图是正常被识别的人脸 中图由于挤地铁人脸已不可识别 右图OpenCV单应性变换后 拯救了被miss的人
  • Face_Recognition 人脸识别函数详解

    加载人脸图片文件 load image file file mode RGB 通过 PIL image open 加载图片文件 mode 有两种模式 RGB 3通道 和 L 单通道 返回 numpy array 查找人脸位置 人脸分割 fa
  • 基于STM32F407的人脸追踪

    整体概述 本项目采用两个舵机构成的二自由度的电动云台作为执行机构 控制摄像头在水平和垂直方向的运动 舵机带动摄像头进行二维平面的运动的同时 摄像头进行实时人脸检测 一旦检测到人脸 则进行人脸跟踪 摄像头采用星瞳openMV H7 主控采用的
  • Pyhton,OpenCV对象检测之——Haar级联人脸及眼睛检测

    Pyhton OpenCV对象检测之 Haar级联人脸及眼睛检测 1 效果图 2 原理 2 1 Haar人脸检测原理 2 2 Haar级联预训练的模型 3 源码 3 1 图像面部及眼睛检测 3 2 视频帧面部及眼睛检测 参考 这篇博客将介绍
  • High-Fidelity Pose and Expression Normalization for Face Recognition in the Wild

    CVPR 2015 Matlab code http www cbsr ia ac cn users xiangyuzhu projects HPEN main htm 中科院关于 人脸图像预处理 姿态和表情的归一化 算法的整体流程图如下所
  • TensorFlow框架做实时人脸识别小项目(一)

    人脸识别是深度学习最有价值也是最成熟的的应用之一 在研究环境下 人脸识别已经赶上甚至超过了人工识别的精度 一般来说 一个完整的人脸识别项目会包括两大部分 人脸检测与人脸识别 下面就我近期自己练习写的一个 粗糙 的人脸识别小项目讲起 也算是做
  • Qt+百度AI实现人脸识别之人脸检测

    文章目录 简单需求 Demo运行结果 百度AI人脸识别接入 为什么使用百度AI接口 接入步骤 如何获取Access Token Qt软件开发 人脸检测Qt编程步骤 知识点 网络编程 get put post请求方式的区别简述 POST 提交
  • esp32cam门禁系统简易教程

    esp32cam门禁系统简易教程 人脸识别 1 环境安装 最好有梯子 arduino IDE 1 官网下载地址 选择相应版本下载Windows ZIP file 无脑安装 2 配置IDE 打开IDE 文件 gt 首选项 gt 附加开发板管理
  • 机器学习系列(8):人脸识别基本原理及Python实现

    众所周知 人脸识别和人脸验证已经得到大量应用 那么它们之间有什么异同呢 又是如何实现的呢 这里是机器学习系列第八篇 带你揭开它们神秘的面纱 若图片挂了 可移步 https mp weixin qq com s biz MzU4NTY1NDM

随机推荐