万字长文:人脸识别综述(学习笔记)

本文深入探讨了人脸识别技术,包括人脸检测、关键点定位、对齐、表征和匹配等步骤。介绍了ASM、AAM、CLM等传统模型以及深度学习方法中的Triplet Loss、Center Loss和ArcFace损失函数。强调了人脸识别的挑战,如姿态、遮挡和鲁棒性,并讨论了评估指标和实际应用中的考量因素。

人脸的检测与识别是一个历史悠久的方向,之前没做过相关的工作,所以对人脸检测的相关流程没有很清晰的概念。工作原因,近期对人脸识别的来龙去脉做一个笔记和知识梳理,从上到下的一个pipeline,文章部分内容有引用或摘抄均给出了出处,如有侵权,还望及时与笔者联系进行删除或整改。
作者:Wisley
邮箱:903953316@qq.com
GitHub:个人主页

一、人脸识别背景👦

人脸识别作为一种非入侵式的识别验证方式相比其他生物识别技术更受大众的喜爱与接受,随着识别技术的发展与进步,人脸识别技术已广泛部署在多种场景下如监控系统、安防系统、工业生产、家庭监护等,方便人们生活的各方各面。人脸识别的其它常见应用还包括访问控制、欺诈检测、身份认证和社交媒体等。
人脸识别主要可以分为以下三种场景模式,分别为1:1,1:N,N:N。

  • 1:1 问题
    银行柜台、海关、手机解锁、酒店入住、网吧认证,会查身份证跟你是不是同一个人。这个应用的主要特点是,在大多数场景下都需要你先提供一个证件,然后跟自己的人脸做比对。简单来说,这个问题就是给定两张图片,判断是否是一个人,相当于做一个二分类
  • 1:N问题
    在图书馆,公司等重要场所,我们往往需要对人脸进行检索没判断这个人有没有出现在人脸库中,相当于一张图片,要与库中的每张人脸进行比对,判断是否一致,直到所有匹配的回答都是否时,才意味这个人不在我们的人脸库中,而不予以通过。实际使用时一般是静态的搜索,返回TOP K个的相似人脸,这个和推荐系统领域的粗排,精排的目的相似。
  • N:N问题
    安防或者其他应用场景则有更难的任务,我们的城市有数不清的摄像头,每天都会产生大量的抓拍图片,同时对比库也是非常大大,这就是N张图片进行N次搜索的问题。比如我们100个摄像头,每个摄像头一天抓拍了1万个人,而我们的底库有10万,总共搜索量精需要100x1w的搜索量。我们有10个嫌疑人,现在我们的算法,报警量100次,最后抓到9个人,感觉还是可以的,10个人抓到9个,召回率有90%,而且误报率也非常低。但是实际却不行,因为出警率有100次,却抓到9个嫌疑人,只有9%的准确率,实际上我们希望每次出警都能准确定位出嫌疑人。

人脸识别不同于简单的图片分类任务,它是个开集任务,即对于测试集的分类目标,不存在于训练集中。这也非常好理解,因为我们拿到用于训练的人脸图片,与现场进行抓拍的人脸图片肯定是不一致的,同时也无法做到将全世界所有人的人脸都收集起来训练。在其次就是场景、设备、光线、妆容、表情、年龄等各方面因素,都会使得同一个人的照片出现天差地别的变化,这需要模型有较好的鲁棒性,能够从人脸中提取稳健的特定特征

二、人脸识别算法

人脸识别的基本流程:

  • 人脸检测
  • 人脸关键点定位
  • 人脸对齐
  • 人脸表征
  • 人脸匹配

2.1 人脸检测🔍

人脸检测是通过模型或算法来寻找图片中人脸的位置,输出人脸边界框的坐标,以将检测到的人脸输送到后续模型中。现有的人脸检测模型有很多,与目标检测的一类模型如RCNN、YOLO、Retina等框架通用,同时在人脸检测时,模型还可以输出关键点坐标以及相关属性等信息。
在这里插入图片描述

2.2 人脸关键点定位📌

人脸特征点检测是指定位脸部预定义的关键点,比如眼睛、鼻子、嘴巴等。定位的目的是在人脸检测的基础上,进一步确定脸部特征点(眼睛、眉毛、鼻子、嘴巴、脸部外轮廓)的位置。传统的定位算法的基本思路是:人脸的纹理特征和各个特征点之间的位置约束相结合
人脸特征点检测的方法可以分成:

  • 基于参数化模型的方法:ASM、AAM、CLM等
  • 基于回归的方法:ESR、SDM、RCPR、LBP等
  • 基于神经网络的方法:包括CNN/RNN/FCN等

这里简单介绍一些传统方法,感兴趣的小伙伴可以自行细查阅相关资料,这里不做过多详细的说明。

2.2.1 ASM模型

参考
ASM是一种基于点分布模型(Point Distribution Model, PDM)的算法,起源于snake模型(作为动态边缘分割的snake模型),该方法用一条由n个控制点组成的连续闭合曲线作为snake模型,再用一个能量函数作为匹配度的评价函数,首先将模型设定在目标对象预估位置的周围,再通过不断迭代使能量函数最小化,当内外能量达到平衡时即得到目标对象的边界与特征。

在这里插入图片描述

原始Snakes模型由一组控制点:v(s)=[x(s), y(s)] s∈[0, 1] 组成,这些点首尾以直线相连构成轮廓线。其中x(s)和y(s)分别表示每个控制点在图像中的横纵坐标位置。 s 是以傅立叶变换形式描述边界的自变量。snake的大致思路是先给定一个坐标曲线,然后通过最小化能量函数来得到最优解,这个最优解会让曲线趋近于平滑且靠近目标边缘。能量函数如公式(1)所示。

E total  = ∫ s ( α ∣ ∂ ∂ s v ⃗ ∣ 2 + β ∣ ∂ 2 ∂ s 2 v ⃗ ∣ 2 + E e x t ( v ⃗ ( s ) ) ) d s ( 1 ) E_{\text {total }}=\int_{s}\left(\alpha\left|\frac{\partial}{\partial s} \vec{v}\right|^{2}+\beta\left|\frac{\partial^{2}}{\partial s^{2}} \vec{v}\right|^{2}+E_{e x t}(\vec{v}(s))\right) ds \qquad(1) Etotal =s(αsv 2+βs22v 2+Eext(v (s)))ds1

其中第1项称为弹性能量是v的一阶导数的模,第2项称为弯曲能量,是v的二阶导数的模,弹性能量和弯曲能量合称内部能量(内部力),用于控制轮廓线的弹性形变,起到保持轮廓连续性和平滑性的作用。第3项是外部能量(外部力),表示变形曲线与图像局部特征吻合的情况。一般只取控制点或连线所在位置的图像局部特征例如梯度,如公式(2)所示。当轮廓C靠近目标图像边缘,那么C的灰度的梯度将会增大,那么上式的能量最小。
E e x t ( v ⃗ ( s ) ) = P ( v ⃗ ( s ) ) = − ∣ ∇ I ( v ) ∣ 2 ( 2 ) E_{e x t}(\vec{v}(s))=P(\vec{v}(s))=-|\nabla I(v)|^{2} \qquad (2) Eext(v (s))=P(v (s))=I(v)22
在能量函数极小化过程中,弹性能量迅速把轮廓线压缩成一个光滑的圆,弯曲能量驱使轮廓线成为光滑曲线或直线,而图像力则使轮廓线向图像的高梯度位置靠拢。基本Snakes模型就是在这3个力的联合作用下工作的。

ASM模型在实际训练中包含训练和搜索两个部分(详细参考)。

  • 1、建立形状模型:
    • 1.1 收集包含人脸的训练集
    • 1.2 手动标记K个关键点
    • 1.3 构建形状向量(坐标)
    • 1.4 形状归一化(通过平移,旋转,缩放,在不改变点分布模型的基础上对齐到同一个点分布模型,采用Procrustes方法)
    • 1.5 对齐后的形状向量进行PCA处理
  • 2、构建特征点的局部特征
    • 如通过计算局部灰度值的梯度得到纹理特征,通过迭代的方式跟新特征点
  • 3、搜索
    • 对平均形状通过平移,缩放,旋转得到初始模型,通过搜索得到最终形状。
    • 计算相似度,相似度为局部特征的马氏距离,新的目标特征点为前后特征点连线方向上,以其为中心两边各选择l个像素点计算局部特征,通过计算这些子局部特征与当前特征点之间的马氏距离最小的子局部特征中心,作为当前特征点的新位置

参考:12

2.2.2 AAM 模型

参考文献:Active Appearance ModelsActive Shape Models
前面说到,ASM是基于统计形状模型的基础上进行的,而AAM则是在ASM的基础上,进一步对纹理(将人脸图像变形到平均形状而得到的形状无关图像g)进行统计建模,并将形状和纹理两个统计模型进一步融合为表观模型。
AAM模型相对于ASM模型的主要改进为:使用两个统计模型融合来取代 ASM的灰度模型。主要对特征点的特征描述子进行了改进,增加了描述子的复杂度和鲁棒性。

2.1.3 CLM模型

引用:【机器学习理论与实战(十六)概率图模型04】
CLM(Constrained local model)顾名思义就是有约束的局部模型,ASM、AAM都属于有约束的局部模型,它通过初始化平均脸的位置,然后让每个平均脸上的特征点在其邻域位置上进行搜索匹配来完成人脸点检测。整个过程分两个阶段:模型构建阶段和点拟合阶段。模型构建阶段又可以细分两个不同模型的构建:形状模型构建和Patch模型构建,如(图一)所示。形状模型构建就是对人脸模型形状进行建模,说白了就是一个ASM的点分布函数(PDM),它描述了形状变化遵循的准则。而Patch模型则是对每个特征点周围邻域进行建模,也就说建立一个特征点匹配准则,怎么判断特征点是最佳匹配。
相关论文可以参考这篇文章的工作:Deformable Model Fitting by Regularized Landmark Mean-Shift

2.3 人脸对齐📏

人脸对齐是将人脸模型与图像进行匹配并提取人脸像素的语义的一种方法,它是人脸图片送入模型提取特征前的预处理工作,主要目的是将形态各异、不规则的人脸图片,校正到统一的模板,方便模型提取特征,从而提高模型精度。它使用一组位于人脸图片中标准位置的固定坐标作为参考点,通过仿射变换将原始的人脸图片变换到标准模板上。这个过程需要通过检测器得到原始人脸图片上的关键点坐标,再与参考点使用最小二乘法计算仿射变换的参数矩阵。
在这里插入图片描述
人脸对齐也是一项历史悠久的工作,现如今已有非常多的方法,如传统的约束模型,概率模型,到后来的回归模型、树模型,到现在层出不穷的深度模型、图卷积、点云等技术。一般来说,关键点的检测也容易受光线、角度、纹理、遮挡等因素的影响。从关键点定位到对齐,主要方法的类别还分为:2D方法,3D方法,稀疏方法和密集方法等。另外如于深度学习方法可以很好的实现对多任务的处理,因此有很多新的算法可以同时完成人脸框检测以及对2D关键点和3D关键点的获取,进而可进一步支持后续的多任务分析。

人脸对齐也面临很多挑战,大多数对齐算法都是为小到中等姿态(45度以下)的脸设计的,缺乏在高达90度的大姿态中对齐脸的能力;同时常用的基于参考坐标的算法,都是假设再所有人脸中均可见的(无遮挡),这是不合理的。同时稠密人脸、三维人脸、大姿态人脸等场景下也面临极大的挑战。Xiangyu等人的工作Face Alignment Across Large Poses: A 3D Solution则提出了三维密集人脸对齐(3D Dense Face alignment, 3DDFA)框架,来解决这些问题,该框架通过卷积神经网络(CNN)将稠密的三维人脸模型拟合到图像上。同时他们还提出了一种在剖面视图中合成大规模训练样本的方法来解决数据标记等问题。

在这里插入图片描述

\quad

2.4 人脸表征🤔

人脸表征是将人脸图像转化为具有代表性的特征向量,用于后续的人脸匹配等工作。一个好的表征向量应该是同一个主体的所有人脸图片都能映射到相类似的向量上,不同主体之间的特征向量具有一定的差距(如较大的欧氏距离或者余弦距离等)。人脸表征在整个人脸识别当中算是最主要的一步,也是我们主要学习和介绍的重点。
基于CNN的人脸识别方法是目前领域内最常见的一类方法,其主要优点是使用大量数据训练,从而学习到稳健的人脸表征,它不同于以往的方法,不需要手工设计人脸特征,并在数据集规模扩大的同时能适用于更加复杂的人脸场景。影响基于深度学习的人脸识别算法主要有三个方面:

  • 1、数据规模和质量。一定规模的训练数据能提高模型的鲁棒性(如更多的主体数量、每个主体下形态各异的图片数量等),学习到更好的表征向量。而数据集的质量包括清晰度、角度、光照等。
  • 2、网络结构。不同的网络模型结构也影响模型的识别能力,典型的网络结构有VGG、Resnet等,均可借鉴图片分类中的一些 网络结构
  • 3、优化和训练方法。人脸识别是个开集问题,不同于简单的图片分类任务,合理设计优化目标是提高模型精度的关键。常用的方法有优化配对人脸或者人脸三元组之间的距离度量、选择不同损失函数如:Center loss、Arcface等。
2.4.1 人脸识别模型的评价指标

在介绍人脸识别模型前,我们先来学习下人脸识别中常用的衡量指标。在人脸识别中常用到的指标是TAR(True

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值