S3FD-论文笔记

原论文:《S3FD: Single Shot Scale-invariant Face Detector
代码

这个模型采用了基于锚的检测框架(可参考 RPN 与 SSD)。
缺点:面部越小,效果越差

网络结构:Scale-Equitable Framework

  • 基于VGG16;
  • 对VGG16,保持 conv1_1到pool5不变;
  • 对VGG16的fc6与fc7,使用降采样的方式对其参数进行抽样,以将两者均转变为卷积层conv_fc6与conv_fc7;
  • 在conv_fc7后面添加新的两组卷积层conv6(conv6_1+conv6_2)与conv7(conv7_1+conv7_2);
  • 将conv3_3、conv4_3、 conv5_3、conv_fc7、 conv6_2以及conv7_2作为检测层,它们各自的锚框尺寸不相同;
  • 对conv3_3、conv4_3、 conv5_3进行L2正则化,以对它们的norm进行重新调整;
  • 对每一个检测层采用一个预测网络,这个网络是 p × 3 × 3 × q p\times 3\times 3\times q p×3×3×q 的卷积层。对每一个锚框,输出4个坐标的偏移值,以及 N s N_s Ns个对应于每个类别的分数;
  • 最后的 Loss Layer,采用多任务方案:Softmax LossSmooth L1 Loss

锚框的设计方案:

  1. 仅使用 1:1 的长宽比
  2. 特征层上某个Cell的锚框的尺寸是该特征层Stride的4倍(Equal-Proportion Interval Principle);

感受野分为两种,一种是理论感受野(Theoretical Receptive Field,TRF),一种是有效感受野(Effective Receptive Field,ERF)。
TRF是理论上应该对相应Cell起作用的区域,但实际上TRF上会有很大一部分没有效果,在TRF上可以对相应Cell起作用的那部分区域就是ERF。
所以,设计某个Cell的锚框的时候,应该使其锚框的尺寸小于其TRF的尺寸主要目的是让锚框尽量与ERF相匹配。再考虑到锚框的尺寸也应该随着特征提取层的深度而变化,低层的特征的锚框应该小,以确保面积小的人脸的检测,所以论文中将锚框的大小设置为其对应的特征层Stride的4倍。
Equal-Proportion Interval Principle 使属于不同特征层的不同尺寸的锚框具有相同的空间密度分布

尺度补偿锚框匹配策略:

  1. 将与GTBox的IoU的阈值从0.5调整为0.35,也就是增加了锚框中正样本的数量;
  2. 对于Tiny或者Outer的面部,将相应的IoU排序后,取top-N作为正样本。其中N是上一步得到的数量的平均值。

采用上面的匹配策略是因为:一个是每个人脸的匹配锚框基本在3个左右,在提升召回率方面,数量不够;另一个是匹配锚框的数量与锚框的尺寸有关,与锚框尺寸较大的面部会被忽略,导致召回率的降低。
之所以会有上面这两个问题,是因为锚框的尺寸是离散的,而人脸的尺寸是连续的。与锚框尺寸较大的面部匹配到的锚框的数量太少。

Max-out Background Label

对于conv3_3上的锚框,预测 N m N_m Nm个 Background Label 分数,只将具有最大得分的锚框用于负样本,并进行梯度回传。

目的是解决锚框正负样本极端不均衡的问题:负样本数量占了将近99.8%。而conv3_3提供的锚框的数量占所有锚框的75.02%。

损失函数

L ( { p i } , t i ) = λ N c l s ∑ i L c l s ( p i , p i ∗ ) + 1 N r e g ∑ i p i ∗ L r e g ( t i , t i ∗ ) L(\{p_i\},{t_i})=\frac{\lambda}{N_{cls}}\sum_i L_{cls}(p_i, p_i^*)+\frac{1}{N_{reg}}\sum_i p_i^*L_{reg}(t_i, t_i^*) L({ pi},ti)=NclsλiLcls(pi,pi)+Nreg1ipiLreg(ti,ti)
其中:
i i i 是锚的序号;
p i p_i pi 是预测第i个锚是面部的概率;
p i ∗ ∈ { 0 , 1 } p_i^*\in \{0,1\} pi{ 0,1},代表锚框是正的还是负的;
t i t_i ti 是参数化的具有四个坐标值的向量;
t i ∗ t_i^* ti 是与正锚框有关的 Ground-Truth 框;
L c l s L_{cls} Lcls S o f t m a x Softmax Softmax 损失函数,并且是二分类;
L r e g L_{reg} Lreg S m o o t h L 1 Smooth L1 SmoothL1 损失函数;
p i ∗ L r e g p_i^*L_{reg} piLreg 代表仅对正锚框有效。
λ = 4 \lambda=4 λ=4;
N c l s N_{cls} Ncls 是锚的数量;
N r e g N_{reg} Nreg 是正锚的数量。


参考链接


猜你喜欢

转载自blog.csdn.net/qq_29695701/article/details/102584092