用于人脸检测的SSH算法

为了方便读者获取资料以及我们公众号的作者发布一些Github工程的更新,我们成立了一个QQ群,二维码在文章末尾,感兴趣可以加入。

1. 前言

Single Stage Headless Face Detector(SSH)是ICCV 2017提出的一个人脸检测算法,它有效提高了人脸检测的效果,主要的改进点包括多尺度检测,引入更多的上下文信息,损失函数的分组传递等等,论文相对比较简单,获得的效果也还不错(从Wider Face的结果来看,和前几天介绍的在小尺寸人脸检测上发力的S3FD 差不多)。

2. 网络结构

SSH算法的网络结构如Figure2所示:

用于人脸检测的SSH算法

SSH算法是在VGG的基础上进行了改进,创新点主要有两个,即尺度不变性和引入更多的上下文信息

在Figure2中,尺度不变性是通过不同尺度的检测层来完成的,和SSD,YOLOV3等目标检测算法类似。具体来说一共有33个尺寸的检测模块(detection module),检测模块 M1,M2,M3的stride分别为8816163232,从图中也可以看出M1主要用来检测小尺寸人脸,M2主要用来检测中等尺寸人脸,M3主要用来检测大尺寸人脸。每个检测模块都包含了分类(Scores)和回归(Boxes)两个分支。检测模块M2是直接接在VGG的conv5_3层后面,而检测模块M1的输出包含了较多的特征融合和维度缩减(从512512->128128)操作,从而减少计算量。

引入更多的上下文信息 是通过在检测模块中插入上下文模块(context module)实现的,上下文模块的结构如Figure4所示,它是通过将原始的特征分别接一个3×33\times 3卷积的支路和223×33\times 3卷积的支路从而为特征图带来不同的感受野,达到丰富语义信息的目的:

用于人脸检测的SSH算法

3. 创新点详解

刚才提到,SSH算法的创新点就33个,即新的检测模块,上下文模块以及损失函数的分组传递,接下来我们就再盘点一下:

3.1 检测模块

下面的Figure3是检测模块的示意图:

用于人脸检测的SSH算法

分类和回归的特征图是融合了普通卷积层和上下文模块输出的结果。分类和回归支路输出的KK表示特征图上每个点都设置了KK个Anchor,这KK个Anchor的宽高比例都是1:11:1,论文说增加宽高比例对于人脸检测的效果没有提示还会增加Anchor的数量。

3.2 上下文模块

下面的Figure4是上下文模块的示意图:

用于人脸检测的SSH算法

作者原本是通过引入卷积核尺寸较大的卷积层例如5×55\times 57×77\times 7来增大感受野,从而引入更多的上下文信息。但为了减少计算量,作者借鉴了GoogleNet中用多个3×33\times 3卷积代替5×55\times 5卷积或者7×77\times 7卷积的做法,于是最终上下文模块的结构就如Figure4所示了,另外注意到开头的3×33\times 3卷积是共享的。

3.3 损失函数的分组传递

SSH算法还对损失函数做了一些调整,公式如下所示:

用于人脸检测的SSH算法

分类的损失函数还是采用常用的二分类损失函数,其中AkA_k表示属于检测模块MkM_k的Anchor,而回归损失部分多了一个I(gi=1)I(g_i=1),意思对于不同尺度的检测模块来说,只回传对应尺度的Anchor损失,这就实现了第二节中提到的M1主要用来检测小人脸,M2主要用来检测中等尺寸人脸,M3主要用来检测大尺寸人脸的目的。另外,在引入OHEM算法时也是针对不同尺度的检测模块分别进行的。

4. 实验结果

下面的Table1展示了不同的人脸检测算法在Wider FACE数据集上的效果对比。HR算法的输入为图像金字塔,可以看到不使用图像金字塔的SSH算法效果都超过了相同特征提取网络的HR算法。最后一行的SSH(VGG-16)+Pyramid表示的是输入为图像金字塔,可以看到准确率进一步提升了。

用于人脸检测的SSH算法

下面的Table2展示了在NVIDIA Quadro P6000 GPU上的速度测试,结果如下:

用于人脸检测的SSH算法

5. 总结

这篇文章介绍了一下用于人脸检测的SSH算法,它提出的上下文模块和损失函数的分组传递还是比较有意思的,论文的精度也说明这几个创新点是有用的。但是论文给出的实验结果比较少,所以我们无法判断每个Trick对结果的影响幅度到底多大,这是比较遗憾的。

6. 附录

  • HR算法:https://blog.csdn.net/wfei101/article/details/80932095
  • 参考:https://blog.csdn.net/u014380165/article/details/83590831
  • 论文原文:https://arxiv.org/pdf/1708.03979.pdf
  • 代码:https://github.com/mahyarnajibi/SSH

欢迎关注GiantPandaCV, 在这里你将看到独家的深度学习分享,坚持原创,每天分享我们学习到的新鲜知识。( • ̀ω•́ )✧

有对文章相关的问题,或者想要加入交流群,欢迎添加BBuf微信:

用于人脸检测的SSH算法
为了方便读者获取资料以及我们公众号的作者发布一些Github工程的更新,我们成立了一个QQ群,二维码如下,感兴趣可以加入。

用于人脸检测的SSH算法