FaceBoxes论文阅读

11 篇文章 0 订阅
10 篇文章 0 订阅

论文:FaceBoxes: A CPU Real-time Face Detector with High Accuracy

原文链接:原文链接

Faceboxes是一个实时人脸检测算法,在CPU上也能够达到20FPS,而且速度性能比较稳定,与人脸数量无关。

 

1,引言

    为了检测人脸检测速度问题,我们提出了一个新的人脸检测器,faceBoxes,在速度和准确率上都得到了很好的性能。我们的方法是一个轻量级但是很强大的网络结构,包括快速消化卷积层(RDCL)多尺度卷积层(MSCL)。RDCL可以使faceboxes在cpu上达到实时人脸检测速度。MSCL用来丰富感受野并对不同层不同尺度的人脸anchor进行离散化。另外,我们提出了一个新的anchor致密化策略使不同类型的anchor具有同样的密度,这大大地改善了小人脸的召回率。因此,提出的人脸检测器在单个CPU上可以达到20FPS,在单个GPU上可以达到125FPS。更重要的是,Faceboxes的速度对不同数量的人脸是不变的(具有稳定性)。这些挑战主要来自人脸检测器的两个需求:1)人脸在杂乱背景下的视觉变异较大,需要人脸检测器准确地处理复杂的人脸和非人脸分类问题;2)可能的人脸位置和人脸大小的大搜索空间进一步要求时间效率。这两个要求是相互矛盾的,因为高精度的人脸检测器往往在计算上很昂贵。因此,如何在CPU设备上实现实时的检测速度,同时又能保持较高的性能,是目前CPU设备上实用的人脸检测器尚待解决的问题之一。
    为了满足这两个相互矛盾的要求,人脸检测的研究主要从两方面展开。早期的方法是基于手工特性。继Viola-Jones人脸检测器[37]的开创性工作之后,早期的工作大多集中在设计健壮的特征和训练有效的分类器。在级联结构的基础上,将可变形部件模型(DPM)引入人脸检测任务中,取得了良好的性能。然而,这些方法高度依赖于非鲁棒的手工特征,分别对各个组件进行优化,使得人脸检测管道处于次优状态。简而言之,它们在CPU上是有效的,但对于人脸的巨大视觉变化却不够精确。
    另一种方法是基于卷积神经网络(CNN),近年来,从图像分类到目标检测都取得了显著的成功。最近,在传统的人脸检测框架中,CNN作为特征提取器成功地引入到人脸检测任务中[23,41,42]。此外,一些人脸检测器[4,46]从通用的对象检测方法中继承了有效的技术,如faster R-CNN[29]。这些基于CNN的人脸检测方法对人脸外观的巨大变化具有很强的鲁棒性,并显示了最先进的性能。但它们太耗时,无法实现实时速度,尤其是在CPU设备上。
    这两种方式各有优势。前者速度快,后者精度高。为了在速度和准确度上都有很好的表现,一个自然的想法是将这两种方法的优点结合起来。因此,提出了基于cascaded CNN的方法[16,45],将CNN学习到的特征放入级联框架中,以提高性能,保持效率。然而,基于cascaded CNN的方法存在三个问题:1)速度与图像上的人脸数量呈负相关。随着人脸数量的增加,速度会急剧下降;2)基于级联的检测器分别对各部件进行优化,使得训练过程极为复杂,最终模型次优;3)对于vga分辨率的图像,其在CPU上的运行效率约为14 FPS,速度不足以达到实时速度。
    本文以faster R-CNN[29]中的RPN和SSD[21]中的多尺度机制为灵感,开发了一种基于CPU的实时人脸检测系统。具体地说,我们提出了一种新的人脸检测器FaceBoxes,它只包含一个全卷积神经网络,并且可以端到端的训练。该方法具有轻量级但功能强大的网络结构(如图1所示),由快速消化卷积层(RDCL)和多尺度卷积层(MSCL)组成RDCL的设计目的是使facebox在CPU上实现实时速度,MSCL的目标是丰富接受域,并在不同的层上离散anchor,以处理不同尺度的人脸。此外,我们提出了一种新的anchor加密策略,使不同类型的anchor在输入图像上具有相同的密度,显著提高了小人脸的召回率因此,对于vga分辨率的图像,我们的人脸检测器在一个CPU核上以每秒20帧的速度运行,使用GPU以每秒125帧的速度运行。更重要的是,facebox的速度与图像上的人脸数量无关。我们综合评估了该方法,并在多个人脸检测基准数据集上展示了最新的检测性能,包括AFW、PASCAL人脸和FDDB。
为明确起见,这项工作的主要贡献可概括为四个方面:
•我们设计了快速消化卷积层(RDCL),使人脸检测在CPU上实现实时速度;
•我们引入多尺度卷积层(MSCL),通过丰富接收域和分层离散Anchor来处理不同尺度的人脸。
•我们提出了一种新的Anchor加密策略,以提高小面孔的召回率;
•我们进一步提高了AFW、PASCAL face和FDDB数据集的最新性能。

 

2,相关工作

 

    现代人脸检测方法大致可以分为两类。一个是基于手工制作的功能,另一个是基于CNN。本节简要回顾这两种方法。
2.1 基于手工的方法
    以往的人脸检测系统大多基于手工特征。由于开创性的Viola-Jones人脸检测器[37]提出将Haar特征、Adaboost学习和级联推理相结合用于人脸检测,后续的许多工作都提出了用于实时人脸检测的方法,如新的局部特征[20,40]、新的增强算法[3,25]和新的级联结构[2,18]。 
2.2 基于CNN的方法
    CNN最早用于人脸检测可以追溯到1994年。Vaillant等人使用训练有素的CNN以滑动窗口的方式检测人脸。Rowley等[30,31]介绍了一种用于垂直正面人脸检测的视网膜连接神经网络和一种用于旋转不变人脸检测的方向估计的“路由器”网络。Garcia等人开发了一种用于检测半正面人脸的神经网络。Osadchy等人[24]训练了一个CNN来同时进行人脸检测和姿态估计。这些早期的方法只能在简单的数据集上获得较好的性能。
    近年来,基于CNN的人脸检测技术得到了很大的发展。CCF[41]在CNN特征的基础上使用增强来进行人脸检测。Farfade等人将[6]微调CNN模型训练在1k ImageNet分类任务上进行人脸和非人脸分类任务。人脸度[42]训练了一系列用于人脸属性识别的神经网络来检测部分遮挡的人脸。Cascaded CNN16]开发了一种基于神经网络的级联结构,具有强大的识别能力和高性能。Qin等人提出联合训练CascadeCNN实现端到端优化。与[5]相似,MTCNN[45]提出了一种基于多任务Cascaded CNNs的联合人脸检测与对齐框架。UnitBox[44]引入了一个新的相交过并损失函数。CMS-RCNN[46]使用faster RCNN人脸检测与身体上下文信息。Convnet[19]将CNN与三维人脸模型集成在一个端到端的多任务学习框架中。STN[4]提出了一种新的用于人脸检测的监督变压器网络和ROI卷积。

3 FaceBoxes
    本节介绍了使facebox在CPU设备上准确和高效的三个贡献:快速消化卷积层(RDCL)多尺度卷积层(MSCL)anchor加密策略。最后,我们介绍了相关的训练方法。
3.1 快速消化卷积层

    大多数基于CNN的人脸检测方法通常都受到时间开销的限制,尤其是在CPU设备上。更准确地说,当输入、卷积核和输出的大小都很大时,CPU的卷积运算是非常耗时的。我们RDCL的设计是通过适当的卷积核大小来快速缩小输入空间大小,减少输出通道的数量,使CPU设备上的facebox达到实时速度,具体如下:
•缩小输入空间大小:快速缩小
    输入的空间大小,我们的RDCL为它的卷积和池化层设置了一系列大的步长。如图1所示,Conv1、Pool1、Conv2和Pool2的步长分别为4、2、2和2RDCL的总步长为32,这意味着输入空间的大小减少了32倍。
•选择合适的卷积核大小:卷积核的大小
    一个网络的前几层应该是小的,以加快速度,同时也应该足够大,以减轻空间尺寸减小带来的信息损失。如图1所示,为了保持效率和效率,我们对Conv1、Conv2和所有池层分别选择了7*7、5*5和3*3个内核大小。
•减少输出通道数量:
    我们利用C.ReLU激活函数(如图2(a)所示),减少输出通道的数量。C.ReLU[32]的灵感来自于CNN的观察,在较低的层过滤器形成对(即,相位相反的滤波器)。从这个观察中,C.ReLU可以通过在应用ReLU之前将负输出连接起来,将输出通道的数量增加一倍。使用C.ReLU显著提高了速度,而精度的下降可以忽略不计。

3.2 多尺度卷积层
    该方法以RPN为基础,在多目标检测的场景中,RPN作为一种不确定类的检测器。对于单类检测任务(如人脸检测),RPN自然是唯一相关类的检测器。然而,作为一种独立的人脸检测器,RPN无法获得具有竞争力的性能。我们认为,这种令人不满意的表现来自两个方面。首先,RPN中的anchor只与最后一个卷积层相关,该卷积层的特征和分辨率都太弱,无法处理各种大小的人脸。其次,anchor相关层负责检测一定尺度范围内的人脸,但它只有一个单一的感受野,无法匹配不同尺度的人脸。为了解决以上两个问题,我们的MSCL按照以下两个维度进行设计:
•沿网络深度维度进行多尺度设计。

    如图1所示,我们设计的MSCL由多个层组成。这些层的尺寸逐渐减小,形成多尺度特征图。与[21]类似,我们的默认anchor与多尺度特征图关联。(例如inception3,Conv3_2和Conv4_2)。这些层是一种沿网络深度维度的多尺度设计,将anchor离散在多个分辨率不同的层上,自然处理不同大小的尺度。
•沿网络宽度尺寸进行多尺度设计
    为了学习不同尺度人脸的视觉模式,anchor相关层的输出特征应该对应不同大小的感受野,这可以通过Inception模块[34]轻松实现。Inception模块由多个不同卷积核的卷积分支组成。这些分支作为网络宽度维度上的多尺度设计,能够丰富感受野。如图1所示,MSCL的前三层基于Inception模块。图2(b)说明了我们的Inception实现,这是一个性价比高的模块,可以捕捉不同尺度的人脸。

3.3 anchor加密策略
    如图1所示,我们对默认anchor(即方形锚点)施加1:1的宽高比,因为人脸框大致为方形。 Inception 3个层的anchor尺度为32,64和128像素,Conv3_2层和Conv4_2层分别为256和512像素。

图3 anchor 致密化例子。为清楚起见,我们仅在一个感受野中心(即,中央黑色单元)处使致密化anchor,并且仅对对角anchors着色。
    图像上anchor的平铺间隔等于相应anchor相关层的步长。例如,conv3_2的步长为64像素,其anchor为256*256,表示输入图像上每64像素有一个256*256尺寸的anchor。我们定义anchor的平铺密度(即, A_density),详情如下:


这里A_scale是anchor的尺度,A_interval是anchor的平铺间隔。默认anchor的平铺间隔分别为32、32、32、64和128。根据方程(1),对应的密度分别为1、2、4、4、4,不同尺度的anchor之间存在明显的平铺密度不平衡问题。与大anchor比较(即、128*128、256*256及512*512)、小anchor(即, 32*32和64*64)太稀疏,导致小人脸的召回率很低
    为了消除这种不平衡,我们提出了一种新的anchor加密策略。具体地说,为了使一种anchor密度增加n倍,我们在一个感受野的中心均匀地平铺A_number = n^2个anchor,而不是仅仅平铺一个在这个接受域的中心来预测。一些例子如图3所示。在本文中,为了提高小anchor的平铺密度,我们采用的策略是将32*32的anchor平铺密度提高4倍将64*64的anchor平铺密度提高2倍,从而保证不同尺度的anchor具有相同的平铺密度。(4)因此,在图像上不同尺度的人脸可以匹配几乎相同数量的anchor。

3.4 训练
本小节介绍了训练数据集、数据扩充、匹配策略、损失函数、硬负样本挖掘等实现细节。
训练数据集:WIDER FACE
数据增强:每一幅训练图像都采用以下数据增强策略进行顺序处理:
颜色蒸馏:应用一些类似于[9]的光度蒸馏。
随机裁剪: 我们从原始图像中随机裁剪五个方形补丁:一个是最大的方形补丁,其他的大小介于原始图像的短边尺寸的[0.3,1]之间。 然后我们随意选择一个补丁用于后续操作。
尺度变换:随机裁剪后,将选中的正方形patch调整为1024*1024。
水平翻转:调整大小后的图像水平翻转的概率为0:5。
人脸框过滤:如果人脸框的中心在上述处理过的图像中,我们保留重叠的部分,然后过滤掉这些高度或宽度小于20像素的人脸框。
匹配策略:在训练中,我们需要确定哪些anchor对应于一个人脸边界框。我们首先将每个人脸匹配到具有最佳jaccard重叠的锚点,然后将锚点匹配到具有高于阈值(即0.35)。
损失函数:我们的损失函数与faster R-CNN[29]中的RPN相同。采用2类softmax损失进行分类,smoothL1损失进行回归。 

硬负样本挖掘:在anchor匹配步骤完成后,发现大多数anchor都是负的,这就导致了正例和负例之间的显著不平衡。为了更快的优化和更稳定的训练,我们根据损失值对它们进行排序,并从中挑选出最优的,这样负例和正例之间的比例最多为3:1。
其他实现细节:使用“xavier”方法随机初始化所有参数。我们以0:9的动量,0.0005的重量衰减和32的batch size对模型进行fine tune。迭代的最大数量是120 k,我们使用10^-3学习速率的80 k迭代,然后继续分别训练了20 k迭代学习率为10^-4和10^-5,。我们的方法是在Caffe库中实现的。

4, 实验

    在本节中,我们首先介绍了facebox的运行时效率,然后对我们的模型进行了简化分析,最后在常用的人脸检测基准上对其进行了评估。
4.1 运行时间效率
    基于CNN的方法一直因其运行时效率而受到指责。虽然现有的CNN人脸检测器可以通过高端gpu加速,但在大多数实际应用中,尤其是基于CPU的应用中,速度不够快。如下所述,我们的Facebox足够高效,可以满足实际需求。
在推理过程中,我们的方法输出大量的框(如一个vga分辨率图像的8525个框))。在应用NMS之前,我们首先以0:05的置信度阈值过滤掉大多数框并保留前400个框,然后执行jaccard重叠为0.3的NMS并保留前200个框。我们使用Titan X (Pascal)和cuDNN v5.1以及Intel Xeon E5-2660v3@2:60GHz来测量速度。如表1所示,与最近基于cnn的方法相比,我们的facebox可以在CPU上以每秒20帧的速度运行,具有最先进的精度。此外,我们的方法可以运行125帧每秒使用一个GPU和只有41MB的大小。

 4.2 模型分析
    我们在FDDB数据集上进行了大量的消融实验来分析我们的模型。与AFW和PASCAL face相比,FDDB的计算难度要大得多,因此在FDDB上分析我们的模型是有说服力的。对于所有的实验,除了对组件进行指定的更改外,我们使用相同的设置。
消融设置:
    为了更好地理解facebox,我们一个接一个地消融每个组件,以检查每个提出的组件如何影响最终性能。1)首先,我们消融了anchor加密策略。2)然后我们将MSCL替换为三个卷积层,每个卷积层都采用3*3的卷积核,输出数与MSCL的前三个Inception模块相同。同时,我们只将anchor与最后一个卷积层关联。3)最后,我们用ReLU代替RDCL中的C.ReLU。消融结果如表2所示,一些有希望的结论可以总结如下:
Anchor加密策略很重要:我们的anchor加密策略是用来增加小型anchor的密度(即以提高小人脸的召回率。从表2的结果可以看出,在anchor加密策略消融后,FDDB上的mAP从96:0%降低到94:9%。急剧下降(即, 1.1%),显示了所提出的anchor加密策略的有效性。
MSCL更好:表2中第二列和第三列的对比表明,MSCL由于感受野的多样性和多尺度anchor平铺机制,有效地将mAP提高了1.0%。
RDCL是有效的并保留了准确率:RDCL的设计使得我们的facebox能够在CPU上实现实时的速度。如表2所示,RDCL在精度上的下降可以忽略不计,但在速度上有显著的提高。具体来说,FDDB mAP降低了0.1%,以换取大约19.3ms的速度改进。

Anchor加密策略至关重要: 我们的anchor加密策略用于增加小anchor的密度(即32*32和64*64),以提高小人脸的召回率。 从表2中,我们可以看到在消除anchor加密策略后,FDDB上的mAP从96.0%降低到94.9%。 急剧下降(即1.1%)证明了所提出的anchor加密策略的有效性。 

 MSCL更好: 表2中第二列和第三列之间的比较表明MSCL有效地将mAP增加1.0%,这取决于不同的感受域和多尺度anchor平铺机制。

RDCL是高效且准确的保留: RDCL的设计使我们的FaceBoxes能够在CPU上实现实时速度。 如表2 中所述,RDCL导致精度略微下降,但速度显着提高。 具体而言,FDDB mAP以大约19.3ms的速度改进而降低0.1%。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值