论文地址:https://arxiv.org/pdf/1708.05234.pdf。
一、概况
论文的主要贡献:
- 设计了Rapidly Digested Convolutional Layers, RDCL,使得人脸检测在CPU上达到实时。
- 引入了Multiple Scale Convolutional Layers,MSCL,通过丰富感受野和在不同的层离散化anchors来处理人脸的多尺度问题。
- 提出了一种新的anchor稠密化策略,来提升小人脸的召回率。
- 提升了在AFW、PASCAL face和FDDB数据集上的state-of-the-art性能。
二、RDCL
RDCL用于快速减小输入图像的尺寸。Conv1、Pool1、Conv2、Pool2的步长是4、2、2、2,因此RDCL部分总共的步长是32,也就是说输入图像经过RDCL之后会快速的缩小32倍。
小的kernel size可以加速计算,但是大的kernel size可以减少信息损失,为取得二者的平衡,Conv1、Conv2和所有Pool层的kernel size分别是7 x 7、5 x 5和3 x 3。
为减少输出通道数,使用C.ReLU**函数。
三、MSCL
MSCL由多个层组成,其中3个Inception模块,4个卷积层。这些层逐渐减小尺寸并形成多尺度特征图,最终的多尺度特征图由Inception3、Conv3_2、Conv4_2引出。
几个Inception模块可以丰富特征图的感受野。
四、Anchor densification strategy
文中anchor默认的长宽比是1:1,3个Inception层的anchor尺度分别是32,64,128,Conv3_2和Conv4_2的anchor尺度分别是256和512。
定义anchor的密度为
其中,是anchor的尺度,
是anchor的平铺间隔,文中默认是32,32,32,64和128。因此,对应的密度为1,2,4,4,4。可以看到不同尺度的anchor的密度是不平衡的,小的anchor相对于大的anchor来说就太稀疏了,这将会导致小的人脸召回率较低。
为减少这种不平衡,作者设计了一种新的anchor稠密化策略。为使某个尺度的anchor变成n倍密度,就在一个感受野的中心周围均匀地平铺个anchor。论文中将32 x 32的anchor的密度变成原来的4倍,将64 x 64的anchor密度变成原来的2倍,这样就可以和大尺度的anchor密度保持一致了。
五、训练
5.1 训练数据集
作者在WIDER FACE 12880张图片的训练集上进行训练。
5.2 数据增强
- 颜色扭曲。
- 随机裁剪:从原图像上随机裁剪5个方形patches,其中一个是尺寸最大的patch,其他的在[0.3,1]的区间随机选择一个数乘以原图的短边。然后随机选择一个patch进行下面的操作。
- 将上一步选中的patchresize到1024 x 1024。
- 以0.5的概率水平翻转patch。
- 如果人脸box的中心位于上面处理patch中,保留box的重叠部分,然后过滤掉这些高度或宽度小于20像素的box。
5.3 匹配策略
首先将每个人脸和anchor使用最佳的jaccard overlap策略配对,然后保留anchor与任意人脸的jaccard overlap大于阈值(例如0.35)的保留下来。
5.4 损失函数
同Faster R-CNN。二分类softmax分类损失和smooth L1回归损失。
5.5 难例负样本挖掘
大量的负样本导致正负样本数量不平衡,将它们以loss进行排序,只选择前面的数个样本,保证正负样本的比例为1:3。
5.6 其他实施细节
所有参数使用“xavier”方法进行初始化。优化器是SGD,momentum 0.9,weight decay 0.0005,batch size 32.训练迭代120k次,前80k次迭代的学习率是,80k-100k的学习率是
,最后20k的学习率是
。
六、实验