这篇文章的思路很清晰,提出问题到解决问题,不过大部分文章都是这个流程。文章先对现有基于anchor的方法在检测过程中随着物体的变小,性能下降,这里主要指小物体检测不出来进行了分析,主要有以下几点:
1.与anchor相关的那一层卷积层的卷积核步长太大,导致在卷积过程中小物体的特征被高度压缩;
2.感受野、anchor尺寸和面部大小不匹配,差距过大;
3.anchor的尺寸是固定的,而人脸尺寸不固定,一旦人脸太大或者太小,anchor就无法匹配到;
4.使用小尺寸的anchor来检测小脸会导致假阳率升高。
具体可以看下图一:
基于上述问题作者采取了三个措施:
1.尺度平衡框架;
2.anchor尺度补偿匹配方案;
3.最大输出方案。
在讲具体解决方案之前,我先来讲讲这篇文章整体的网络框架,如下图二:
本文的骨干网络用的是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的四分之一。如下图三:
2.anchor尺度补偿匹配方案
这个方法分为两个步骤,首先是按faster rcnn和SSD的方法进行匹配,只是从原来的阈值0.5换到了0.35,第二步是将没有匹配到的人脸,将匹配阈值降到0.1,筛选出前几个来。整个方案就是为了产生更多anchor,用数量来换精度。(上述都在训练时进行),采用这个方案的效果如下图四:
3.最大输出方案(Max-out)
这个方法主要是为了解决假阳率过高的问题,该方法是对背景的得分进行排序(我猜测在实际程序中,应该按面部得分来排的,面部得分越低说明背景的概率越高),然后挑出前几个背景与脸部进行训练,这个方案主要针对的是conv3_3这一层,这一层主要用来检测小脸,所以anchor的数量较多,这一层是正负样本比是3:1训练,其他层是1:1训练。过程如下图五:
还有忘了说就是每一层上anchor的宽高比是1:1,跟faster rcnn的多比例是不一样的。
说实话个人觉得这篇文章读起来有点费劲,估计还是这个领域的知识积累的不足造成的吧,以上如有讲的不对的地方,请大家批评指正哈!