前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >百度 PyramidBox 人脸检测器

百度 PyramidBox 人脸检测器

作者头像
BBuf
发布2020-06-24 16:44:10
9340
发布2020-06-24 16:44:10
举报
文章被收录于专栏:GiantPandaCVGiantPandaCV

0. 前言

1.png

今天给大家介绍一篇百度的论文PyramidBox人脸检测器,这是一款上下文内容辅助的人脸检测器。我自己在比赛中对图像预处理,截取人脸也经常用这个模型去做,效果十分不错。

1. 概述

近几年来人脸检测发展十分迅速,现在主要的挑战是小人脸,模糊人脸,人脸遮挡。我们提出了一款基于上下文辅助的人脸检测器来解决上述的挑战,基于上下文我们做了以下三点工作

  1. 我们设计了一种名为PyramidAnchor,这个上下文锚框,通过半监督方法来监督高级上下文特征学习
  2. 我们提出了一种低层次特征金字塔网络(Feature Pyramid Network),将高层级语义特征和低层级面部特征相结合,使得PyramidBox能一次(one-shot)预测所有尺度的面孔
  3. 我们提出了一种上下文敏感(context sensitive)结构来提高预测精度

相关代码开源在https://github.com/PaddlePaddle/models/tree/release/1.8/PaddleCV/face_detection

2. 想法提出

YOLO,R-CNN,SSD相关工作提出了一种很有效的方式去连接锚框和CNN网络,但这些工作没有关注人物背景信息,导致在一些极端情况下出现人脸漏检的情况,比如下图

2.png

我们单看左边的小图很难判断是否有人脸,但随着背景信息的加入,比如帽子,手臂,衣服,裤子等,这些都能帮助我们去推断人脸的位置。

  • 网络不仅需要识别人脸,还需要识别背景信息,这就需要额外的标注信息,这里我们对背景信息采取半监督的方法去生成近似的label
  • 在FPN基础上改造结构得到LFPN
  • 对于预测网络需要充分利用我们新加的背景特征,就有了CPM(Context-sensitive prediction module)背景感知模块

3. PyramidBox

3.1 网络架构

  • 骨干网络上继续沿用VGG16网络
  • 在骨干网络后接入LFPN模块
  • 对于每个金字塔预测层,接入CPM模块得到最终的输出

3.png

3.2 Low-Level Feature Pyramid Layers低层级特征金字塔

传统的FPN都是从最顶层进行特征融合,但是我们有以下几个观点

  • 不同大小的,模糊的人脸具有不同的纹理特征,直接简单粗暴的将高层语义特征拿来融合效果并不好
  • 高语义特征提取自面部纹理较少的区域,可能引入噪声信息

因此我们构建了一个低层级的特征金字塔层

我们选择感受野接近输入尺寸一半的卷积层,进行特征融合

具体结构形式如下

4.png

  • 首先是对原尺寸特征图做一次下采样
  • 下采样后的特征图进行1x1卷积缩放通道数
  • 再将特征图上采样至原尺寸
  • 最后进行element-wise 相乘(不要被图例欺骗了

3.3 PyramidDetectionLayer金字塔检测层

我们从整个网络选取了lfpn_2, lfpn_1, lfpn_0, conv_fc 7, conv 6_2, conv 7_2作为预测层

锚框大小设置为16, 32, 64, 128, 256, 512

采取类似SSD算法来进行目标检测

3.4 PredictLayer预测层

每个预测层后面都跟了一个CPM模块,形式如下

5.png

6.png

个人认为CPM模块设计吸收了GoogleNet的加宽网络的思想,将多层级特征进行级联

CPM模块的输出用于监督pyramid锚框

第L个CPM输出尺寸

通道尺寸 为20

其中每个通道的特征用于分类,人脸,头部,身体锚框回归

人脸分类需要4个通道。

其中是前景和背景的max-in-out标签,其中的p和n分别代表positive(正类), negative(负类)

通道分配遵循下图规则

7.png

此外,头部和身体的分类各需要两个通道,面部,头部和身体的定位各需要4个通道

下面解释为什么第0层特征层是1, 3,而其他特征层是3,1?

8.png

我们可以从这两幅图很清晰的看到,大Anchor框住物体概率更高,小Anchor更加精细,同时错误率也会提高

因此在第0层只设置1个正类预测,而其他层设置3个

3.5 Max-in-out

Max-in-out是对在小尺寸人脸检测上发力的S3FD中的Max-out的改进,S3FD为了加强对小目标的划分,他做了如下的操作

9.png

Maxout选择负样本锚框中可能性最大的负锚框,作为最终预测为negative anchor的打分

而Max-in-out是对正负样本锚框做上述处理

3.6 PyramidBox loss Layers

我们使用一系列pyramid anchors来监督分类和锚框回归

  • 对于分类我们采用softmax损失函数
  • 对于回归我们采用Smooth L1损失函数

4. PyramidAnchor

设计多尺度锚框有利于人脸检测,但是由于锚框只是设计检测人脸而忽略了多尺度之间的背景信息

PyramidAnchors生成一系列锚框,针对大区域人脸包括更多背景信息,如头部,肩部,身体部分

我们通过区域大小来对应调整锚框大小

10.png

比如图中最大的紫色框框住的人脸,这个pyramid anchor 来自P3 P4 P5

我们放大图仔细看

11.png

其中P3是通过conv_fc7预测标注的人脸确定的,P4是通过conv6_2预测标注的头部部分确定的,P5则是由conv7_2标注的身体中的脸部部分

首先我们是固定的一个锚框

P3 P4 P5图的分辨率是逐渐减小的,而锚框不变,因此锚框框住的相对区域于是越来越大的

比如P3图中我们可以直接框住人脸,那么P4图分辨率减小,因此框住头部(更大的区域),P5图分辨率继续减小,因此框住的是部分身体

采取的是自监督方式生成label,遵循下面公式

12.png

通过计算锚框与目标区域的iou,根据阈值进行标记,文中设置相关参数如下

  • threshold = 0.35
  • K = 2
  • = 2

其中K=2表示从0到2分别标注人脸,头部,身体这三个label

5. 实验结果

因为PyramidBox是基于S3FD改造的,所以以此为baseline进行对比

13.png

可以看到LFPN放置的位置对检测性能有一定程度上影响,在conv_fc7这里放置能取得更好的效果

6. 总结

百度的文章创新点还是很丰富的,把自监督引入人脸检测,通过Pyramid Anchor获取相关背景信息,辅助人脸检测。而且提点不是光靠改网络结构,选择了最朴素的Vgg16进行一定程度加深。也进一步证明了Pyramid Box和CPM对模型性能的提升。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GiantPandaCV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0. 前言
  • 1. 概述
  • 2. 想法提出
  • 3. PyramidBox
    • 3.1 网络架构
      • 3.2 Low-Level Feature Pyramid Layers低层级特征金字塔
        • 3.3 PyramidDetectionLayer金字塔检测层
          • 3.4 PredictLayer预测层
            • 3.5 Max-in-out
              • 3.6 PyramidBox loss Layers
              • 4. PyramidAnchor
              • 5. 实验结果
              • 6. 总结
              相关产品与服务
              人脸识别
              腾讯云神图·人脸识别(Face Recognition)基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、比对、搜索、验证、五官定位、活体检测等多种功能,为开发者和企业提供高性能高可用的人脸识别服务。 可应用于在线娱乐、在线身份认证等多种应用场景,充分满足各行业客户的人脸属性识别及用户身份确认等需求。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档