人脸检测-S3FD 分析

这篇文章的思路很清晰,提出问题到解决问题,不过大部分文章都是这个流程。文章先对现有基于anchor的方法在检测过程中随着物体的变小,性能下降,这里主要指小物体检测不出来进行了分析,主要有以下几点:

1.与anchor相关的那一层卷积层的卷积核步长太大,导致在卷积过程中小物体的特征被高度压缩;

2.感受野、anchor尺寸和面部大小不匹配,差距过大;

3.anchor的尺寸是固定的,而人脸尺寸不固定,一旦人脸太大或者太小,anchor就无法匹配到;

4.使用小尺寸的anchor来检测小脸会导致假阳率升高。

具体可以看下图一:

图一  a、b、c、d分别对应上面1、2、3、4

基于上述问题作者采取了三个措施:

1.尺度平衡框架;

2.anchor尺度补偿匹配方案;

3.最大输出方案。

在讲具体解决方案之前,我先来讲讲这篇文章整体的网络框架,如下图二:

S3FD整体框架

本文的骨干网络用的是VGG16,不过只是截取了Pooling5之前的层数,同时通过参数下采样将全连接层fc6和fc7转化为conv_fc6和conv_fc7(不太明白是怎么进行的),再在这后面加了4层卷积层。从中去取出6层来进行anchor 匹配,每个卷积层分别承担着不同尺度的人脸检测任务,分别预测anchor的偏移量和所属类别,这个方法用的是SSD的,faster rcnn只用一层来匹配anchor,文中说因为前三层有不同特征尺度,所以需要正则化来防止过拟合,最后的损失函数用的是fast rcnn的多任务损失函数。

好了,接下来要打入内部进行分析了

1.尺度平衡框架

将anchor有关的层的卷积步长设置为4~128像素,相比faster rcnn的16和SSD的8,S3FD的初始步长更小,同时设置anchor的尺度为16~512,每一层的anchor尺寸不同,前者是为了匹配到小脸,后者是为了有更多anchor匹配到小脸,同时卷积核步长的大小是这一层anchor的四分之一。如下图三:


图三 步长与anchor尺寸关系

2.anchor尺度补偿匹配方案

这个方法分为两个步骤,首先是按faster rcnn和SSD的方法进行匹配,只是从原来的阈值0.5换到了0.35,第二步是将没有匹配到的人脸,将匹配阈值降到0.1,筛选出前几个来。整个方案就是为了产生更多anchor,用数量来换精度。(上述都在训练时进行),采用这个方案的效果如下图四:

图四 anchor尺度补偿匹配方案效果

3.最大输出方案(Max-out)

这个方法主要是为了解决假阳率过高的问题,该方法是对背景的得分进行排序(我猜测在实际程序中,应该按面部得分来排的,面部得分越低说明背景的概率越高),然后挑出前几个背景与脸部进行训练,这个方案主要针对的是conv3_3这一层,这一层主要用来检测小脸,所以anchor的数量较多,这一层是正负样本比是3:1训练,其他层是1:1训练。过程如下图五:


图五 Max-out过程

还有忘了说就是每一层上anchor的宽高比是1:1,跟faster rcnn的多比例是不一样的。

说实话个人觉得这篇文章读起来有点费劲,估计还是这个领域的知识积累的不足造成的吧,以上如有讲的不对的地方,请大家批评指正哈!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容