论文:S3FD: Single Shot Scale-invariant Face Detector
论文链接:https://arxiv.org/abs/1708.05237
代码链接:https://github.com/sfzhang15/SFD
人脸检测领域目前主要的难点是小尺寸人脸、模糊人脸、遮挡人脸的检测,这篇ICCV2017关于人脸检测的文章正是为了解决小尺寸人脸难以检测的问题。这篇文章的出发点是:当人脸尺寸比较小时,基于anchor的人脸检测算法效果下降明显,因此提出了不受人脸尺度变化影响的S3FD算法。该算法整体上可以看做是基于SSD算法的改进,主要内容包括:1、改进检测网络和设置更加合理的anchor,改进检测网络主要是增加stride=4的预测层,anchor尺寸的设置参考有效感受野,另外不同预测层的anchor间隔采用等比例设置。2、引入尺度补偿的anchor匹配策略增加正样本anchor的数量,从而提高人脸的召回。3、引入max-out background label降低误检。
既然都知道小尺寸人脸不好检测,那么原因到底是什么呢?Figure1给出了作者对基于anchor的人脸检测算法在小人脸检测中效果下降明显的原因分析。
(a)中展示的是网络结构本身的设计问题。我们知道在SSD算法中有多个特征层用于检测目标,这些特征层中stride最小的是8,这样原图中8*8大小的区域在该预测层中就仅有1个像素点,这对于小人脸的检测是非常不利的,因为有效的特征太少了。同样,在Faster RCNN算法中,用于检测目标的特征层的stride是16,用于小人脸检测的有效特征区域更小了。
(b)中展示的是anchor尺寸、感受野和人脸尺寸不匹配的问题。从图中可以看出anchor尺寸和感受野大小不是很匹配,同时这两个都远大于小人脸。
(c)中因为一般设置的anchor尺寸都是离散的,比如[16,32,64,128,256,512],但是人脸的尺寸是连续的,因此当人脸尺寸在设定的anchor值之间时能够用于检测的anchor数量就很少,如图中红色圆圈表示,这样就容易导致人脸检测的召回率降低。
(d)为了提高小人脸的检测召回,很多检测算法都会通过设置较多的小尺寸anchor实现,这样容易导致较多的小尺寸负样本anchor,最终导致误检率的上升。例如(d)中两张图的分辨率一样,左边图中人脸区域较小,