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的结构如下图(引自原文)。
训练过程
训练过程可以分为以下步骤。
- 对人脸的分类(face classification)。学习目标是进行二元分类,对每个样本
xi ,其损失函数是一个交叉熵(cross entropy)函数。其中Ldeti=−(ydetilog(Pi)+(1−ydeti)(1−log(Pi))) Pi 是xi 为人脸的概率。ydeti∈{0,1} 是xi 是否为人脸的真实取值。 - bounding box回归。比较CNN给出的窗口与真实窗口之间的差别。学习目标是一个回归问题,损失函数为:其中,
Lboxi=||y^boxi−yboxi||22 y^boxi 是CNN网络给出的,需要回归的对象,yboxi∈R4 是真实的窗口。(左上、右下两个点的坐标,需要4个数值) - 特征值的定位。与bounding box相似,生成的人脸特征点也需要进行回归。一共有5个特征点(双眼、鼻尖以及两嘴角)。人脸的对齐所对应的损失函数为:其中
Llandmarki=∥y^landmarki−ylandmarki∥22 y^landmarki∈R10 是网络模型所计算出来的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%作为硬样本。只用这些样本来后向传播、梯度计算。
上一篇: MongoDB安装失败以及采坑记录
下一篇: 跑通hdl_graph_slam开源算法