AI | 百度提出PyramidBox人脸检测算法(ECCV2018)

AI | 百度提出PyramidBox人脸检测算法(ECCV2018)

编者按:

本篇文章介绍百度的一篇人脸检测的文章,已被ECCV2018(计算机视觉顶会)收录,相比之前的大多数网络,PyramidBox提出了结合背景信息来优化网络的方式,利用半监督学习生成的人头和身体标签来更好更精确的识别人脸

文章作者:TeddyZhang
责任编辑:TeddyZhang
文章发表于微信公众号【运筹OR帷幄】:AI | 百度提出PyramidBox人脸检测算法(ECCV2018)
欢迎原链接转发,转载请私信@运筹OR帷幄获取信息,盗版必究。
敬请关注和扩散本专栏及同名公众号,会邀请全球知名学者发布运筹学、人工智能中优化理论等相关干货、知乎Live及行业动态:『运筹OR帷幄』大数据人工智能时代的运筹学

今天我们来介绍一个由百度提出的人脸检测算法--PyramidBox,已被ECCV2018收录,本文提出的主要思想是使用背景信息来辅助人脸检测(Context-assisted),在此之前,我们来简要回顾下人脸检测的发展!

在之前传统的算法,由Viola-Jones提出AdaBoost算法结合Haar特征去训练一个多级联的网络,而接下来的很多工作主要来优化这个级联器,接着,使用DPM算法通过建立一系列deformable facial parts去做人脸检测的工作,这些主要在设计特征上做工作,而缺少表达能力。随着CNN的发展以及CNN-based物体检测器性能的大大提高,人脸检测领域也发生了巨大的进步,比如R-CNN系列,SSD,YOLO,FocalLoss等,对人脸检测的发展做出了重大的促进作用。

近年来,很多Anchor-based的检测框架致力于在不可控的环境下检测模糊,变形,部分的小人脸,SSH 和 S3FD 提出了尺度不变网络在单个网络的不同层中检测不同尺度的面部。 Face R-FCN 对分数映射上的特征响应重新加权,并且通过位置敏感的平均池化消除了每个面部区域中的不均匀分布的影响。FAN 提出了一个 anchor 级的关注机制,通过高亮面部区域的特征来检测被遮挡的面部。但这些工作并没有过多的关注如何使用背景的信息!

论文地址:

arxiv.org/abs/1803.0773

代码地址:

github.com/yxlijun/Pyra


1算法总览

由于在现实生活中,人脸不会是一个孤立的存在,往往伴随着肩膀、头部或者身体,提供了丰富的可利用的环境关联,尤其是面部纹理由于低分辨率,模糊或者遮挡不能被辨别时。

  1. 一个网络学习到的不应该仅仅是脸部的特征还有背景特征如头部和身体,如上图,我们需要额外的anchor去匹配到这些区域,本文使用了半监督的方式去产生近似的标签,构造一系列anchor成为PyramidAnchors
  2. 高层的环境特征应该与底层的特征相结合,但由于人脸检测难易程度的面部是不同的,这就说明并不是所有高层的语义信息都对检测小目标有用,因此对FPN进行了改进,变成了Low-level Feature Pyramid Network(LFPN),可以更好地利用特征信息
  3. 在检测阶段,我们必须充分的利用结合的特征,为此我们设计了一个Context-sensitive prediction module(CPM)模块,它具有广而深的网络结构,并且可以很好地融合人脸周围的信息,同时,我们为检测模块设计了max-in-out层以提高网络的分类性能
  4. 在训练阶段,我们提出一种训练策略data-anchor-sampling来调整数据集的分布,为了更有效的学到代表性的特征,困难样本的多样性是十分必要的

2网络结构

尺度匹配的主干网络层

本文使用了与 S3FD 完全相同的主干网络,包括基础卷积层和额外卷积层。其中基础卷积层即为 VGG16 中的 conv1_1 层到 pool5 层,额外卷积层将 VGG16 中的 fc6 层和 fc7 层转换为 conv_fc 层,又添加了更多的卷积层使网络变得更深。

Low-level Feature Pyramid Layers

为了提高人脸检测器对于不同尺度人脸的检测能力,高分辨率的低级特征扮演着关键角色。在通用物体检测中,高层次的特征被用来检测大物体,而低层次的特征用来检测小物体,随着FPN网络的提出,我们发现将高层的语义特征整合到高分辨率的底层特征,在通用物体检测和人脸检测中都取得了不错的效果,但并不是所有的高级语义信息都对小人脸有帮助!

首先,那些小的,模糊和遮挡的人脸与大的,清晰和完整的人脸具有不同的纹理特征,直接将所有高层特征进行融合太简单了,第二,从环境区域提取的高层特征可能具有很少的脸部纹理特征并可能引入噪声信息。例如,PyramidBox的conv7-8和conv6-2的感受野为724和468,但输入图片尺寸为640,也就是说这两层包含了太多的背景噪声信息,对检测小人脸是没有什么帮助的!因此本文提出的LFPN从中间开始建立金字塔,而不是最高层,其感受野大小大约为输入图片的一半~

Pyramid Detection Layers

我们选择 lfpn_2,lfpn_1,lfpn_0,conv_fc7,conv6_2 和 conv7_2 作为检测层,它们的 anchor 尺寸分别为 16,32,64,128,256 和 512。这里 lfpn_2,lfpn_1 和 lfpn_0 是 LFPN 的输出层,分别对应 conv3_3,conv4_3 和 conv5_3

Predict Layers

每个检测层后面都有一个CPM,用于监督PyramidAnchors,由于CPM的输出包括脸部、头部和身体三个部分,每个CPM的输出为

其中

与特征图大小相关,


由于每个特征都被用来做脸部、头部和身体的分类和回归,所以需要4个通道(包含一个background),满足

Loss还是使用了softmax做分类以及L1 loss做回归!


3背景敏感预测模块(CPM)

预测模块

MS-CNN中提出了扩大每个任务的子网络可以提高精度,SSH通过增加更宽的不同大小得卷积来增大感受野,DSSD为每个预测模块增加了残差模块,收到Inception-Resnet的启发,我们可以知道增加网络的宽度增益和深度增益可以同时获得,所以我们使用了DSSD的残差模块来代替SSH中的环境模块的卷积,这样我们既可以保证SSH中的环境信息,又可以获益DSSD中的残差方法,以提高精度。

Max-in-out

S3FD使用max-out背景标签来减少小样本的误检率,本文在正负样本均使用这种策略,我们首先为每个预测模块预测一个

的分数,然后选择最大的那个

为正分数,最大的那个

为负分数,在本文中,我们设置第一个CPM中

,由于较小的anchors有更复杂的背景,然而其他的CPM中

,为了检测更多的人脸。


4PyramidAnchors

最近的很多工作在平衡anchor尺寸上取得了很大的进步,但却忽略了背景信息,因为他们都是为了人脸区域设计的,为了解决这个问题,本文对此进行了改进:

上图解释:假设我们要检测

上尺寸为16的最小绿色人脸,可以在Pyramid-Anchor中得到监督信息,

上的对应尺寸为32的标记为头部,

上的对应尺寸为64的标记为身体

对于每一个目标人脸,PyramidBox会生成一系列anchors,这些anchors对应着与人脸相关的更大的区域,如头部、肩膀和身体。我们通过一些统一的box来近似头部和身体的实际区域,只要在不同人脸中这些区域都近似即可!


对于目标人脸区域在原图中定位

,而

表示i-th层的j-th特征,并且步长为

,所以我们定义k-th pyramid-anchor的标签如下:

其中k=0,1,2 分别代表脸部,头部和身体的区域,threshold=0.35, 超参数

=2代表相邻CPM之间的步长。我们可以看到一个人脸可以生成三个目标区域分别表达人脸本身,头部和身体,这样可以极大的提高对模糊、遮挡人脸的检测!



从这个曲线,我们可以清晰的看出,PyramidBox对这些模糊、遮挡等目标的检测效果十分强!



对比实验

  • 从不同的层开始的LFPN的性能
  • PyramidAnchors不同参数的性能

可以看出,使用背景信息很有帮助,在easy, medium, hard分别提高了0.7%, 0.6%, 0.9%的精度,尤其对困难人脸很有效果!

  • 利用更深更宽的网络模块(SSH context + DSSD)

最终在WIDER FACE数据集上的结果


深红色那条就是PyramidBox,可见是多么厉害!


优缺点

优点:

  • 探讨了如何更有效的利用背景信息,并使用半监督模式生成标签,从而提高了对于模糊、遮挡人脸的检测
  • 探讨了FPN结构在检测小目标的确定,并对其进行改进为LFPN

缺点:

  • 网络过于复杂,笔者在1050Ti 4G显存下,使用PyramidBox进行检测一张图片,竟然out of memory,显然这个商用还是成本太高
  • 底层feature map进行预测,竟然使用了160x160,虽然是为了有效检测小人脸,但这样做势必会产生大量anchor,速度必定很慢,但笔者也没有什么好策略,欢迎大家讨论~~


作者:TeddyZhang


扫二维码关注『运筹OR帷幄』公众号:

点击查看『运筹OR帷幄』志愿者招募介绍及加入方式

编辑于 2019-04-01

文章被以下专栏收录