人脸框检测模型SSH论文学习笔记
人脸框检测模型SSH论文学习笔记
原论文:《M Najibi, P Samangouei R Chellappa, et al. SSH: Single Stage Headless Face Detector[C]. 2017 IEEE International Conference on Computer Vision(ICCV), Venice, 2017, pp. 4885-4894.》
代码:https://github.com/mahyarnajibi/SSH
一、模型结构
骨干网络:
VGG-16
1. 结构图如下:
- 它使用了骨干网络的
Conv4_3
与Conv5_3
输出的特征图。 - 使用三个检测器模块(Detection Module) 、 以及 检测人脸框的位置。这三个模块分别负责的 人脸框尺寸为:小型、中型及大型。
- 每一个检测器模块负责两个任务:分类是否是人脸、回归人脸框。
- 这三个检测器的卷积
stride
分别为 8、16、32。 - 对于第 个检测器 ,设给它输入的特征图的宽高为 ,则它所拥有的
anchor
一共是 个;anchor
的宽高比为 ,尺寸为:。(论文中的实验表明,设置多个宽高比对检测的影响并不大) - 在最后应用的推理中,使用非极大值抑制(Non-Maximum Suppression, NMS)处理所有检测器模块的输出,以获取最终的检测结果
2. 主要结构说明:
2.1 降维(Dim Red)
使用 将 512
的通道减少到 128
。
2.2 双线性插值(Bilinear Upsampling)
通过上采样的办法,将Conv5_3
的特征图的尺寸与Conv4_3
保持一致。
2.3 按位相加(Eltwise Sum)
即将具有相同尺寸与相同通道数的两个特征图按照位级别相加。
2.4 检测器模块(Detection Module)
2.4.1 检测器模块的结构如下:
2.4.2 背景模块(Context Module)
以这种方式对背景(Context)进行建模,会成比例地增加与相应层步幅的感受野,并因此增加每个检测模块的目标数量。(原文:Modeling the context in this way increases the receptive field proportional to the stride of the corresponding layer and as a result the target scale of each detection module.)
论文想原本使用的是 与 卷积。
为了减少参数,论文使用两个 代替 卷积,用三个 代替 卷积。
二、损失函数
其中:
-
是分类的损失函数,主要作用是区分一个
anchor
是否覆盖了一个人脸; 是检测器模块的序号; 指的是第 个检测器的anchor
的集合; 表示在第 个检测器的第 个anchor
所预测的类别; 表示与 相关的Ground-Truth
正负样例标签; 是第 个检测器的anchor
的数量; -
是边界框回归损失函数,主要作用是根据
Ground-Truth
边界框调整anchor
的位置及尺寸;对于第 个anchor
, 指的是待预测的维度与尺度变换的四个值, 是相应的目标Ground-Truth
边界框;为示性函数,用来保证回归损失函数仅在有人脸的正样例上运行; 的计算公式为:
当一个
anchor
与某个Ground-Truth
边界框的 大于阈值0.5时,才被分配(assigned)给相应的Ground-Truth
边界框;(即含有人脸)
当一个anchor
与任意Ground-Truth
边界框的 均小于阈值0.3时,被分配(assigned)为负样例。
三、OHEM(Online Hard Negative and Positive Mining)
对每一个检测器,考虑到相应迭代中的网络的权重,选择具有 最大得分的负样例 与具有 最小得分的正样例 作为 mini-batch
。
保证正样例在mini-batch
中占有25%的份额。
四、训练
使用带有冲量(momentatum)与权重衰减(weight decay)的随机梯度下降法。