人脸关键点对齐

转:https://www.jianshu.com/p/e4b9317a817f

摘要: 从传统方法到深度学习方法,对人脸关键点定位/人脸对齐的发展进行梳理,对该领域中经典的方法,最新成果进行汇总,并给出相应的paper原文,项目主页及代码链接。重点介绍深度学习的几种最新方法。

1. Conception

人脸关键点定位(Facial landmark localization): 在人脸检测的基础上,根据输入的人脸图像,自动定位出面部关键特征点,如眼睛、鼻尖、嘴角点、眉毛以及人脸各部件轮廓点等,输入为人脸外观图像,输出为人脸的特征点集合,见下图:

图1. 人脸对齐处理流程

人脸对齐(Facial alignment): 可以看作在一张人脸图像搜索人脸预先定义的点(也叫人脸形状),通常从一个粗估计的形状开始,然后通过迭代来细化形状的估计。在搜索的过程中,两种不同的信息被使用,一个是人脸的外观(Appearance) ,另一个是形状(Shape)。形状提供一个搜索空间上的约束条件。

人脸对齐主要将人脸中的 eyes, mouth, nose and chin 检测出来,用特征点标记出来。

人脸对齐是一个中间步骤,首先是人脸检测,然后是人脸对齐,人脸对齐的结果可以用于:
人脸验证, 人脸识别(Face recognition),属性计算(Attribute computing),表情识别(Expression recognition), 姿态估计(Pose Estimation) 等。
实际应用中人脸的不同尺度,姿态,遮挡,光照,复杂表情等对人脸对齐具有较大的挑战性 。

综合考虑传统方法和目前最新进展,从技术实现上可将人脸关键点检测分为2大类:生成式方法(Generative methods) 和 判别式方法(Discriminative methods)。
Generative methods 构建人脸shape和appearance的生成模型。这类方法将人脸对齐看作是一个优化问题,来寻找最优的shape和appearance参数,使得appearance模型能够最好拟合输入的人脸。这类方法包括:

  • AAM (Active Appearnce Model)
  • ASM(Active Shape Model)

Discriminative methods直接从appearance推断目标位置。这类方法通常通过学习独立的局部检测器或回归器来定位每个面部关键点,然后用一个全局的形状模型对预测结果进行调整,使其规范化。或者直接学习一个向量回归函数来推断整个脸部的形状。这类方法包括传统的方法以及最新的深度学习方法,具体分为如下几种经典的实现方式:

  • Constrained local models (CLMs)
  • Deformable part models (DPMs)
  • 基于级联形状回归的方法(Cascaded regression)
  • 基于深度学习的方法

从空间维度来考虑,以上这些方法又可分为2D方法,3D方法,稀疏方法和密集方法等。需要指出的是,由于深度学习方法可以很好的实现对多任务的处理,因此有很多新的算法可以同时完成对2D关键点和3D关键点的同时获取,进而可进一步支持后续的多任务分析,如人脸对齐,3D姿态分析等。

在人脸关键点定位的发展史上,具有里程碑式的有如下五种方法:

  • 1995 年,Cootes 的 ASM(Active Shape Model)。
  • 1998 年,Cootes 的 AAM(Active Appearance Model) 算法。
  • 2006 年,Ristinacce 的 CLM(Constrained Local Model)算法。
  • 2010 年,Rollar 的 cascaded Regression 算法。
  • 2013 年,想港中文大学的汤晓欧和Sun Yi等开创深度学习人脸关键点检测的先河,首次将 CNN 应用到人脸关键点定位上。

2. 2D人脸对齐

2.1 AAM(Active Appearance Model)/ASM/Snake

参考文献:An Introduction to Active Shape Models. Constrained Local Model for FaceAlignment. Xiaoguang Yan(2011).
ASM模型起源于snake模型(作为动态边缘分割的snake模型),该方法用一条由n个控制点组成的连续闭合曲线作为snake模型,再用一个能量函数作为匹配度的评价函数,首先将模型设定在目标对象预估位置的周围,再通过不断迭代使能量函数最小化,当内外能量达到平衡时即得到目标对象的边界与特征。
1989年yuille等人此提出使用参数化的可变形模板来代替snake模型,可变形模板概念的提出为aam的产生奠定了理论基础。
1995年cootes等人提出的asm算法是aam的直接前身,asm采用参数化的采样形状来构成对象形状模型,并利用pca方法建立描述形状的控制点的运动模型,最后利用一组参数组来控制形状控制点的位置变化从而逼近当前对象的形状,该方法只单纯利用对象的形状,因此准确率不高。
1998年,cootes等人在asm算法的基础上首先提出aam,与asm的不同之处是他不仅利用了对象的形状信息而且利用了对象的纹理信息。

2.2 CLMS(Constrained Local Model)

2.3 级联回归方法(Cascaded regression)

  • CPR(Cascaded Pose Regression)
    CPR通过一系列回归器将一个指定的初始预测值逐步细化,每一个回归器都依靠前一个回归器的输出来执行简单的图像操作,整个系统可自动的从训练样本中学习。
    人脸关键点检测的目的是估计向量(face shape) S=(x1, x2, ..., xK) ,其中K表示关键点的个数,由于每个关键点有横纵两个坐标,所以S得长度为2K。CPR检测流程一共有T个阶段,在每个阶段中首先进行特征提取f,这里使用的是shape-indexed features,也可以使用诸如HOG、SIFT等人工设计的特征,或者其他可学习特征(learning based features),然后通过训练得到的回归器R来估计增量ΔS( update vector),把ΔS加到前一个阶段的S上得到新的S,这样通过不断的迭代即可以得到最终的S(shape)。
    CPR中主要的操作是向量相加,不仅有效而且计算复杂度较低,所以近年来在face alignment中广泛应用

  • ESR
    ESR(Explicit Shape Regression)该方法出自2012的cvpr,是微软亚洲研究院(MSRA)孙剑组的作品。该文章主要提出了3个方法:
    (1)2层级联的boost回归(two-level boosted regression): 该方法最早是P Dollar大神在CVPR2010中Cascaded pose regression这篇论文中提出。作者这里的2层boost回归,第一层有10级,第二层有500级,这样分层的好处,比单独使用一个5000级而只有1层的效果要好很多。其中,第一层中的特征维度不固定,第二层中中的特征维度固定。
    (2)基于形状索引的特征(shape-indexed features): 该形状索引特征,计算回归的位置和真实位置之间的像素差,类似于中心差分算梯度,从而得到最终特征向量,并且该特征向量采用了局部坐标系,相比全局坐标系具有更好的鲁棒性。
    (3)基于相关系数的特征选择方法(correlation-based feature selection method):这里,需要从之前提取的400*400个特征中选择出最右代表性的前f个。简单的说,就是计算所有特征向量的相关系数,取前f个系数最高的作为最终的输出特征向量。

    github代码: code

  • ERT(Ensemble of Regression Trees)
    dlib实现人脸关键点定位采用的方法。

  • Face Alignment at 3000 FPS
    cvpr2013, ESR是基础版本的形状回归,ERT将回归树修改为GBDT,由原始的直接回归形状,改进为回归形状残差,而LBF,是加速特征提取,由原来的像素差分特征池,改为随机选择点。该方法主要体现在2个方面
    (1)LBF特征的提取
    作者通过在特征点附近随机选择点做残差来学习LBF特征,每一个特征点都会学到由好多随机树组成的随机森林,因此,一个特征点就得用一个随机森林生成的0,1特征向量来表示,将所有的特征点的随机森林都连接到一起,生成一个全局特征,后续过程就可以使用该全局特征做全局线性回归了。

image

(2)基于cascade的级联的随机森林做全局线性回归
所谓的线性回归,其实就是一个不断迭代的过程,对于每一个stage中,用上一个stage的状态作为输入来跟新,产生下一个stage的输入,以此类推,直到达到最底层stage。

image

如上公式所示,I为输入图像,St-1为第t-1stage的形状,fait为t stage的特征匹配函数,Wt为线性回归矩阵。

 

image

训练过程,就是学习fait和wt的一个过程,测试过程就是用训练好的fait和wt对提取的LBF特征做回归的过程。 对于每个stage,越往下,所选择的随机点的范围就越小,特征点定位精度就越好。

image

github代码: code

2.4 CNN 方法

  • DCNN
    香港中文大学汤晓欧,SunYi等人作品,首次将CNN用于人脸关键点检测。总体思想是由粗到细,实现5个人脸关键点的精确定位。网络结构分为3层:level 1、level 2、level 3。每层都包含多个独立的CNN模型,负责预测部分或全部关键点位置,在此基础上平均来得到该层最终的预测结果。

image.png

  1. level1 粗定位,包含3个CNN:F1定位所有的5个关键点, EN1用于定位:左眼+右眼+鼻子 三个特征点, NM1用于定位:左嘴角+右嘴角+鼻子 三个特征点。除输入图像大小和输出维度不同(F1 输入39x39整个人脸图像, 输出5x2个坐标点;EN1: 输入31x39 人脸上半部区域,输出3x2,NM1:输入31x39 人脸下半部区域,输出3x2)3个CNN的网络结构,参数完全一致。3个网络输出,在每个点的预测结果上做平均,得到本层的最终输出
  2. level2精确定位,包含10个CNN,每两个CNN负责预测同一个关键点,然后取平均得到这一点的精确预测。输入为在level1输出的关键点周围的局部裁剪图像。
  3. level3更精确定位,结构和作用与level2一致,10个CNN,两两平均,只是输入的图像是在leve2关键点基础上做了更小的裁剪。

虽然作者没有明确说这个问题,但是很明显的是,经过level-1,得到了一个相对较好的初始化。
在这方面,face++ 发表在ICCV-2013的paper(Extensive facial landmark localization with coarse-to-fine convolutional network cascade)同样有这么个“初始化”的操作。借鉴别的文献中的idea:局部共享权值(locally sharing weights),理论听起来挺有道理的。传统的权值共享认为某一个特征会图像的不同位置出现,所以采用全局权值共享。但是人脸是由比较规范的结构,如人眼就是在上部,鼻子就是在中部,嘴就是在下部,因此应该采用局部权值共享。

  • TCNN
  • MTCNN

  • LAB (LAB-Look at Boundary A Boundary-Aware Face Alignment Algorithm )
    2018cvpr 清华&商汤作品。借鉴人体姿态估计,将边界信息引入关键点回归上。网络包含3个部分:边界热度图估计模块(Boundary heatmap estimator),基于边界的关键点定位模块( Boundary-aware landmarks regressor )和边界有效性判别模块(Boundary effectiveness discriminator)

     

    LAB网络结构

  1. 边界热度图估计模块:采用stacked hourglass network 和 message passing layers。输入人脸图像,输出人脸边界热度图来表示面部的几何结构。人脸面部的各个器官边界共构成K个边界。每个stack结束时,特征图被分成K个分支,分别送给各个对应类型的边界热度图估计。最终生成的热度图与输入原始图像进行融合,作为关键点定位模块的输入。
  2. 基于边界的关键点定位模块,利用边界信息,通过4阶res-18网络来定位关键点
  3. 边界有效性判别模块,由于边界热度图在关键点定位中起着非常重要的作用,因此需要对生成的边界信息的准确性进行评判。该模块采用对抗网络,评判边界热度图的有效性。

3. 3D人脸对齐

3DMM(3D Morphable Model)

3.1 3DDFA: Face Alignment Across Large Poses- A 3D Solution

自动化所作品, 解决极端姿态下(如侧脸),一些特征点变了不可见,不同姿态下的人脸表观也存在巨大差异使得关键点定位困难等问题,本文提出一种基于3D人脸形状的定位方法3DDFA,算法框架为:
(1) 输入为100x100的RGB图像和PNCC (Projected Normalized Coordinate Code) 特征,PNCC特征的计算与当前形状相关,可以反映当前形状的信息;算法的输出为3D人脸形状模型参数
(2) 使用卷积神经网络拟合从输入到输出的映射函数,网络包含4个卷积层,3个pooling层和2个全连接层
通过级联多个卷积神经网络直至在训练集上收敛,PNCC特征会根据当前预测的人脸形状更新,并作为下一级卷积神经网络的输入。
(3) 此外,卷积神经网络的损失函数也做了精心的设计,通过引入权重,让网络优先拟合重要的形状参数,如尺度、旋转和平移;当人脸形状接近ground truth时,再考虑拟合其他形状参数
实验证明该损失函数可以提升定位模型的精度。由于参数化形状模型会限制人脸形状变形的能力,作者在使用3DDFA拟合之后,抽取HOG特征作为输入,使用线性回归来进一步提升2D特征点的定位精度。

训练3DDFA模型,需要大量的多姿态人脸样本。为此,作者基于已有的数据集如300W,利用3D信息虚拟生成不同姿态下的人脸图像,核心思想为:先预测人脸图像的深度信息,通过3D旋转来生成不同姿态下的人脸图像
链接(含源码)

3.2 Large-Pose Face Alignment via CNN-Based Dense 3D Model Fitting

这篇文章是来自密西根州立大学的Amin Jourabloo和Xiaoming Liu的工作。 和上一篇文章的出发点一样,作者试图使用3D人脸建模解决大姿态下面部特征点定位问题。
2D的人脸形状U可以看成是3D人脸形状A通过投影变化m得到,如下图所示: 3D人脸形状模型可以表示为平均3D人脸形状 A 0 与若干表征身份、表情的基向量 A id 和 A exp 通过p参数组合而成
面部特征点定位问题(预测U)可以转变为同时预测投影矩阵m和3D人脸形状模型参数p

算法的整体框架通过级联6个卷积神经网络来完成这一任务:
(1) 首先以整张人脸图像作为输入,来预测投影矩阵的更新
(2) 使用更新后的投影矩阵计算当前的2D人脸形状,基于当前的2D人脸形状抽取块特征作为下一级卷积神经网络的输入,下一级卷积神经网络用于更新3D人脸形状
(3) 基于更新后的3D人脸形状,计算可得当前2D人脸形状的预测
(4) 根据新的2D人脸形状预测,抽取块特征输入到卷积神经网络中来更新投影矩阵,交替迭代优化求解投影矩阵m和3D人脸形状模型参数p,直到在训练集收敛

值得一提的是,该方法在预测3D人脸形状和投影矩阵的同时也考虑到计算每一个特征点是否可见。如果特征点不可见,则不使用该特征点上的块特征作为输入,这是普通2D人脸对齐方法难以实现的
此外,作者提出两种pose-invariant的特征Piecewise Affine-Warpped Feature (PAWF)和Direct 3D Projected Feature (D3PF),可以进一步提升特征点定位的精度

4 密集人脸对齐

4.1 Dense Face Alignment

和3.2一样,同样是密西根州立大学的Amin Jourabloo和Xiaoming Liu等人的工作,该组其他人脸对齐的工作可参见其项目主页。
原文: ICCV 2017
摘要: 在人脸对齐方法中,以前的算法主要集中在特定数量的人脸特征点检测,比如5、34或者68个特征点,这些方法都属于稀疏的人脸对齐算法。在本文中,我们提出了一种针对大角度人脸图像的一种3D密集人脸对齐算法。在该模型中,我们通过训练CNN模型利用人脸图像来估计3D人脸shape,利用该shape来fitting相应的3D人脸模型,不仅能够检测到人脸特征点,还能匹配人脸轮廓和SIFT特征点。此外还解决了不同数据库中由于包含不同数量的特征点(5、34或68)而不能交叉验证的问题。可以实时运行

4.2 DenseReg: Fully Convolutional Dense Shape Regression In-the-Wild

原文: CVPR 2017
摘要: 在本文中,我们提出通过完全卷积网络学习从图像像素到密集模板网格的映射。我们将此任务作为一个回归问题,并利用手动注释的面部标注来训练我们的网络。我们使用这样的标注,在三维对象模板和输入图像之间,建立密集的对应领域,然后作为训练我们的回归系统的基础。我们表明,我们可以将来自语义分割的想法与回归网络相结合,产生高精度的“量化回归”架构。我们的系统叫DenseReg,可以让我们以全卷积的方式估计密集的图像到模板的对应关系。因此,我们的网络可以提供有用的对应信息,而当用作统计可变形模型的初始化时,我们获得了标志性的本地化结果,远远超过当前最具挑战性的300W基准的最新技术。我们对大量面部分析任务的方法进行了全面评估,并且还展示了其用于其他估计任务的用途,如人耳建模。

4.3 Learning Dense Facial Correspondences in Unconstrained Images

原文: ICCV2017

4.1 Joint 3D Face Reconstruction and Dense Alignment with Position Map Regression Network

原文: CVPR 2017
摘要: 本文提出了一个强有力的方法来同时实现3D人脸重构和密集人脸对齐。为实现该目标,我们设计了一个UV位置图,来达到用2D图表示UV 空间内完整人脸的3D形状特征。然后训练了一个简单的CNN来通过单张2D图像回归得到UV图。我们的方法不需要任何先验人脸模型,就可以重构出完整的面部结构。速度9.8ms/帧。

数据集

  • UMDFace

  • MTFL(TCDCN所用)

  • [300W-3D]: The fitted 3D Morphable Model (3DMM) parameters of 300W samples.

  • [300W-3D-Face]: The fitted 3D mesh, which is needed if you do not have Basel Face Model (BFM)

300W-3D-Face

  • [300W-LP]: The synthesized large-pose face images from 300W. 300W standardises multiple alignment
    databases with 68 landmarks, including AFW, LFPW, HELEN, IBUG and XM2VTS.

300W-LP

  • [AFLW2000-3D]: The fitted 3D faces of the first 2000 AFLW samples, which can be used for 3D face alignment evaluation.

AFLW2000-3D

6. 人脸对齐值得考虑的几个问题

  • 数据集扩增
  • 人脸图片预处理
    • 处理尺度变化
    • 扩大人脸区域,在人脸检测得到的boundingbox基础上扩大30%
  • 形状初始化
  • 精度和效率的权衡

数据库

评价指标

参考

机器之心
CSDN综述
Face Alignment In-the-Wild: A Survey
2017-DAN : theano code, CSDN中文
CSDN系列博客



作者:踩坑第某人
链接:https://www.jianshu.com/p/e4b9317a817f
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
人脸检测与对齐是计算机视觉中的基础任务之一,其在图像处理、视频监控、人机交互等领域都有着广泛的应用。Python语言拥有丰富的第三方库和强大的科学计算能力,因此在人脸检测与对齐方面也有着很好的应用优势。 在Python中实现人脸检测,常用的是基于OpenCV(Open Source Computer Vision Library)的人脸检测方法。首先需要安装opencv-python库,然后使用CascadeClassifier类进行人脸检测。CascadeClassifier类通过调用OpenCV开源的人脸检测分类器进行检测。对于检测到的人脸,可以通过OpenCV库提供的函数进行裁剪、调整大小等基本操作,以便后续的人脸识别或其他任务的处理。 人脸对齐方面,通常的方法是使用人脸关键点检测技术。可以使用OpenCV库提供的dlib或者face_recognition库进行人脸关键点检测。检测到人脸关键点后,可以根据关键点坐标进行人脸对齐。具体的方法可以是仿射变换、透视变换等。同样,Python提供了丰富的第三方库支持,例如scipy库中提供的affine_transform函数、openCV库中的warpAffine函数等。通过对关键点的移动、旋转、缩放等操作,可以将图像进行对齐,使其更好的用于后续的人脸识别和分析任务。 总之,Python作为一种快速、灵活、易学易用的编程语言,在人脸检测和对齐方面有着很好的应用优势。在实现过程中,需要考虑算法复杂度、准确性以及可扩展性等因素,以便更好的满足实际需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值