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

来源:互联网 发布:矩阵型组织结构 编辑:程序博客网 时间:2024/05/23 21:29
人脸识别是当今人工智能中的一个研究热点。不同的姿势、光线以及遮挡物等,都会给人脸识别增加困难。这篇文章提出了一个基于深度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的结构如下图(引自原文)。
这里写图片描述

训练过程

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

  • 对人脸的分类(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%作为硬样本。只用这些样本来后向传播、梯度计算。
0 0
原创粉丝点击