人脸框检测模型PyramidBox论文学习笔记
原论文:《Xu Tang, Daniel K. Du, Zeqiang He, Jingtuo Liu. PyramidBox: A Context-assisted Single Shot Face Detector[C]. The European Conference on Computer Vision (ECCV), 2018, pp. 797-813.》
代码:https://github.com/PaddlePaddle/models/tree/develop/PaddleCV/face_detection
特点:
- 提出了一种基于 anchor 的环境辅助方法,即 PyramidAnchors,从而引入有监督的信息来为较小的、模糊的和部分遮挡的人脸学习环境特征。
- 设计了 LFPN 来更好地融合环境特征和面部特征。同时,该方法可以在单步中较好地处理不同尺度的人脸。
- 提出了一种Context-Sensitive的预测模型,该模型由混合网络结构和
max-in-out
层组成,从融合的特征中学习准确的定位和分类。 - 提出了一种关注尺度的
data-anchor sampling
策略,改变训练样本的分布,重点关注较小的人脸。
一、模型结构
骨干网络:基于
VGG-16
的 S 3 F D S^3FD S3FD 模型
1. 结构图如下:
- 它使用了骨干网络中
Conv3_3
、Conv4_3
、Conv5_3
、Conv_fc7
、Conv6_2
以及Conv7_2
输出的特征图。
2. 主要结构说明:
2.1 低层级特征金字塔层(Low-level Feature Pyramid Layers)
作用:将高层特征图中蕴含的人脸上下文信息融合到低层特征图中。
结构:其主要由低层级特征金字塔网络(Low-level Feature Pyramid Network, LFPN)构成。
基本结构如下图所示。这个图是从 Conv_fc7
开始的,另两个从 Conv4_3
与 Conv5_3
开始融合的结构图与此相似。
2.2 金字塔检测层(Pyramid Detection Layers)
- 选用的特征层为:
lfpn_2
、lfpn_1
、lfpn_0
、conv_fc7
、conv6_2
以及conv7_2
。 - 这些特征层使用的
anchor
尺寸为:16、32、64、128、256以及512。
- 其中,
lfpn_2
、lfpn_1
以及lfpn_0
是分别基于Conv3_3
、Conv4_3
以及Conv5_3
的LFPN
层的输出。- 使用 L 2 L_2 L2 对
LFPN
层进行正则处理。
2.3 预测层(Predict Layers)
- 主要由 对上下文信息敏感的预测模块 (Context-sensitive Predict Module, CPM)构成。
- CPM的结构:用 DSSD模型的无残差预测模块 (Residual-free Prediction Module)替换了 SSH模型的上下文模块 (Context Module)。
- 每个检测模块后面都连接一个 CPM,所以一共有 6 个 CPM。
- 第 l l l 个 CPM 的输出的尺寸为: w l × h l × c l w_l \times h_l \times c_l wl×hl×cl。(其中 w l = h l = 640 / 2 2 + l w_l = h_l = 640/2^{2+l} wl=hl=640/22+l; c l = 20 c_l=20 cl=20; l ∈ { 0 , 1 , 2 , 3 , 4 , 5 } l \in \{0,1,2,3,4,5\} l∈{ 0,1,2,3,4,5})。
基本结构如下图所示:
其中,每个通道的特征负责预测面部、头部与身体各自的分类与边界框回归。
- 面部的分类需要 4( = c p l + c n l = cp_l + cn_l =cpl+cnl)个通道,边界框回归需要 4个通道;
- 头部的分类需要 2个通道,边界框回归需要 4个通道;
- 身体的分类需要 2个通道,边界框回归需要 4个通道;
- 所以一共有 20个通道: ( 4 + 4 ) + ( 2 + 4 ) + ( 2 + 4 ) = 20 (4+4)+(2+4)+(2+4)=20 (4+4)+(2+4)+(2+4)=20
c p l cp_l cpl 与 c n l cn_l cnl 是前景与背景的
max-in-out
,并满足:
c p l = { 1 , i f l = 0 , 3 , o t h e r w i s e . cp_l = \left\{ \begin{aligned} 1&,\ \ \ \ if\ \ l=0, \\ 3&,\ \ \ \ otherwise. \end{aligned} \right. cpl={ 13, if l=0,, otherwise.
2.3.1 max-in-out算法
作用:减少小的负样本的
FP
值(False Positive Rate)。
应用的位置如下图所示:
每个预测模块预测出一共 c p + c n c_p + c_n cp+cn 个得分,然后:
- 选择 c p c_p cp 中最大的得分,作为正样本得分;
- 选择 c n c_n cn 中最大的得分,作为负样本得分。
在第一个预测模块中,设置: c p = 1 , c n = 3 c_p=1,\ c_n=3 cp=1, cn=3;(因为小
anchor
的背景更复杂,负样本就会更多)
其他几个预测模块中,设置: c p = 3 , c n = 1 c_p=3,\ c_n=1 cp=3, cn=1。(这是为了召回更多的面部)
2.4 PyramidBox损失层(PyramidBox loss layers)
- 对于每个目标面部,都有一系列
pyramid anchor
来同时监督分类和回归的任务。 - 这一层主要由 PyramidAnchors算法模块 构成。它会生成一些
anchor
,这些anchor
与某个面部所处的更大的区域相对应,而这些区域包含了面部丰富的上下文信息,如头部、肩膀以及躯体。
在原始图片上,对于一个位于 r e g i o n t a r g e t region_{target} regiontarget 的面部来说,考虑一个步幅为 s i s_i si,位于第 i i i 个特征层上的第 j j j 个 anchor
: a n c h o r i , j anchor_{i,j} anchori,j,定义第 k k k 个 pyramid-anchor 的标签为:
l a b e l k ( a n c h o r i , j ) = { 1 , i f I o U ( a n c h o r i , j ⋅ s i / 2 k , r e g i o n t a r g e t ) > 0.35 , 0 , o t h e r w i s e . label_{k}(anchor_{i,j}) = \left\{ \begin{aligned} 1&,\ \ \ \ if\ \ IoU(anchor_{i,j} \cdot s_i / 2^k, region_{target})>0.35, \\ 0&,\ \ \ \ otherwise. \end{aligned} \right. labelk(anchori,j)={
10, if IoU(anchori,j⋅si/2k,regiontarget)>0.35,, otherwise.
其中:
k ∈ { 0 , 1 , 2 } k \in \{0,1,2\} k∈{ 0,1,2},对应的 l a b e l 0 label_0 label0、 l a b e l 1 label_1 label1 与 l a b e l 2 label_2 label2 分别为:面部、头部、身体;
a n c h o r i , j ⋅ s i anchor_{i,j} \cdot s_i anchori,j⋅si 为 a n c h o r i , j anchor_{i,j} anchori,j 在原始图片上的相应的区域;
a n c h o r i , j ⋅ s i / 2 k anchor_{i,j} \cdot s_i / 2^k anchori,j⋅si/2k 为相应的以 2 k 2^k 2k 为步幅的下采样区域。
2.4.1 基于anchor的数据采样方法(Data-anchor Sampling):
举例说明:(输入的图尺寸为: 640 × 640 640 \times 640 640×640)
- 对于一个尺寸为140的面部,在 { 2 4 + i ∣ i = 0 , 1 , . . . , 5 } \{2^{4+i}|i=0,1,...,5\} {
24+i∣i=0,1,...,5} 中距离其最近的
anchor
尺寸为128(此时 i a n c h o r = 3 i_{anchor}=3 ianchor=3), - 然后在 { 0 , 1 , . . . , m i n ( 5 , i a n c h o r + 1 ) } \{ {0,1,...,min(5,i_{anchor}+1)}\} { 0,1,...,min(5,ianchor+1)} (即在 { 0 , 1 , . . . , 4 ) } \{ {0,1,...,4)}\} { 0,1,...,4)})中随机地选择一个序号以得到目标尺寸,如32。
- 以 32 / 140 = 0.2285 32/140=0.2285 32/140=0.2285 的比例重新调整原始图片的比例。
- 从最后调整的图中,裁取一个 640 × 640 640\times640 640×640的图像,该图像包含了那个被选中的图片。
- 最终得到了采样的训练数据
2.4.2 损失函数
L ( { p k , i } , { t k , i } ) = ∑ k λ k L k ( { p k , i } , { t k , i } ) L(\{p_{k,i}\},\{t_{k,i}\})=\sum_k \lambda_k L_k(\{p_{k,i}\},\{t_{k,i}\}) L({
pk,i},{
tk,i})=k∑λkLk({
pk,i},{
tk,i})
L k ( { p k , i } , { t k , i } ) = λ N k , c l s ∑ i k L k , c l s ( p k , i , p k , i ∗ ) + 1 N k , r e g ∑ i k p k , i ∗ L k , r e g ( t k , i , t k , i ∗ ) \begin{aligned} L_k(\{p_{k,i}\},\{t_{k,i}\}) &= \frac{\lambda}{N_{k,cls}} \sum_{i_k} L_{k,cls}(p_{k,i},p_{k,i}^*) \\ &+ \frac{1}{N_{k,reg}} \sum_{i_k} p_{k,i}^* L_{k,reg}(t_{k,i},t_{k,i}^*)\end{aligned} Lk({
pk,i},{
tk,i})=Nk,clsλik∑Lk,cls(pk,i,pk,i∗)+Nk,reg1ik∑pk,i∗Lk,reg(tk,i,tk,i∗)
其中, k k k 与面部、头部、身体相对应; i i i 与anchor
相对应; L k , c l s L_{k,cls} Lk,cls 是在两个类别上的对数损失函数; L k , r e g L_{k,reg} Lk,reg是 s m o o t h L 1 smooth\ L_1 smooth L1 损失函数; t k , i t_{k,i} tk,i 与 t k , i ∗ t_{k,i}^* tk,i∗ 是与边界框回归有关的坐标向量,前者是预测值,后者是Ground-Truth的边界框; p k , i p_{k,i} pk,i 是第 i i i 个anchor
为第 k k k 个目标的概率值;Ground-Truth的标签 p k , i ∗ p_{k,i}^* pk,i∗ 定义为:
p k , i ∗ = { 1 , 如 果 以 步 幅 2 k 下 采 样 得 到 的 a n c h o r 是 正 样 例 , 0 , 其 他 情 况 . p_{k,i}^* = \left\{ \begin{aligned} 1&,\ \ \ \ 如果以步幅\ 2^k\ 下采样得到的anchor是正样例, \\ 0&,\ \ \ \ 其他情况. \end{aligned} \right. pk,i∗={
10, 如果以步幅 2k 下采样得到的anchor是正样例,, 其他情况.
t k , i ∗ t_{k,i}^* tk,i∗的定义如下:
t k , i ∗ = ( t x ∗ + 1 − 2 k 2 t w ∗ s w , k + Δ x , k , t y ∗ + 1 − 2 k 2 t h ∗ s h , k + Δ y , k , 2 k t w ∗ s w , k − 2 Δ x , k , 2 k t h ∗ s h , k − 2 Δ y , k ) \begin{aligned} t_{k,i}^*=(&t_x^* + \frac{1-2^k}{2}t_w^*s_{w,k}+\Delta_{x,k},\\ &t_y^* + \frac{1-2^k}{2}t_h^*s_{h,k}+\Delta_{y,k},\\ &2^kt_w^*s_{w,k}-2\Delta_{x,k},\\ &2^kt_h^*s_{h,k}-2\Delta_{y,k})\\ \end{aligned} tk,i∗=(tx∗+21−2ktw∗sw,k+Δx,k,ty∗+21−2kth∗sh,k+Δy,k,2ktw∗sw,k−2Δx,k,2kth∗sh,k−2Δy,k)
当 k < 2 k<2 k<2 时, Δ x , k = Δ y , k = 0 , s w , k = s h , k = 1 \Delta_{x,k}=\Delta_{y,k}=0,s_{w,k}=s_{h,k}=1 Δx,k=Δy,k=0,sw,k=sh,k=1;
当 k = 2 k=2 k=2 时, Δ x , k = 0 , Δ y , k = t h ∗ , s w , k = 7 8 , s h , k = 1 \Delta_{x,k}=0,\Delta_{y,k}=t_h^*,s_{w,k}=\frac{7}{8},s_{h,k}=1 Δx,k=0,Δy,k=th∗,sw,k=87,sh,k=1;
四、训练
使用带有冲量(momentatum) 0.9 与权重衰减(weight decay) 0.0005 的随机梯度下降法。
- 数据集:WIDER FACE
- batch size:16
- 前期迭代八万次的学习率:0.001;
- 中期迭代两万次的学习率:0.0001;
- 后期迭代两万次的学习率:0.00001;
参考材料