尺度不变人脸检测器(S3FD-Single Shot Scale-invariant Face Detector)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gzq0723/article/details/79969201

今天讲尺度不变人脸检测前之前,我想讲解下一位热心研究者的问题,可以简单讲解下,希望也可以帮助其他读者,谢谢!

640?wx_fmt=jpeg

640?wx_fmt=jpeg

这样的人脸尺度怎么去实现的,其实很简单,如果你有详细读过Spatial pyramid pooling和Hypercolumns,其中有详细讲到。

640?wx_fmt=png

上图就是Hypercolumns文章中的图解,如果想通过该技术获取热心研究者的问题,只要利用好padding的参数,也就是文章提及的Spatial Pooling parameters。这下应该可以帮你解决这个小问题了,可以自己在草稿纸上涂涂画画,就可以明白了。


现在我们开始进入今天的主题——尺度不变人脸检测器。

文章:https://arxiv.org/abs/1708.05237

文章主要是针对基于anchor的检测器对小人脸检测率较低的问题进行了分析和进一步地改进。基于anchor的目标检测最近几年在顶级期刊和会议都有出现,被很多人使用,发展也很迅速,但是在小人脸领域中,检测效果依然不理想。主要原因如下:

1) The lowest anchor-associated layer使用的步长太大,比如SSD网络使用的是8个像素,Faster R-CNN使用的是16个像素,在这些经典的目标检测网络中,小尺度的人脸被严重缩放压缩,通过网络提取的特征信息大部分都被丢失,最后检测精度较低;

2)anchor的尺度和感受野相互不匹配,而且都太大而不适宜小人脸;

3)离散尺度的anchor预测连续尺度的人脸,导致tiny face和outer face均不能获得足够多的匹配; 

4)小的anchor在进行匹配时会面临更多的负样本。

640?wx_fmt=png

于是提出了以下的框架,而且结构和SSD一致,在不同层使用不同尺度的anchor预测目标。

640?wx_fmt=png

  • Scale-equitable framework 

这里将anchor-associated网络层的步长从4到128以2倍方式递增,这样可以保证不同尺度的人脸都有足够的信息用于人脸检测。

640?wx_fmt=png

anchors尺寸从16到512,基于有效接受域和等比例间隔原理。构造该框架,网络结构包括以下几个部分:

  • 基于卷积层:文章保持了VGG-16网络中的conv1_1到pool5, 去除其他网络层;

  • 额外卷积层:通过增加这些额外卷积层去得到多尺度特征图(feature maps);

  • 检测卷积层:选择网络中的conv3_3, conv4_3, conv5_3, conv fc7, conv6_2和conv7_2作为人脸检测层,使用不同尺寸的anchor来进行预测;

  • 预测层:每个检测层后面使用一个 p×3×3×q 卷积层用于预测,p和q是输入输出的通道数,3×3是卷积核大小,对于每个anchor,预测4个坐标位置补偿,N个分类概率,其中conv3_3检测层是N = m + 1 , (m是背景标签),其他检测层 Ns = 2;

  • 多任务层:对于分类识别使用Soft-Max Loss,对于位置回归使用Smooth L1 Loss。

上表的网络设计的主要考虑两个因素如下: 

  • anchor的size应当比理论上的感受野小,理论上的感受野是指该范围内的任意输入都会影响到输出,但实际这种影响不是均匀的,于是中间的输入对输出影响越重,类似中心高斯分布,如下图(a)(b)所示。

640?wx_fmt=png

应当使得anchor的尺寸和有效感受野相匹配,有效感受野如上图(b)中的蓝色虚线圆圈表示的。其中,黑色虚框为理论的感受野大小。

  • 不同尺寸的anchor应具有相同的空间密度分布,如上图(c)中所示,anchor的尺寸和步长的比例始终保持为4,即使在不同尺度上,滑动过一定百分比的像素,得到的anchor的数量是一致的。

  • Scale compensation anchor matching strategy

图像中连续分布的人脸尺寸和anchor离散的尺寸会造成两个相邻的anchor中间尺寸的人脸检测率低。anchor尺寸是离散的,而人脸尺寸是连续的,这些人脸的尺度分布远离anchor尺度,不能匹配足够多的anchor,导致其召回率较低。

为了改善这种状况,主要采取了下列两种手段:

  • 将原有的匹配阈值从0.5降到0.35,旨在增加更多成功地匹配;

  • 选出所有IOU大于0.1,得到anchor并进行排序,从中选top N,N为平均成功匹配的数量。

具体的效果如下图(左)所示:

640?wx_fmt=png

  • Max-out background label

对于conv3_3来说,由于采用了小的anchor,导致小人脸的high false positive rate,显然尺寸小的anchor占了绝大比例,这也是false positive的主要来源。

640?wx_fmt=png

于是,建议在最底层应用一种更复杂的分类策略来处理来自小anchor的复杂背景。这里背景太过复杂,将其分成一类太简单粗暴了,于是将背景细分为多个类别,人脸作为其中一类。这样复杂的背景可以被正确分类的概率就提升了。

为了去除这些虚警,对每个最小的anchors,将背景分为了m类,在计数每个位置类别时,得到m类个背景的概率,然后选择一个概率最大的分数作为最终分数用于计算Soft-Max Loss。

主要的方式如下:


640?wx_fmt=png

在conv3_3层(小目标产生最多的层),输出通道数为(Ns+4),其中 Ns>2,而其它所有检测层的输出通道数均为“2+4”,表示二分类和4个bounding box的坐标。Ns中包含了1个正样本的概率以及Ns−1个负样本概率,从负样本概率中选出最大值与正样本概率一起完成之后的Soft-Max二分类。 这种看似多余的操作实际上是通过提高分类难度来加强最后识别的能力。

Max-out运算集成了一些局部最优解,来降低小脸的false positive rate

640?wx_fmt=png

其中,F表示只使用了scale-equitable框架,F+S表示应用scale-equitable框架和 尺度补偿anchor的匹配策略,F+S+M表示scale-equitable框架, 尺度补偿anchor的匹配策略和max-out background label。

  • 实验结果:

Pascal Face:

640?wx_fmt=png

FDDB:

  • Discontinuous ROC curves

640?wx_fmt=png

  • Continuous ROC curves

640?wx_fmt=png

WIDER FACE:

640?wx_fmt=png

简单分析下:

从实验可以看出来,scale-equitable框架是至关重要的。

使用titan x(Pascal)和cudnnv 5.1(intel xeon e5-2683v3@2.00GHZ)来测量速度,对于批处理大小为1的VGA分辨率图像,使用单个GPU,人脸检测器可以运行36fps,实现实时速度,另外,80%的时间用于VGG-16网络,因此使用更快的基础网可以进一步提高速度。

代码:https://github.com/sfzhang15/SFD


640?wx_fmt=jpeg

阅读更多

没有更多推荐了,返回首页