PFLD: A Practical Facial Landmark Detector (CVPR2019)

           人脸特征点检测又称人脸对齐,其目的是自动定位一组预定义的基准点(例如,眼角、嘴角等)。好的人脸对齐算法需要考虑到检测精度、处理速度和模型尺寸。

PFLD: A Practical Facial Landmark Detector (CVPR2019)_第1张图片

         PFLD  这项工作开发了一种实用的面部特征点检测器,称为PFLD,具有高精度的对抗复杂情况,包括无约束的姿态、表情、灯光和遮挡。在骁龙845的芯片中效率可达140fps;另外模型大小较小,仅2.1MB,此外在许多关键点检测的benchmark中也取得了相当好的结果。

一:问题引出

人脸复杂度:在各种照明条件下,外观有很大变化的姿态,表情和形状,有时还会部分遮挡。此外,对于数据驱动的方法,充足的训练数据也是模型性能的关键,其中数据样本不平衡是一个关键问题。

挑战1:局部变化:表情、局部极端光照(如高亮和阴影)和遮挡会给面部图像带来部分变化/干扰。某些地区的特征点可能会偏离其正常位置,甚至消失。

挑战2:全局变化:姿态和成像质量是影响人脸图像整体外观的两个主要因素,当对人脸的整体结构进行错误估计时,会导致很大一部分特征点的定位效果不佳。

挑战3:数据不平衡:在浅层学习和深度学习中,一个可用的数据集在它的类/属性之间显示出不平等的分布,这是很常见的。这种不平衡很可能使算法/模型不能恰当地代表数据的特征,从而在不同属性之间提供不理想的准确性。

挑战4:模型的效率。对适用性的另两个限制是模型大小和计算需求。机器人、增强现实和视频聊天等任务有望在一个装备有限计算和内存资源的平台(如智能手机或嵌入式产品)上及时执行。

 

二:问题解决idea

与局部变化相比,全球变化更值得努力,因为它对整个特征点集的影响很大。为了增强鲁棒性,我们利用网络的一个分支来估计每个人脸样本的几何信息,然后对特征点进行正则化定位。此外,在深度学习中,数据不平衡问题往往限制了精确检测的性能。例如,一组训练可能包含大量的正面脸,而缺少那些大的姿势。因此我们提倡对较少的训练样本对应的错误进行更多的惩罚,而不是对那些丰富的样本。考虑到上述两点,考虑几何约束和数据不平衡,设计了一种新的损失算法。

2 为了扩大接受域,更好地捕捉面部的整体结构,添加了多尺度全连接(MS-FC)层,用于精确定位图像中的特征点。

3 考虑到处理速度和模型紧凑性方面,使用MobileNet块构建PFLD的主干网络

PFLD: A Practical Facial Landmark Detector (CVPR2019)_第2张图片

三:具体实践方法

  1. 一个损失函数(样本平衡+几何约束)+一个网络结构(MobileNet+姿势估计网络)
  2. loss设计:直接采用L1/L2,没有考虑到结构信息,平等地对待每一个特征点不是很合理。例如:给出一对特征点xy,以及他们图像空间种的偏差d=x-y,如果这两个投影是从真实的3D人脸投影到2D图像,那么在二维图像中,真实人脸的内在距离可能会有显著差异。因此,将几何信息集成到惩罚中有助于减轻这一问题。

        对于人脸图像,全局几何状态-三维位姿-足以决定投影方式,假设U3D坐标,X为平面2D坐标,P为一个投影矩阵,X=PU。基于假设弱视角模型为P为一个2*4的矩阵,该投影矩阵有六个自由度,包括偏航、横摇、俯仰、缩放和二维平移。在这项工作中,人脸应该被很好地检测、中心化正常化。而局部的变化,如表情,几乎不会影响投影。也就是说,可以减小尺度和二维平移三个自由度,只需要估算三个欧拉角(pitch(围绕X轴旋转,俯仰角), raw(围绕Y轴旋转,偏航角) roll(围绕Z轴旋转,翻卷角))

PFLD: A Practical Facial Landmark Detector (CVPR2019)_第3张图片

        为了解决数据不平衡问题,我们提倡对较少训练样本对应的错误进行更多的惩罚,而不是对那些丰富的训练样本。训练样本分为侧脸、前脸、抬头、低头、表情、遮挡,loss权重为他们所占百分比的倒数。另外针对label与模型输出的偏航、俯仰和滚转角之间的偏差角,偏差角越大,惩罚越大。

  1. 骨干网络结构

考虑到人脸具有很强的全局结构,如眼、口、鼻等之间的对称和空间关系,这种全局结构可以帮助更精确地定位地标。因此,我们将其扩展为多比例尺特征图,而不是单比例尺特征图。扩展是通过对接收域进行跨步卷积运算来完成的。然后我们通过充分连接多尺度特征图来进行最终的预测。考虑到速度和模型大小,我们用MobileNet块代替传统的卷积操作。

    2 辅助网络结构

        之前的工作已经证实,适当的辅助约束有利于形成稳定和鲁棒的检测效果。其中3D姿态信息往往是大家考虑的,有人可能会问,给定了预测的和地面真相的地标,为什么不直接从它们计算欧拉角呢? 从技术上讲,这是可行的。但是,特别是在训练开始时,landmark的预测可能会不准确,从而导致对角度的估计质量较低。这可能会把训练拖入困境,比如过度惩罚和收敛缓慢。为了将旋转信息估计与特征点定位解耦,我们引入了辅助子网(一剑梭哈很好,但是压力很大,但是要求解耦准确,否则弄巧成拙)。

       PFLD的训练过程中引入了一个子网络,用以监督PFLD网络模型的训练。该子网络仅在训练的阶段起作用,在inference的时候不参与;该子网络的用处,是对于每一个输入的人脸样本,对该样本进行三维欧拉角的估计,其groundtruth由训练数据中的关键点信息进行估计,虽然估计的不够精确,但是作为区分数据分布的依据已经足够了,毕竟还该网络的目的是监督和辅助训练收敛,主要是为了服务关键点检测网络。另外,该子网络的输入不是训练数据,而是PFLD主网络的中间输。

官方demo:

https://sites.google.com/view/xjguo/fld

下载不下来可以通过我这边上传的下载

https://download.csdn.net/download/ZHANG2012LIANG/12755835

 

个人观点:这篇论文应该是针对具体落地项目得出的,人脸对齐看作一个回归问题,一个CNN网络+回归loss即可实现,但是考虑到速度,顺其自然的想到了一系列小模型,例如MobileNet。针对人脸特征点检测困难(训练样本的平衡,环境,姿态,表情均影响到最终的特征点检测效果),作者针对这些问题,优化loss,通过加权实现样本平衡,加权考虑样本的种类和各种百分比,针对姿态问题,大家一般都会考虑增加一些辅助信息来优化模型,例如去噪任务里面的noise 估计,人脸对齐任务中大家考虑的是三维旋转信息,包括偏航,俯仰和滚卷角度信息,而这些信息可以提前计算出来(要求每一个样本有正面图像,难),也可以基于label和模型输出之间直接计算(刚开始模型输出的特征点不准确,导致这里难以直接计算出准确的角度),因此这里考虑加一个辅助网络来输出三个角度信息,参与训练阶段loss计算,测试的时候则可以不需要这个辅助网络。可以发现整个文章要解决的问题和思路都是落地中碰到的常见问题和解题思路,非常值得学习。

发展:可以考虑更多辅助信息,另外如何充分的利用姿态的3D信息也值得进一步探索。

 

 

 

你可能感兴趣的:(人脸对齐)