原文:Xu Tang 等. 2018.
人脸检测研究了很多年,剩下的挑战是之一是在不受控制的环境下检测小的,模糊的和部分遮挡的面部。本文提出了一种新的环境辅助的单步人脸检测器,称为 PyramidBox,来解决这个问题。注意到环境的重要性,我们从三个方面提高对环境信息的利用。第一,我们设计了新的环境 anchor 来监督用半监督方法学习到的高层级的环境特征,称为 PyramidAnchors。第二,我们提出低层级特征金字塔网络来充分结合高层级环境语义特征和低层级面部特征,也让 PyramidBox 能够用单步预测所有尺度的面部。第三,我们阐述了一个环境敏感的结构来提升预测网络的能力和最终输出的准确度。除此之外,我们用 data-anchor-sampling 的方法来增加不同尺度的训练样本,提高了训练数据的多样性,包含小尺寸的人脸。通过利用环境信息,PyramidBox 在 FDDB 和 WIDER FACE 这两个常用的人脸检测基准上相比 state-of-the-art 表现优异。
在各种人脸应用中,人脸检测是基本的和必需的任务。Viola 和 Jones 开创性地利用 AdaBoost 算法和哈尔特征训练了一个级联的有无人脸分类器。在那之后,许多后续的工作被提出来提升这个级联检测器的表现。然后,DPM 被用于人脸检测任务,通过建立可变形的面部部分的联系。这两类方法主要基于手工设计的特征,表示能力差并且需要分步训练。
随着 CNN 的突破性进展,近年来人脸检测取得了许多进展。现代的基于 CNN 的目标检测包括 R-CNN,SSD,YOLO,FocalLoss 和许多它们的扩展版本。受益于深度学习的强大和端到端的优势,基于 CNN 的人脸检测已经取得了好得多的效果,并且为后续的发展提供了基准。
基于 anchor 的检测框架致力于在不受控制的环境里检测有难度的面部,比如 WIDER FACE。SSH 和 S 3 F D S^3FD S3FD 开发了尺度不变网络在单个网络的不同层中检测不同尺度的面部。 Face R-FCN 对分数映射上的特征响应重新加权,并且通过位置敏感的平均池化消除了每个面部区域中的不均匀分布的影响。FAN 提出了一个 anchor 级的关注机制,通过高亮面部区域的特征来检测被遮挡的面部。
这些工作给出了设计 anchor 和相关网络来检测不同尺度人脸的有效方式,但是没有重点关注环境信息。然而环境信息在检测难度大的人脸时非常重要。实际上在现实世界中,人脸从不单独出现,而是一般和肩膀或者身体一起,提供了丰富的可利用的环境关联,尤其是面部纹理由于低分辨率,模糊或者遮挡不能被辨别时。我们提出了一个新的环境辅助的网络框架,充分利用了环境信号,步骤如下:
第一,网络不仅能学习面部特征,还能学习环境特征例如头部和身体。实现这个目标需要额外的标签,需要设计和这些部分匹配的 anchor。本文用半监督的方案来生成环境部分的近似的标签,构造一系列叫做 PyramidAnchors 的 anchors。PyramidAnchors 可以很容易地添加到一般的基于 anchor 的结构中。
第二,高层次的环境特征应该和低层级的充分结合。检测难度高和低的面部的外观非常不同,意味着不是所有高层级的语义特征都对检测小目标有利。我们研究特征金字塔网络 (FPN) 的性能,并把它改成了低层级的特征金字塔网络 (LFPN),以结合相互有帮助的特征。
第三,预测分支网络应该充分利用结合了的特征。我们采用环境敏感预测模块 (CPM) 用一个广而深的网络来吸收目标人脸周围的环境信息。同时,我们为预测模块引入了一个 max-in-out 层进一步提高分类网络的能力。
此外,我们提出了一种训练策略,叫做 data-anchor-sampling,来调整训练集的分布。为了学习更有代表性的特征,困难样本的多样性非常重要,可以通过交叉样本的数据增强实现。
为了更清晰地表述,将本研究的主要贡献总结为以下五点:
本文的后续章节内容如下:第 2 章概述相关工作。第 3 章介绍提出的方法。第 4 章展示实验。第 5 章总结。
基于 Anchor 的人脸检测器
Anchor 在 Faster R-CNN 中首次被提出,然后别广泛用于两阶段和单步的目标检测。基于 anchor 的目标检测在近年来取得了很大进展。与 FPN 类似,Lin 使用了 translation-invariant anchor boxes,Zhang设计了 anchors 的不同尺度使检测器能够应对不同尺度的人脸。FaceBoxes 采用 anchor densification 使得不同类型的 anchor 在图像上有相同的密度。 S 3 F D S^3FD S3FD 提出 anchor 匹配策略提高较小的人脸的召回率。
尺度不变的人脸检测器
为了提高检测器检测不同尺度人脸的能力,许多最先进的研究在相同的框架里构建不同的结构来检测不同大小的人脸,设计高层级的特征检测较大的人脸,低层级的特征检测较小的人脸。为了将高层级语义特征整合到有更高分辨率的低等级的层中,FPN 提出了一种自上而下的结构,利用了所有尺度的高层级语义特征。最近,FPN 类型的框架在目标检测和人脸检测上表现出色。
环境辅助的人脸检测器
最近,环境信息的重要性在一些研究中表现出来,尤其在检测较小的,模糊的和被遮挡的人脸时。CMS-RCNN 使用 Faster R-CNN 在人脸检测任务中结合身体环境信息。Hu 等人针对不同的尺度单独训练了检测器。SSH 在每个预测模块上用大过滤器获取环境信息。FAN 提出了一个 anchor 级的关注机制,通过高亮面部区域的特征来检测被遮挡的人脸。
本章介绍了环境辅助的单步检测器,PyramidBox。3.1 节中简要介绍了网络结构。3.2 节中展示了一个环境辅助的预测模块。3.3 节提出了一个新的anchor方法,称为 PyramidAnchors。3.4 节展示了联合的训练方法包括 data-anchor-sampling 和 max-in-out。(笔者注:max-in-out 实际并不在 3.4 节中,而在 3.2 节中。)
基于 anchor 的拥有复杂 anchor 设计的目标检测框架已被证明在不同层级的特征图上执行预测时,可以有效地处理可变尺度的人脸。同时,FPN 结构在融合高层级和低层级特征时表现出很大的优势。PyramidBox 的结构 (图 1) 使用了与 S 3 F D S^3FD S3FD 相同的扩展 VGG16 主干架构和 anchor 尺度设计,可以生成不同层级的特征图和等比例间距的 anchor。低层级特征金字塔网络 (FPN) 被添加到这个主干架构上,并且用一个环境敏感的预测模块 (CPM) 接受每个检测层的输出,来获得最终的输出。本结构的关键在于我们设计了一种新型的金字塔式的 anchor 方法,它可以在不同层级为每一张人脸生成一系列的 anchor。架构中每个组件的细节如下:
图 1:PyramidBox 架构。它包含尺度合理的主干网络层、低层级特征金字塔网络层 (LFPN)、环境敏感的预测网络层和 PyramidBox 损失层。
尺度合理的主干网络层
我们使用了与 S 3 F D S^3FD S3FD 完全相同的主干网络,包括基础卷积层和额外卷积层。其中基础卷积层即为 VGG16 中的 conv1_1 层到 pool5 层,额外卷积层将 VGG16 中的 fc6 层和 fc7 层转换为 conv_fc 层,又添加了更多的卷积层使网络变得更深。
低层级特征金字塔网络层
为了提高人脸检测器处理不同尺度的人脸的能力,高分辨率的低层级特征扮演着关键角色。因此,很多当前最佳的研究在相同的框架内构建了不同的结构来检测不同尺寸的人脸,其中高层级特征被用于检测尺寸较大的人脸,而低层级特征被用于检测尺寸较小的人脸。为了将高层级特征整合到高分辨率的低层级上,FPN 提出了一种自顶向下的架构来利用所有尺度的高层级语义特征图。最近 FPN 类型的框架在目标检测和人脸检测上都有不错的表现。
众所周知,所有这些研究都是从顶层开始建立 FPN,然而不是所有的高层级特征都一定对检测较小的人脸有帮助。首先,较小的,模糊的,被遮挡的人脸与较大的,清晰的,完整的人脸有不同的纹理特征。所以,直接用高层级特征来提升检测器在较小人脸上的表现是过于简单粗暴的。第二,高层级特征是从缺少环境的区域中提取出来的,并且可能引入噪声信息。比如,在 PyramidBox 的主干层里,层级最高的两层 conv7_2 和 conv6_2 的感受野分别是 724 和 468,而训练图像的输入尺寸是 640。这意味着上面两层只包含大尺度的人脸而且缺少环境特征,所以可能对检测中等和小尺寸的人脸没什么帮助。
我们建立的低层级特征金字塔网络 (LFPN) 提供了另外一个选择。LFPN 是从中间层而不是顶层开始的自上而下的结构,这个中间层的感受野接近输入尺寸的一半。此外,每个 LFPN 块的结构和 FPN 一样,更多细节可见图 2(a)。
图 2:(a) 特征金字塔网络 (b) 环境敏感的预测模块 © PyramidBox 损失。
金字塔检测层
我们选择 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 是 LFPN 的输出层,分别对应 conv3_3,conv4_3 和 conv5_3。此外,与其他 SSD 类型的方法类似,我们对 LFPN 层使用 L2 归一化。
预测层
每个检测层后面都有一个环境敏感的预测模块 (CPM),详见 3.2 节。注意 CPM 的输出被用于监督pyramid anchors,详见 3.3 节,在我们的实验中 anchor 近似覆盖脸,头和身体区域。第 l l l 个 CPM 的输出尺寸是 w l × h l × c l , ( l = 0 , 1 , . . . , 5 ) w_l \times h_l \times c_l, (l = 0, 1, ..., 5) wl×hl×cl,(l=0,1,...,5),其中 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。这里每个通道的特征分别被用来分类和回归面部,头部和身体。人脸的分类需要 4 ( = c p l + c n l ) ( = cp_l + cn_l) (=cpl+cnl) 个通道,其中 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 = \begin{cases} 1, &if \ l = 0, \\ 3, &otherwise. \end{cases} cpl={1,3,if l=0,otherwise.
此外,头部和身体的分类各需要两个通道,面部、头部和身体的定位各需要 4 个通道。
PyramidBox 损失层
对每一个目标人脸,我们有一系列的 pyramid anchors 来同时监督分类和回归任务,详见 3.3 节。我们设计了一个 PyramidBox 损失函数,其中对分类使用 softmax 损失,对回归使用平滑 L1 损失,详见 3.4 节。
预测模块
在原始的基于 anchor 的检测器,比喻 SSD 和 YOLO 中,目标函数被直接应用在选定的特征图上。MS-CNN 中提出,扩大每个任务的子网络可以提高精度。最近,SSH 通过在层上配置更宽的不同步长的卷积预测模块增大了感受野。DSSD 为每个预测模块增加了残差块。实际上,SSH 和 DSSD 分别使预测模块更宽和更深,使预测模块得到更好的特征用于分类和定位。
受 Inception-ResNet 启发,我们当然可以既获得网络变宽的收益又获得网络变深的收益。我们设计了环境敏感的预测模块 (CPM),见图 2(b)。在这个模块中,我们用 DSSD 中的残差预测模块替换了 SSH 中的环境模块的卷积层。这让我们的 CPM 既具备 DSSD 模块方法的所有优势,又从 SSH 环境模块中保留了丰富的环境信息。
Max-in-out
Maxout 的概念由 Goodfellow 等人率先提出。最近, S 3 F D S^3FD S3FD 应用了 max-out 背景标签来减少对较小的负样本的误检。在本研究中,我们在正负样本上都使用这个策略,把它叫做 max-in-out,参见图 2©。我们首先为每个预测模块预测一个 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,因为较小的anchors有更复杂的背景;然而设置其他预测模块中的 c p = 3 , c n = 1 c_p = 3, c_n = 1 cp=3,cn=1,为的是检测出更多的人脸。
最近基于 anchor 的目标检测器和人脸检测器取得了显著的进展。研究证实合适的不同尺度的 anchors 对检测较小的人脸非常重要。但是 anchors 都是为面部区域设计的,所以依然忽略了环境特征。为了解决这个问题,我们提出了一种新的可供选择的 anchor 方法,叫做 PyramidAnchors。
对于每一个目标人脸,PyramidAnchors 生成一系列 anchors,这些 anchors 对应着与人脸相关的更大的区域,包含了更多环境信息,比如头部、肩膀和身体。我们通过匹配区域大小和 anchor 大小来选择设置 anchors 的层,这将会监督更高层级的层为低层级尺寸的人脸学习更有表现力的特征。加上头部、肩膀和身体的额外标签,我们可以准确地匹配 anchors 和 ground truth 来生成损失。但是由于增加额外的标签不公平,我们通过半监督的方式实现,假定不同人脸有着相同比率和偏移的区域的环境特征也相似。换句话说,我们可以用一些统一的盒子来近似头部、肩膀和身体的实际区域,只要这些盒子的特征在不同人脸上相似。对于一个原始图像中在目标区域 r e g i o n t a r g e t region_{target} regiontarget 的目标人脸,考虑 a n c h o r i , j anchor_{i, j} anchori,j,即第 i i i 个特征层的第 j j j 个anchor,步长为 s i s_i si,我们定义第 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 / s p a k , r e g i o n t a r g e t ) > t h r e s h o l d , 0 , o t h e r w i s e . label_k(anchor_{i,j}) = \begin{cases} 1, & if \ iou(anchor_{i,j} \cdot s_i/{s_{pa}}^k,region_{target})>threshold,\\0, & otherwise.\end{cases} labelk(anchori,j)={1,0,if iou(anchori,j⋅si/spak,regiontarget)>threshold,otherwise.
s p a k {s_{pa}}^k spak 是金字塔anchors的步长 (k = 0, 1, … , K), 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 / s p a k anchor_{i,j} \cdot s_i / {s_{pa}}^k anchori,j⋅si/spak 表示对应的以步长为 s p a k {s_{pa}}^k spak 进行下采样的区域。阈值与其他基于 anchor 的检测器相同。此外,3.4 节中将展示 PyramidBoxLoss。
在我们的实验中,设置超参数 s p a = 2 s_{pa} = 2 spa=2,因为相邻的预测模块的步长是 2。此外,设置 threshold = 0.35,K = 2。这样 l a b e l 0 , l a b e l 1 , l a b e l 2 label_0,\ label_1,\ label_2 label0, label1, label2 就分别是面部、头部和身体的标签。你可以发现一个人脸将会在 3 个连续的预测模块中产生 3 个目标,分别代表面部自身,以及和它对应的头部和身体。图 3 是一个例子。
图 3:PyramidAnchors。例如,尺寸为 128 的最大的紫色人脸在 P 3 , P 4 , P 5 P_3,\ P_4,\ P_5 P3, P4, P5 有 pyramid-anchors,其中 P 3 P_3 P3 是由 conv_fc7 生成的通过人脸本身标注的, P 4 P_4 P4 是由 conv6_2 生成的根据目标人脸的头部 (尺寸为256) 标注的, P 5 P_5 P5 是由 conv7_2 生成的通过目标人脸的身体 (尺寸为512) 标注的。类似的,为了检测尺寸为 16 的最小的蓝绿色人脸,你可以从 pyramid-anchors 得到监督的特征,其中 P 0 P_0 P0 上的 pyramid-anchors 是通过原始人脸标注的, P 1 P_1 P1 上的是通过对应的尺寸为 32 的头部标注的, P 2 P_2 P2 上的是通过对应的尺寸为 64 的身体标注的。
得益于 PyramidBox,我们的人脸检测器能够更好地处理较小的,模糊的和部分遮挡的人脸。需要注意的是,pyramid anchors 是自动生成的,不需要额外的标签。这种半监督的学习让 PyramidAnchors 提取到近似的环境特征。在预测过程中,我们只使用人脸分支的输出,所以相比于标准的基于 anchor 的人脸检测器,运行时不需要额外的计算成本。
在本节中,我们介绍了训练集,数据增强,损失函数和其他操作细节。
训练集
我们使用 WIDER FACE 训练集中的 12880 张图片训练 PyramidBox,并且使用了颜色扭转 (color distort),随机裁剪 (random crop) 和水平翻转 (horizontal flip) 等图像预处理手段。
Data-anchor-sampling
数据采样是统计学、机器学习和模式识别中的一个经典课题,近年来取得了显著进展。对于目标检测任务,Focus Loss 通过修改标准交叉熵损失来解决类别不平衡问题。
这里我们利用了一个数据增强采样方法叫做 Data-anchor-sampling。简单地说,data-anchor-sampling 把图像中的一个随机的人脸变成一个随机的更小的 anchor 尺寸并改变了训练图像的尺寸。更具体地,我们首先在样本中随机选择一个尺寸为 s f a c e s_{face} sface 的人脸。像在 3.1 节中提到的,PyramidBox 中的 anchors 尺度为
s i = 2 4 + i , f o r i = 0 , 1 , . . . , 5 s_i = 2^{4 + i}, \ for \ i = 0, 1, ..., 5 si=24+i, for i=0,1,...,5
其中
i a n c h o r = a r g m i n i a b s ( s a n c h o r i − s f a c e ) i_{anchor} = argmin_iabs(s_{anchor_i}-s_{face}) ianchor=argminiabs(sanchori−sface)
是与被选中的人脸尺度最接近的 anchor 的编号,然后我们从集合 { 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)} 中选择一个随机的编号 i t a r g e t i_{target} itarget。(笔者注:min 在原文为 max,应为作者笔误) 最后,我们把人脸的尺寸从 s f a c e s_{face} sface 改变成
s t a r g e t = r a n d o m ( s i t a r g e t / 2 , s i t a r g e t ∗ 2 ) s_{target} = random(s_{i_{target}}/2, s_{i_{target}}*2) starget=random(sitarget/2,sitarget∗2)
这样,我们就得到了图像的放缩比
s ∗ = s t a r g e t / s f a c e s^* = s_{target}/s_{face} s∗=starget/sface
通过放缩原始图片再随机裁剪一个包含被选中的人脸的尺寸为 640 × 640 640 \times 640 640×640 的部分 (笔者注:作者笔误 600 × 600 600 \times 600 600×600),我们就得到了 anchor 取样的训练数据。例如,我们首先随机选择一个人脸,假设它的大小为 140,那最接近的 anchor 尺寸就是 128,然后我们需要从 16, 32, 64, 128 和 256 中选择一个目标尺寸。假设我们选择了 32,就按照 32/140 = 0.2285 的比例缩小原始图像。(笔者注:例子相比公式,少了随机乘 2 或除 2 的步骤。个人认为放缩比应为 16/140 或 64/140) 最后,从刚刚缩小的图片上裁剪一个包含原始被选中的人脸的 640 × 640 640 \times 640 640×640 的子图片,我们得到了采样的训练数据。
如图 4 所示,data-anchor-sampling 改变了训练数据的分布:1) 较小的人脸的比例高于较大的人脸。2)通过较大的人脸生成较小的人脸,提高了样本在小尺度上的多样性。
图 4:Data-anchor-sampling 改变了训练数据的分布。虚线表示某种类型的训练数据的分布,而实线表示其对应的 data-anchor-sampling 之后的分布。
PyramidBox损失
作为对多边框损失的一般化,我们将一张图片的 PyramidBox 损失函数定义为
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\limits_k \lambda_k L_k(\{p_{k,i}\},\{t_{k,i}\}) L({pk,i},{tk,i})=k∑λkLk({pk,i},{tk,i})
其中第 k 个 pyramid-anchor 损失是
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 ∗ ) L_k(\{p_{k,i}\},\{t_{k,i}\}) = \frac{\lambda}{N_{k,cls}}\sum\limits_{i_k}L_{k,cls}(p_{k,i},p_{k,i}^*) + \frac{1}{N_{k,reg}}\sum\limits_{i_k}p_{k,i}^*L_{k,reg}(t_{k,i},t_{k,i}^*) 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 是 pyramid-anchors 的编号 (k = 0, 1, 2 分别表示面部、头部和身体),i 是 anchor 的编号, p k , i p_{k,i} pk,i 表示 anchor i 是第 k 个目标 (面部、头部或身体) 的预测概率。ground-truth 标签定义为
p k , i ∗ = { 1 , 如 果 按 照 步 长 s p a k 下 采 样 得 到 的 a n c h o r 是 阳 性 的 , 0 , o t h e r w i s e . p_{k,i}^* = \begin{cases} 1,&如果按照步长\ {s_{pa}}^k\ 下采样得到的\ anchor\ 是阳性的,\\0,&otherwise.\end{cases} pk,i∗={1,0,如果按照步长 spak 下采样得到的 anchor 是阳性的,otherwise.
例如,当 k = 0 时,ground-truth 标签等于 Fast R-CNN 中的标签。当 k ≥ 1 k\ge1 k≥1 时,根据下采样 anchors 和 ground-truth 人脸的匹配决定对应的标签。此外, t k , i t_{k,i} tk,i 是一个 4 维向量,表示预测得到的边框的坐标。 t k , i ∗ t_{k,i}^* tk,i∗ 表示与一个阳性 anchor 相关联的 ground-truth 边框,定义为
t k , i ∗ = ( t x ∗ − 1 − 2 k 2 t w ∗ , t y ∗ − 1 − 2 k 2 t h ∗ , 2 k t w ∗ , 2 k t h ∗ ) t_{k,i}^* = (t_x^* - \frac{1-2^k}{2}t_w^*,t_y^* - \frac{1-2^k}{2}t_h^*, 2^kt_w^*,2^kt_h^*) tk,i∗=(tx∗−21−2ktw∗,ty∗−21−2kth∗,2ktw∗,2kth∗)
是对 Fast R-CNN 的一个自然的泛化。分类损失 L k , c l s L_{k,cls} Lk,cls 是有脸和无脸两种类型间的对数损失。回归损失 L k , r e g L_{k,reg} Lk,reg 是 Fast R-CNN 中定义的平滑 L1 损失。 p k , i ∗ L k , r e g p_{k,i}^*L_{k,reg} pk,i∗Lk,reg 意味着回归损失只在 anchors 为阳性时被激活。两项损失通过 N k , c l s , N k , r e g N_{k,cls},N_{k,reg} Nk,cls,Nk,reg 归一化, λ \lambda λ 和 λ k \lambda_k λk 是平衡权重。
优化
我们的 PyramidBox 是用 VGG16 中的预训练参数进行参数初始化。conv_fc6 (笔者注:作者笔误conv_fc67) 和 conv_fc7 的参数根据 VGG16 的 fc6 和 fc7 的子采样参数初始化,其他额外的层用 “xavier” 随机初始化。我们在 WIDER FACE 训练集上进行训练,批尺寸为 16,前 8 万次迭代我们使用了 1 0 − 3 10^{-3} 10−3 的学习率,接下来的 2 万次使用 1 0 − 4 10^{-4} 10−4 ,最后 2 万次使用 1 0 − 5 10^{-5} 10−5。另外我们使用了 0.9 的动量 (momentum) 和 0.0005 的权重衰退 (weight decay)。
在本章中,我们首先通过一组实验分析了 PyramidBox 的有效性,然后在 WIDER FACE 和 FDDB 这两个人脸检测基准上评估最终模型。
我们在 WIDER FACE 验证集上做了对比实验来分析我们的模型。
基线
PyramidBox 的结构与 S 3 F D S^3FD S3FD 相同,所以我们直接用 S 3 F D S^3FD S3FD 作为基线。
对比研究
为了更好地理解 PyramidBox,我们设计了对比实验来评估我们提出的每个组件的贡献,结论如下。
低层级特征金字塔网络 (LFPN) 对检测出困难的人脸至关重要。 表 1 中的结果表明从中间层开始的 LFPN 是更有效的,在 PyramidBox 中这个中间层即为 conv_fc7。这意味着尺度差距过大的特征可能没什么用。比较第一列和第四列可以看出 LFPN 将困难子集上的 mAP 提升了 1.9%。这个显著的增长证明结合高层级语义特征和低层级特征是有效的。
表 1:从不同层开始的 LFPN 的表现
Data-anchor-sampling 让训练检测器更加容易。 在 LFPN 的基础上,我们采用了 data-anchor-sampling 策略,结果表明 data-anchor-sampling 有效地提高了检测器的性能。简单,中等和困难子集上的 mAP 分别提高了 0.4%,0.4% 和 0.6%。可以发现 data-anchor-sampling 不仅在较小的困难的人脸上表现良好,也有利于简单和中等的人脸检测。
PyramidAnchor 和 PyramidBox 损失很有前景。 比较表 2 的第一列和最后一列,可以发现 PyramidAnchor 显著提高了检测器的性能,在简单、中等和困难子集上分别将 mAP 提高了0.7%,0.6% 和 0.9%。这证明了环境信息对分类任务有帮助,尤其对困难人脸。PyramidAnchors 提供了传统 anchors 不具备的额外的监督信息。
表 2:PyramidAnchors 的参数比较
更宽和更深的环境预测模块 (CPM) 效果更好。 表 3 表明 CPM 的表现比 DSSD 模块和 SSH 模块都更好。值得注意的是,SSH 和 DSSD 的结合只比单独的 SSH 好一点点,说明对于预测准确位置和分类,大的感受野是更重要的。另外,比较表 4 的最后两列可以发现,Max-in-out 的方法在简单、中等和困难子集上分别提高了 0.2%,0.3% 和 0.1% 的 mAP。
表 4 对分析结果作了总结,可以看出在简单、中等和困难三个子集上,mAP 分别提升了 2.1%,2.3% 和 4.7%。这个巨幅的提升验证了本文提出的 PyramidBox 的有效性,尤其对于困难人脸。
表 3:环境敏感预测模块
表4:PyramidBox 在 WIDER FACE 验证集上的对照结果
我们在最流行的人脸检测基准,FDDB 和 WIDER FACE 上,评估了最终的 PyramidBox 模型。
FDDB 从雅虎新闻网站上收集了 2845 张图片,包含 5171 个人脸。我们评估了我们的人脸检测器和其他最先进的方法。PyramidBox 达到了顶尖的水准,结果如图 5 所示。值得注意的是,我们的模型仅仅在 WIDER FACE 训练集上进行了训练,这表明 PyramidBox 可以鲁棒地检测不受约束的人脸。
图 5:在 FDDB 上的评估
WIDER FACE 包含了 32203 张图片,其中有 393703 个被标注出的人脸,它们的尺度,姿态和遮挡变化多样。整个数据集被分为训练集 (40%)、验证集 (10%) 和测试集 (50%),其中验证集和测试集都根据检测难度被分为 “简单”、“中等” 和 “困难” 三个子集。我们在训练集上训练了 PyramidBox,在验证集和测试集上评估并与其它顶尖的检测器相比较。图 6 给出了 PR 曲线和 mAP 值,PyramidBox 在所有三个难度上都胜过了其它检测器。
图 6:在 WIDER FACE 验证集和测试集上的PR曲线
本文提出了一个新的环境辅助的单步人脸检测器 PyramidBox,来解决检测不受约束的人脸的问题。我们设计了一个新的环境 anchor,叫做 PyramidAnchor,来监督人脸检测器从面部周围的环境学习特征。此外,我们把特征金字塔网络修改成了低层级的特征金字塔网络,将高层级特征和高分辨率特征结合起来,有利于检测较小的人脸。我们还提出了一个更宽更深的预测模块以充分利用结合了的特征。除此之外,我们采用了 Data-anchor-sampling 来增强训练数据,提高训练数据在较小的人脸上的多样性。实验证明 PyramidBox 在常用的人脸检测基准上达到了顶尖的水平,尤其对于难于检测的人脸。
本文的价值
2018 年 WIDER FACE 三料冠军人脸检测算法,来自百度。算法聚焦检测难度大的人脸,尤其针对小尺度的人脸,在 WIDER FACE 验证集和测试集的困难子集上达到了 88.9% 和 88.7% 的 mAP。
不考虑速度。
single shot
理解为 one-stage 和 two-stage 中的 one-stage。two-stage 方法多的一个阶段是提出候选窗口。应该是出自 SSD。SSD, S 3 F D S^3FD S3FD 和 PyramidBox 可以看作是一个系列。
anchor
锚点,是一个点——高层级特征图上滑窗的中心点,这个点对应原图中不同面积、不同长宽比的多个候选边框。但是好像实际使用中经常把锚点对应的候选边框区域也叫做 anchor,带来了理解这个词的困难。
传统 anchor 可以处理多尺度问题,但并没有关注环境信息。anchor 这个概念出自 Faster R-CNN。
高层级低层级
高层级是指更深的层,后面的层,感受野更大。高层的特征语义信息比较丰富,但是目标位置比较粗略,分辨率低;
低层的特征语义信息比较少,但是目标位置准确,分辨率高。
高层级特征适合用于检测尺寸较大的人脸,而低层级特征适合用于检测尺寸较小的人脸。
特征金字塔网络 (FPN)
在 FPN 出现之前的目标检测算法基本都是只采用顶层特征做预测,虽然也有些算法采用多尺度特征融合的方式,但是一般是采用融合后的特征做预测,而 FPN 不一样的地方在于预测是在不同特征层独立进行的。
FPN 中有一个自底向上的线路,一个自顶向下的线路。自底向上其实就是网络的前向过程。在前向过程中,特征图的大小在经过某些层后会改变,而在经过其他一些层的时候不会改变,作者将不改变特征图大小的层归为一个阶段,因此每次抽取的特征都是每个阶段的最后一层的输出,这样就能构成特征金字塔。
自顶向下的过程是上采样,而横向连接则是将上采样的结果和自底向上生成的相同大小的特征图进行融合。在融合之后还会再采用 3*3 的卷积核对每个融合结果进行卷积,目的是消除上采样的混叠效应。并假设生成的特征图结果是 P2,P3,P4,P5,和原来自底向上的卷积结果 C2,C3,C4,C5 一一对应。
1 × 1 1 \times 1 1×1 卷积的位置
每个 LFPN 块和 FPN 块并不完全一样—— 1 × 1 1 \times 1 1×1 卷积层的位置不同。 1 × 1 1 \times 1 1×1 的卷积核的作用是降维或者加入非线性,这里的作用应该是减少特征的通道数。
图像预处理的几种方法:颜色扭转 (color distort),随机裁剪 (random crop) 和水平翻转 (horizontal flip)
Data-anchor-sampling
Data-anchor-sampling 公式中 max 应为 min,因为如果为 max 可能会出现 i t a r g e t = 6 i_{target} = 6 itarget=6,而 i = 1 到 5,另外从 140 的例子也可以看出,是从 16 到 256。
例子中少了随机乘除 2 的步骤。
Data-anchor-sampling 改变了训练数据的分布:1) 较小的人脸的比例高于较大的人脸。2) 通过较大的人脸生成较小的人脸提高了人脸样本在小尺度上的多样性。第一点实际算不上改变,采样前(虚线) 较小的人脸就比例高(即曲线左边高右边低)。
Data-anchor-sampling 取样后不仅小尺度样本数有明显增加,中等和大尺度样本数也略有增加,所以提高了简单和中等难度上的 mAP。
PyramidBox 损失
PyramidBox 损失是计算 anchors 的损失,分为面部、头部、身体三种 anchor 分别计算损失,每种都包括分类损失和回归损失,最后把三种 anchor 的损失按不同权重相加。
只当 anchor 为阳性时计算回归损失。
一篇非常好的 FPN 讲解