本文来自《Detecting Faces Using Region-based Fully Convolutional Networks》,又是腾讯ai实验室的做品。时间线为2017年9月。express
如图所示,影响人脸检测的涉及到人脸遮挡,人脸尺寸,光照条件,各类姿态,丰富的表情等等。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上得到了最好;
为了提高R-FCN架构对人脸检测的性能,这里有三方面的改进:框架
- 引入额外更小的锚,并将位置敏感ROI池化改的更小以适应很小人脸的检测;
- 提出在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的尺度。编码
在原始R-FCN中,全局平均池化是将位置敏感ROI池化后的特征融合到一个维度上。该操做会致使每一个位置人脸呈现均匀分布。然而人脸的每一个位置在检测而言都是非均匀的。例如在人脸识别中,《Recognizing imprecisely localized, partially occluded, and expression variant faces from a single sample per class》人眼一般须要比嘴巴得到更多关注。直观上,咱们相信这样的假设,即不一样的人脸区域的重要性确定是不一样的。所以,做者提出了对位置敏感ROI池化的输出中每一个位置进行权重化,从而从新权重每一个区域,这被称为位置敏感平均池化。spa
形式化上,假设\(\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结构上均可以方便的实现位置敏感平均池化。设计
受到《Face R-CNN》的启发,做者也采用了多尺度训练和测试的策略。在训练阶段,将输入的图片最短边resize成1024或者1200个像素。这里的训练策略保证模型能够鲁棒性的检测不一样尺度的目标,特别是小型人脸。在线硬样本挖掘也是一个简单可是有效的策略。在训练阶段,采用OHEM保证每一个mini-batch上正负样本比例1:3。在测试阶段,对每一个测试图片创建一个金字塔,金字塔的每一个尺度都独立进行测试(即一张图片会通过网络好几回)。而后将每一个尺度的结果最后融合到原尺度图片上。blog
这里训练时候的超参数相似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的训练方式。 .