深度学习人脸检测综述

深度学习在计算机视觉的应用中已经十分广泛,其效果相比于传统方法也有很大的提高。本文就人脸检测这个领域,介绍深度学习在人脸检测领域的发展。

深度学习人脸检测最早的代表作之一是2015年CVPR的一篇论文《A Convolutional Neural Network Cascade for FaceDetection》,下文简称CascadeCNN。这篇文章保留了传统人脸检测方法中Cascade的概念,使用3个输入大小分别为12、24、48的浅层网络,在每个分类网络之后接一个矫正网络用于回归人脸框的位置。对比CascadeCNN和传统人脸检测方法,本文总结其相同点和不同点。相同点如下:1. 使用了Cascade级联结构,使用前面的stage快速过滤简单样本,后面的stage得到更为准确的分类结果;2. 图像金字塔结构,对于不同scale的人脸大小,通过缩放图像得到图像金字塔再进行处理;3. 滑动窗口加步长的处理模式;4. 最后处理结果根据IOU(intersection over union)大小使用NMS(Non-maximum suppression)方法进行窗口合并。不同点如下:1. 每个stage中CNN的分类器代替了传统的分类器;2. 每个分类stage之后应用了一个矫正网络使得人脸框的位置更为精确。该论文是当时基于CNN的人脸检测方法中速度最快的。

CascadeCNN 测试流程

15年另一篇文章关于深度学习人脸检测比较有代表性的文章是《Multi-view Face Detection Using Deep Convolutional Neural Networks》。这篇文章使用的网络是AlexNet,由于网络的分类能力相对较强,该文没有采用Cascade结构。是图像金字塔依旧采用,每一层金字塔用AlexNet处理一遍。这篇文章的一个亮点是使用了全卷积网络,将全连接层修改参数排列方式变成卷积层,对输入图像的大小没有了限制。金字塔的每一层由AlexNet处理后出来的是一个HeatMap,HeatMap的每个点对应原图中一个区域。

原图与HeatMap图

2016年深度学习人脸检测相关的文章都流行起来multi-task的概念,将人脸检测(分类)和人脸框位置矫正(回归)以及人脸关键点定位、姿态、姿态等属性的检测相结合(笔者在实验中发现,除了人脸框位置回归,其他的task对人脸检测的精度没有任何提高)。相关文章有:《HyperFace: A Deep Multi-task Learning Framework for Face Detection, Landmark Localization, Pose Estimation, and Gender Recognition》、《Joint Training of Cascaded CNN for Face Detection》(后文简称JTCCNN)、《Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks》(后文简称MTCNN)。HyperFace的网络结构也是基于Alexnet的变形,其特点对每个task有一个512大小的fc层,在对应到不同的任务,具体网络结果参见附图。

HyperFace网络结构

JTCCNN和MTCNN两篇文章在思路和网络结构上有很多相同之处。这两个方法都是基于15年CascadeCNN这篇文章的思路进行延伸的。最大的不同点在于,JTCCNN将低层的特征连接到了高层,12net的特征会拼接到24net上,12和24拼接得到的特征又会进一步拼接到48net上,级联的概率体现在了网络内部,12net、24net、48net对应有自己的阈值,没有通过阈值的样本被判断为负样本。MTCNN则保持每个Cascade之间的net互不干涉,它在CascadeCNN的基础上,改进了网络结构,12net应用了全卷积的网络,应用到了multi-task引用人脸框回归和关键点,进一步调高了人脸检测的速度和精度。

JTCCNN网络结构
MTCNN网络结构

今年人脸检测相关的文章更多关注到了人脸的scale,能否不需要这么多层的图像金字塔就能检测出不同尺度的人脸呢?《Finding tiny face》给出的答案是减少金字塔的层数,同时增加模板尺度这两种方式相结合,该文章同时实验验证,对于小人脸(图像中人脸大小小于20个像素),加入人脸周围的context上下文信息能极大的提高该人脸的检测率。《Scale-Aware Face Detection》这篇文章的思路比较奇特,先有一个Scale Proposal Network (SPN)得到图像上所有人脸的尺度大小信息,然后根据此对图像进行resize(在resize的图像上,所有的人脸大小在同一尺度),然后只需要对该sacle的一个尺度的网络便可检测出所有人脸。《Face Detection through Scale-Friendly Deep Convolutional Networks》Scale-friendly在提供propose方法的时候从图像中提取各种尺度的anchor,力求覆盖到各种尺度大小。

Scale-Aware Face Detection 测试流程
Scale-friendly 训练流程

到此很多读者可能会疑惑,为啥没有提到RCNN、fastRCNN、fasterRCNN、sppnet、YOLO、SSD、DenseBox等相关物体检测的文章,也有很多工作是将这些方法应用到人脸检测的,考虑到其通用性,这里没有一一介绍,后续笔者会就物体检测系列的文章进行详细描述。

总结来说,全卷积网络代替滑动窗口加步长的方式,利用到时卷积层共享计算的特性;Cascade结构其实和目标检测的proposal是同一思想,都是想通过一个快速的方法获取人脸候选位置,排除掉大量的负样本;图像金字塔、特征级别金字塔、不同尺度的anchor、不同尺度的模型大小都是为了解决人脸sacle的问题,例如同一个检测器很难同时检测出来20*20大小和200*200大小,加入了人脸框回归可一定程度的提高尺度的鲁棒性。

最后说一下,人脸检测速度的问题。提到人脸检测速度,不说图像大小和最小检测尺度都是耍流氓的行为。最小检测尺度翻一倍,速度可能要提升不止一倍。上述所有的方法中,结合速度和检测率,表现最优秀的是MTCNN的方法(但凡涉及到VGG16、Resnet34这种大的网络结构的检测算法很难实用起来),后续笔者会详尽介绍MTCNN的训练测试流程。

猜你喜欢

转载自blog.csdn.net/yangpan011/article/details/80080114