《FaceBoxes: A CPU Real-time Face Detector with High Accuracy》
论文地址:https://arxiv.org/abs/1708.05234
caffe 框架实现:https://github.com/lippman1125/faceboxes_lqy
prtorch 框架实现:https://github.com/zisianw/FaceBoxes.PyTorch
https://github.com/XiaXuehai/faceboxes
1、主要创新点
文中的主要要点是提出了 RDCL (Rapidly Digestes Convolutional Layers) 以及 MSCL(Multiple Scale Convolutional Layers),还有 anchor 致密化(Anchor densification strategy)。
- RDCL 通过快速降输入图片的分辨率,实现在 CPU 上的实时速度。
- MSCL 通过利用来自不同层的 anchor 来增加感受视野,解决不同尺寸的人脸问题。
- anchor 致密化则是来增加小脸的召回率。
2、整体网络结构
总体的流程图如下所示:
本质上并不复杂,熟悉fasterRcnn,或者熟悉rpn就可以很快搞清楚。
faceBox相当于在fasterRcnn的基础只保留了rpn结果,去掉了roi pooling,并且采用fpn,已经对anchor进行了改进,还有一点主干网络(不算什么亮点了)。
3、创新点解析
3.1、 RDCL (Rapidly Digestes Convolutional Layers)
在 CPU 上,当卷积层的输入,输出,卷积核尺寸都很大时,是很耗时的,所以这里本文的 RDCL 就是将输出的图片尺寸通过合适的卷积核尺寸快速收缩,以达到在 CPU 实时的速度。
主要设计思路如下:
- 如上图1,通过
7x7-s-4(Conv1),3x3-s-2(Pool1),5x5-s-2(Conv2),3x3-s-2(Pool2)四层,快速将分辨率降到了原来的 1/32。 - 这里对前面 RDCL 部分卷积核尺寸的选择,首先应该尽可能的小来减少计算量,但是应为输入图片的尺寸会快速下降,卷积核又应该足够大学习足够的特征来减轻因为分辨率快速下降带来的影响,所以综合考虑,本文使用了 Conv1,Conv2 卷积核依次是 7x7,5x5, Pool 尺寸是 3x3 。
- 降低输出通道数。 这里文中用了 C.ReLU **函数来降低图片的输出通道。这里我的理解是如果是想最后输出 256 个通道, 使用 C.ReLU 的特性,卷积层的输出为 128个通道,经过 C.ReLU 以后输出的通道会自动翻倍,达到 256 个通道的输出效果,但是参数远比直接输出 256 个通道,或者通过额外的 1x1卷积层将 128 改变为 256 的少。
C.ReLU 结构如下:
3.2、MSCL(Multiple Scale Convolutional Layers)
主要是对 RPN 网络的思考与改进。
首先 RPN 网络只采用了整个特征提取器的最后一层输出,这样对于不同尺寸的人脸特征是不够的,第二点就是用一系列的 anchor 一般都是去检测单一尺寸的人脸,对多尺寸的人脸就不使用了,因此文中做了下面两部分改进:
- 如图1,类似于 SSD 的思想,检测人脸使用了来自多层的特征,
Inception3,Conv3_2,Conv4_2,这样不同分辨率的 anchor 就可以处理不同尺寸的人脸了。 - 网络结构中使用了 Inception 模块来增加网络的宽度,即同一层使用不同分辨率的卷积核,增加网络学习的感受野,也是为了更有效的学习同一张图片中不同尺寸的人脸。
Inception 模块如下图所示:
3.3、anchor 致密化(Anchor densification strategy)
anchor 致密化如下如所示:
Inception3 中使用的 anchor 尺寸是 32,64,128。
Conv3_2,Conv4_2 则分别是 256,512。
在网络学习过程中,32,64,这类的小尺寸 anchor 相较于较大的 128,256,512 更少,这样就会造成在小脸上的低召回率。为了消除这一现象,本文提出了 anchor 致密化的方法,围绕着每一个 anchor 的中心,将 32 的扩展成原来的 4 倍,64 的扩展为原先的 2 倍。
4、Experiment
主要是对不同方法在 CPU 上的运行速度做了对比,并且对文中的 3 大特点做了对比实验:
RDCL 主要就是将 C.ReLU 换成 ReLU;
MSCL 主要是将 Inception 转成传统的 3x3 卷积层;
anchor 致密 主要是用不用这个方法做了对比,可以看到致密性可以提高 1.1% 的性能。
Inception 也是增加了 1% 左右的 mAP。
RDCL 则更有效,虽然对网络性能降低了2%,但大大增加了网络的速度。
5、效果图
6、参考来源
https://zhuanlan.zhihu.com/p/58705459
https://blog.csdn.net/u014365862/article/details/84866191