欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Joint Face Detection and Alignment Using Multi-task Cascade Convolutional Networks笔记

程序员文章站 2024-03-26 12:50:35
...
人脸识别是当今人工智能中的一个研究热点。不同的姿势、光线以及遮挡物等,都会给人脸识别增加困难。这篇文章提出了一个基于深度CNN的,串联、多任务的框架,串联的方法利用了人脸检测(face detection)和人脸对齐(face alignment)之间的内在关系,以提高识别率。在保持算法实时反应的基础上,对FDDB和WIDER FACE等基准测试集的识别率都超越了当前的最新水平。

相关工作

  • Viola和Jones的工作:人脸识别的开山之作,缺点在于针对较为复杂情况下的人脸识别,精确率不够。
  • DPM(Deformable Part Models)方法:缺点在于计算量大,训练样本需要大量的注解。
  • Yang等人提出的基于深度CNN的人脸识别工作:时间代价很高。
  • Li等人使用了串联的CNN来检测人脸,但是需要对识别出的人脸窗口(bounding box)进行校准,并且忽略了人脸的特征点与bounding box之间的联系。
  • 另外,硬样本的挖掘也影响检测器的性能。以前的工作通常采用离线的方法,这篇文章中使用了在线的、自适应的挖掘方法。

方法步骤

这篇文章中提出的方法主要可以分为以下三个阶段。

  • 使用一个较为浅度的CNN来从输入图片中生成候选的人脸窗口。
  • 使用一个更为复杂的CNN来拒绝一些非人脸的窗口,并对人脸窗口进行校正。
  • 最后,使用更为复杂的CNN来精化之前的结果,进行人脸的对齐操作,并生成5个特征点。

详细的工作步骤如下。

  • 对于每一张输入图片,把它进行不同幅度的缩放,组成一个图像的金字塔,作为串联方法中各个步骤的输入。
  • 使用PNet(Proposal Net),是一个完全的卷积神经网络,来生成候选的人脸窗口。然后使用回归向量,对生成的候选窗口进行校正。
  • 所有候选窗口进入第二阶段,使用RCNN(Refine CNN),来拒绝一些假的候选,并对bounding box进行校正。
  • 对人脸进行更细致的处理,生成5个特征点。

文中使用的CNN的结构如下图(引自原文)。
Joint Face Detection and Alignment Using Multi-task Cascade Convolutional Networks笔记

训练过程

训练过程可以分为以下步骤。

  • 对人脸的分类(face classification)。学习目标是进行二元分类,对每个样本xi,其损失函数是一个交叉熵(cross entropy)函数。
    Ldeti=(ydetilog(Pi)+(1ydeti)(1log(Pi)))
    其中Pixi为人脸的概率。ydeti{0,1}xi是否为人脸的真实取值。
  • bounding box回归。比较CNN给出的窗口与真实窗口之间的差别。学习目标是一个回归问题,损失函数为:
    Lboxi=||y^boxiyboxi||22
    其中,y^boxi是CNN网络给出的,需要回归的对象,yboxiR4是真实的窗口。(左上、右下两个点的坐标,需要4个数值)
  • 特征值的定位。与bounding box相似,生成的人脸特征点也需要进行回归。一共有5个特征点(双眼、鼻尖以及两嘴角)。人脸的对齐所对应的损失函数为:
    Llandmarki=y^landmarkiylandmarki22
    其中y^landmarkiR10是网络模型所计算出来的5个特征点的坐标(10个数值组成的向量)。ylandmarki是人脸特征点的真实坐标。
  • 多源训练。如前所述,这篇文章中提到的CNN框架,需要完成多项任务。针对这多项任务的串联训练,不同的损失函数{det, box, landmark}的作用和权重也各不相同。整个过程的学习目标如下。
    minΣNi=1Σj{det,box,landmark}αjβjiLji
    其中αj代表了任务的重要性。在PNet和RNet中,(αdet=1,αbox=0.5,αlandmark=0.5)。而在ONet中,(αdet=1,αbox=0.5,αlandmark=1)βji{0,1}是样本类型指示符。
  • 硬样本的挖掘。传统硬样本的挖掘,是在分类器的训练完成之后。这篇文章在人脸的分类(人脸/非人脸)的过程中,采用了在线的自适应挖掘方法。在每个mini-batch的训练过程中,把前向传播过程中处理的样本,按照损失函数结果进行排序,用其中最好的70%作为硬样本。只用这些样本来后向传播、梯度计算。