用于人脸检测的SSH算法
为了方便读者获取资料以及我们公众号的作者发布一些 GitHub 工程的更新,我们成立了一个 QQ 群,二维码在文章末尾,感兴趣可以加入。
1. 前言
Single Stage Headless Face Detector(SSH)是 ICCV 2017 提出的一个人脸检测算法,它有效提高了人脸检测的效果,主要的改进点包括多尺度检测,引入更多的上下文信息,损失函数的分组传递等等,论文相对比较简单,获得的效果也还不错(从 Wider Face 的结果来看,和前几天介绍的在小尺寸人脸检测上发力的S3FD 差不多)。
2. 网络结构
SSH 算法的网络结构如 Figure2 所示:
SSH 算法是在 VGG 的基础上进行了改进,创新点主要有两个,即尺度不变性和引入更多的上下文信息。
在 Figure2 中,尺度不变性是通过不同尺度的检测层来完成的,和 SSD,YOLOV3 等目标检测算法类似。具体来说一共有3个尺寸的检测模块(detection module),检测模块 M1,M2,M3 的stride
分别为8,16,32,从图中也可以看出 M1 主要用来检测小尺寸人脸,M2 主要用来检测中等尺寸人脸,M3 主要用来检测大尺寸人脸。每个检测模块都包含了分类(Scores)和回归(Boxes)两个分支。检测模块 M2 是直接接在 VGG 的conv5_3
层后面,而检测模块 M1 的输出包含了较多的特征融合和维度缩减(从512->128)操作,从而减少计算量。
而引入更多的上下文信息 是通过在检测模块中插入上下文模块(context module)实现的,上下文模块的结构如 Figure4 所示,它是通过将原始的特征分别接一个3\times 3卷积的支路和2个3\times 3卷积的支路从而为特征图带来不同的感受野,达到丰富语义信息的目的:
3. 创新点详解
刚才提到,SSH 算法的创新点就3个,即新的检测模块,上下文模块以及损失函数的分组传递,接下来我们就再盘点一下:
3.1 检测模块
下面的 Figure3 是检测模块的示意图:
分类和回归的特征图是融合了普通卷积层和上下文模块输出的结果。分类和回归支路输出的K表示特征图上每个点都设置了K个 Anchor,这K个 Anchor 的宽高比例都是1:1,论文说增加宽高比例对于人脸检测的效果没有提示还会增加 Anchor 的数量。
3.2 上下文模块
下面的 Figure4 是上下文模块的示意图:
作者原本是通过引入卷积核尺寸较大的卷积层例如5\times 5和7\times 7来增大感受野,从而引入更多的上下文信息。但为了减少计算量,作者借鉴了 GoogleNet 中用多个3\times 3卷积代替5\times 5卷积或者7\times 7卷积的做法,于是最终上下文模块的结构就如 Figure4 所示了,另外注意到开头的3\times 3卷积是共享的。
3.3 损失函数的分组传递
SSH 算法还对损失函数做了一些调整,公式如下所示:
分类的损失函数还是采用常用的二分类损失函数,其中A_k表示属于检测模块M_k的 Anchor,而回归损失部分多了一个I(g_i=1),意思对于不同尺度的检测模块来说,只回传对应尺度的 Anchor 损失,这就实现了第二节中提到的 M1 主要用来检测小人脸,M2 主要用来检测中等尺寸人脸,M3 主要用来检测大尺寸人脸的目的。另外,在引入 OHEM 算法时也是针对不同尺度的检测模块分别进行的。
4. 实验结果
下面的 Table1 展示了不同的人脸检测算法在 Wider FACE 数据集上的效果对比。HR 算法的输入为图像金字塔,可以看到不使用图像金字塔的 SSH 算法效果都超过了相同特征提取网络的 HR 算法。最后一行的 SSH(VGG-16)+Pyramid 表示的是输入为图像金字塔,可以看到准确率进一步提升了。
下面的 Table2 展示了在 NVIDIA Quadro P6000 GPU 上的速度测试,结果如下:
5. 总结
这篇文章介绍了一下用于人脸检测的 SSH 算法,它提出的上下文模块和损失函数的分组传递还是比较有意思的,论文的精度也说明这几个创新点是有用的。但是论文给出的实验结果比较少,所以我们无法判断每个 Trick 对结果的影响幅度到底多大,这是比较遗憾的。
6. 附录
- HR 算法://blog.csdn.net/wfei101/article/details/80932095
- 参考://blog.csdn.net/u014380165/article/details/83590831
- 论文原文://arxiv.org/pdf/1708.03979.pdf
- 代码://github.com/mahyarnajibi/SSH
欢迎关注 GiantPandaCV, 在这里你将看到独家的深度学习分享,坚持原创,每天分享我们学习到的新鲜知识。( • ̀ ω•́ )✧
有对文章相关的问题,或者想要加入交流群,欢迎添加 BBuf 微信:
为了方便读者获取资料以及我们公众号的作者发布一些 GitHub 工程的更新,我们成立了一个 QQ 群,二维码如下,感兴趣可以加入。