face detection[Face R-FCN]


本文来自《Detecting Faces Using Region-based Fully Convolutional Networks》,又是腾讯ai实验室的作品。时间线为2017年9月。

0 引言

face detection[Face R-FCN]
如图所示,影响人脸检测的涉及到人脸遮挡,人脸尺寸,光照条件,各种姿态,丰富的表情等等。fast/faster rcnn模型都是基于r-cnn模型的方法,并通过ROI的方式逐区域的进行检测。然而直接在全卷积网络上(例如ResNet)使用特定区域操作的方法,因为强大的分类能力反而导致检测性能不足。相较而言,R-FCN是都通过全卷积方式来处理该问题的。R-FCN的卷积网络是基于整个图片进行计算共享的,这是的对训练和测试的性能都有提升。相比于R-CNN,R-FCN提出了使用更少的逐区域层来平衡分类和检测的训练,自然地将全卷积网络与基于区域的模块相结合。

作为目标检测中的一个子领域,人脸检测因为采用了基于区域的方法而效果大大提升。且基于R-FCN的模型效果更优于基于R-CNN的人脸检测效果。基于通用人脸的尺寸,作者精心设计了锚和ROI的尺度。因为考虑到人脸的部分结构比较难检测,所以作者引入了一个位置敏感平均池化来生产嵌入特征,以此增强辨识性,并消除了每个人脸部分中非均匀分布的影响。并且,作者采用了多尺度训练和测试方法。同时也引入了在线硬样本挖掘方法加速训练。
本文主要贡献如下:

  • 提出了一个人脸检测框架,通过整合几种新想法去考虑人脸的特殊属性。因为提出的方法是基于R-FCN,所以也适合人脸检测,故而得名face rfcn;
  • 引入一个新颖的位置敏感平均池化去重新权重化得分map上的嵌入响应,并消除每个人脸部分上非均匀贡献的影响。
  • 在WIDER FACE和FDDB上获得了最好;

1 结构

face detection[Face R-FCN]
为了提升R-FCN架构对人脸检测的性能,这里有三方面的改进:

  • 引入额外更小的锚,并将位置敏感ROI池化改的更小以适应很小人脸的检测;
  • 提出在R-FCN最后一层特征投票层使用位置敏感平均池化而不是通常的平均池化;
  • 采用多尺度训练。在训练阶段采用在线硬样本挖掘策略,在测试阶段将多尺度检测结果聚合起来去提升效果。

1.1 基于R-FCN的基本结构

R-FCN是一个基于区域的全卷积网络,最初是用来做目标检测的。不同于其他基于区域的检测器(例如Faster RCNN),R-FCN构建一个更深的全卷积网络,且通过在整个图片上共享计算,从而没有增加速度负载。R-FCN建立在ResNet 101上,包含了RPN和一个R-FCN模块。
在R-FCN中的ResNet结构主要扮演特征提取器。ResNet构建了一个非常深的网络,用于提取高度表征的图像特征。这些特征可以抓取相当大的感受野,而这其中很小的人脸检测也能得益于其抓取的上下文信息。从ResNet的最终输出feature map上,RPN可以根据锚生成一系列ROI。这些ROI再送入两个分离的R-FCN模块中位置敏感ROI池化层,以生成类别得分map和边界框预测map。在R-FCN的最后,在分类得分map和边界框预测map上分别使用全局平均池化以各自融合类别得分和边界框预测。

有两个采用R-FCN而不是R-CNN的优势:

  • 位置敏感ROI池化巧妙的通过池化一组特征map到一个输出得分map的具体位置上,从而将位置信息编码到每个ROI中;
  • 在ResNet中,没有非自然的加入全连接网络层,R-FCN的feature map可以训练更具表达性和更容易的学到类别得分和人脸的边界框。

基于R-FCN,作者提出了几个修改点以提升检测效果。对于更好的检测小脸,作者引入了更多更小尺度的锚(1到64个像素)。这些更小的锚 非常有助于抓取极端小的人脸。另外,作者设定了更小的池化尺度以池化位置敏感ROI,以此减少冗余信息。并修正了后续的投票机制(平均池化)并提出了位置敏感平均池化。最终在ResNet的最后阶段采用了atrous卷积,从而在更大感受野中没有丢失上下文信息下保证feature map的尺度。

1.2 位置敏感的平均池化

在原始R-FCN中,全局平均池化是将位置敏感ROI池化后的特征融合到一个维度上。该操作会导致每个位置人脸呈现均匀分布。然而人脸的每个位置在检测而言都是非均匀的。例如在人脸识别中,《Recognizing imprecisely localized, partially occluded, and expression variant faces from a single sample per class》人眼通常需要比嘴巴获得更多关注。直观上,我们相信这样的假设,即不同的人脸区域的重要性肯定是不同的。因此,作者提出了对位置敏感ROI池化的输出中每个位置进行权重化,从而重新权重每个区域,这被称为位置敏感平均池化。

形式化上,假设\(\bar{X}=\{X_i|i=1,2,...M\}\)表示一个位置敏感ROI池化层的输出M个featuremap,并且\(X_i=\{x_{i,j}|j=1,2,...,N^2\}\)表示第\(i_{th}\)个feature map,这里\(N\)表示池化的feature map的尺度,位置敏感平均池化计算特征响应值的权重化后的平均值,以此从\(\bar{X}\)得到平均特征\(Y=\{y_i|i=1,2,...M\}\),这里\(y_i\)表示为:
\[y_i=\frac{1}{N^2}\sum_{j=1}^{N^2}w_jx_{i,j}\]
这里\(w_j\)表示第\(j-th\)个位置的权重,注意到位置敏感平均池化就是在每个响应的位置上执行特征嵌入然后进行平均池化。因此,在大多数流行的DNN结构上都可以方便的实现位置敏感平均池化。

1.3 多任务训练和预测

受到《Face R-CNN》的启发,作者也采用了多尺度训练和测试的策略。在训练阶段,将输入的图片最短边resize成1024或者1200个像素。这里的训练策略保证模型可以鲁棒性的检测不同尺度的目标,特别是小型人脸。在线硬样本挖掘也是一个简单但是有效的策略。在训练阶段,采用OHEM保证每个mini-batch上正负样本比例1:3。在测试阶段,对每个测试图片建立一个金字塔,金字塔的每个尺度都独立进行测试(即一张图片会经过网络好几次)。然后将每个尺度的结果最后融合到原尺度图片上。

1.4 实现细节

这里训练时候的超参数类似face r-cnn。不过不同于face rcnn,作者采用的ResNet 101是在imagenet上预训练过的。特别是,在整个训练过程中将ResNet101模型的核参数固定住,以此保证特征提取器的稳定。
在RPN阶段,face rfcn枚举了多个锚的配置以准确的搜索人脸。通过结合大范围的尺度和长宽比,从而构建多尺度锚。这些锚然后映射到原始图像上以计算与ground-truth的IOU的得分,然后采用下列规则:

  • 最高IOU得分的锚被标记为正样本;
  • IOU超过0.7的被标记为正样本;
  • 如果IOU低于0.3,则标记为负样本。

R-FCN随后基于处理过的锚(候选框)进行训练,这里正样本和负样本的IOU分别是大于0.5的,和在0.1与0.5之间的。RPN和R-FCN同时基于softmax loss和平滑L1 loss联合训练。
在某个IOU得分上,会采用NMS来规范化这些锚。并通过OHEM来训练硬样本。RPN的minibatch大小为256,R-FCN的batchsize为128.大致上实现了end-to-end的训练方式。
.

上一篇:C# insert into 一条记录后获取该记录的自动增长列ID


下一篇:RDLC报表系列(六) 多图表-折线图和柱状图