ronghuaiyang · 2020年08月04日

人脸检测器:对DSFD的理解

作者:Bastien
编译:ronghuaiyang
首发:AI公园公众号

导读

通过回顾两个著名的检测算法:Faster R-CNN和Single Shot检测器来深入Dual Shot人脸检测器DSFD的算法。

640.png

物体检测中的SOTA

人脸检测是许多应用的基础步骤,从识别到图像处理。这是一项具有挑战性的任务,因为在现实世界的图像中,人脸在尺度、姿势、遮挡、表情、外观和光照方面呈现出非常高的可变性。模糊、化妆和反光就是多变性的好例子,这解释了为什么人脸检测仍然被广泛研究。

到目前为止,能够产生最佳性能的方法大致可以分为两类:

  • 基于region proposal的方法,更具体的是Region Proposal Network。
  • Single-shot 方法,如 Single Shot Detector。

这两种架构在更广泛的目标检测算法领域中都是著名和经典的算法。让我们更深入地研究一下这两种方法。目标检测的目的是预测图像或视频帧中一组包围目标的框,以及它们各自的类别。

640-1.png

注意,在人脸检测这个特定领域中,只有两个类:_faces_和_not-faces(或background)._

基于Region-proposal的方法

2014年,在R-CNN文章中首次引入了使用region proposal来执行物体分类的想法。它是基于对输入图像不同区域的检测任务与分类任务相似的观察。

640.jpg

这是基region-proposal的方法背后的一个简单表达。

“region-proposal网络”一词是2015年由Faster R-CNN网络的作者创造的,是这种架构的核心组件。这些方法作为两阶段检测方案:

  • region-proposal网络假设出图像中可能的目标位置。
  • 这个region-proposal是类无关的:它检测可能包含物体的区域,而不是背景。
  • 基于区域的卷积网络执行特定类的检测:它对位于建议区域的物体进行分类,并细化其bounding-box坐标。

640-2.png

Faster R-CNN架构的主要组件。Region Proposal 网络输出粗略的感兴趣的区域,这些区域被随后的架构层考虑以进行检测。在这里,基于区域的检测是由Fast R-CNN网络进行的,它与RPN共享部分卷积层。

注意,两个组件可能都不是完全断开连接的网络。Faster R-CNN通过在RPN和特定类别的检测网络上共享全卷积层,确实在计算时间上有了很大的提高。

640-3.png

Region Proposal网络的细节,如原始论文中描述的那样。带有256个3x3滤波器的卷积层在feature map的每个位置输出一个256维向量。然后用后者将对应的感受野分类为k个可能的参考框的目标或背景,称为锚,并预测每一个锚点的坐标偏移量。cls是一个分类层。reg是一个回归层。

Faster R-CNN架构中的一个关键概念是锚框的使用。锚是具有各种形状和尺度的参考框,它将参数化feature map上每一点的“k”的建议区域。在卷积特征图上滑动窗口的每个位置,为每个锚点建议一个区域:

  • 回归层输出锚的一个refined版本的坐标。
  • 分类器层输出锚的二分类的物体/背景分类任务的置信值。

常见的配置是有9个预先定义的锚,涉及三种不同的比例和三种不同的高宽比(通常为1:1、2:1和1:2)。在特征图上的每一个点的每个锚框上都给出了一个建议区域,这一步的输出是k⨉(number of points in the feature map)。最后,过滤建议区域,只保留最好的(例如最高的目标分类分数)。

为了训练RPN,我们需要在预测的边界框和ground truth边界框之间确定匹配策略。在Faster R-CNN中,预测的边界框被指定为:

  • 与所有的ground truth边界框中的IOU最高的那个预测框
  • 所有与ground truth边界框的IOU重叠高于0.7的的预测框

640.png

预测框(黑色)和ground truth框(彩色)之间的匹配策略。

这些预测框被分配为正标签,也就是说,它们的ground truth被认为是物体类。如果预测的框不符合这两个标准之一,且IoU低于0.3,这些框都被分配负标签。他们的ground truth被认为是背景类。其余的预测框被忽略。

一旦每个预测框被分配好标签,RPN网络通过最小化所有预测框的以下损失函数的平均值来训练:

640-1.png

这个损失函数是另外两个损失函数的和,用“模型”表示:

  • 预测框的分类损失。
  • 预测框的回归损失。注意,这种回归损失只对正锚计算(对负锚p = 0),因为负锚不与任何ground truth框匹配。

检测器使用类似的损失函数进行训练。主要区别在于分类。实际上,检测器组件执行多类分类任务,而不是二分类任务。

Single Shot 人脸检测

DSFD架构主要基于2016年的SSD: Single Shot MultiBox Detector架构,来自Wei Liu 等人,该架构不同于基于rpn的网络,因为它没有区域建议步骤。

利用feature map直接预测边界框的坐标和内容,从而得到网络的名称,预测时间也更短。

此外,分类器和回归器不是使用单一的特征图进行检测,而是在位于核心网络不同深度的多个特征图上运行,如下图所示。这个核心网络由VGG-16网络的层(在分类层之前的层)和额外的卷积层组成。VGG-16层可以用其他全卷积网络(如resnet)来替换。

640-2.png

SSD网络的体系结构。Point-wise分类器和回归器在不同深度的特征图上运行。每个点的分类器预测特性映射一个向量的大小84 = (20类+背景)⨉4锚。同样的,回归器为每个点预测的向量的大小为16 = 4坐标⨉4锚。因此在feature map中每个位置预测4个box。例如,在最浅层的特征图上,有38⨉38⨉4 = 5776个框,在最深的特征图上,只有1⨉1⨉4 = 4个。

每个特征图对应不同的感受野的大小。特征图的感受野是指输入图像中像素参与特征图各点计算的区域。特征图越深,感受野越宽。

直观上,这意味着深度feature map能够检测到较大的物体(在输入图像中占据较大的区域),而浅层feature map能够检测到较小的物体。

在基于RPN的架构中,参考框(锚)用于参数化检测。这些锚框也被称为先验,因为它们的坐标是由回归量细化的。在SSD架构中,需要较少数量的锚点,只是为了考虑到边界框的各种可能形状(宽高比),因为检测已经在不同的尺度上进行了。因此,锚的比例对于每个特征图都是固定的,并取决于我们执行检测的深度。

最后,基于分类器的置信度,利用非最大抑制方法来减少正包围框的数量,即分类器不与背景相关联的包围框的数量。这里我们不讨论这个问题。

如果预测框与所有的ground truth框都只有一个小的IoU,则使用匹配策略将预测框与ground truth框匹配,或与背景类匹配。然后使用与Faster R-CNN结构类似的损失函数来训练网络。但是请注意,这里没有必要使用区域建议损失函数。

既然我们已经回顾了这两个著名的物体检测的基线,不过DSFD人脸检测器才是我们感兴趣的架构。现在是深入研究作者提出的新观点的时候了。

DSFD的贡献

本文介绍了对以前SSD架构的三种新的改变:

  • 一种计算特征图的新方法,以便进行分类和回归。
  • 在构建训练过程中最小化损失函数的一种变体。
  • 一种改进的策略,将预测结果匹配到图像中的人脸上。

特征增强模块

DSFD的框架如下图所示。它使用与SSD网络相同的骨干网络。这里的一个关键区别是,不同深度的6个特征图通过一个被作者称为feature Enhance module的模块转换为6个“增强”的特征图。此模块的目标(下文将说明)是为物体分类器和边界框回归器提供更灵活和健壮的特特征。

640-3.png

DSFD体系结构。就像在SSD架构中一样,每个输入图像都要计算6个特征图。它们被称为原始Feature Shot。这里的不同之处在于,使用feature Enhance模块,这些feature map被增强为增强的feature Shot,如下图所示。分类器和回归器都经过训练并应用于原始的和增强的特征图,但这里没有给出。First Shot PAL和Second Shot PAL是在学习过程中优化的两个损失函数。

640-4.png

来自DSFD的特征增强模块。计算在给定深度的核心架构上增强的feature map需要在这个深度层次上的feature map和在下一个层次上的feature map(“向上的feature map”,它更小)。

如上图所示,FEM模块从当前级别feature map的和下一个深度级别的feature map的上采样版本进行element-wise乘积开始。生成的特征图被分为三个部分。每一个都要经过一系列比例从1到3的dilated卷积,然后被连接回一个与当前输入相同大小的完整的特征图上。dilated卷积是指核函数不应用于相邻像素,而是应用于由卷积的比例参数分隔的像素的卷积。

原始的和增强的特征图都被输入到分类器和回归器中,类似于SSD体系结构中的那些。在训练时,利用两个shot的分类器和回归器的结果计算损失函数,优化:

  • 第一个shot的渐进锚点损失(PAL)的原始特征shot。
  • 增强特征shot的第二shot的PAL。

在测试时,只用增强特征shot的分类器和回归器作为检测的输出。

渐进锚损失

如上节所述,在架构的训练过程中,网络的最小化的目标为锚集合的两个损失函数的加权和:

640-5.png

该目标函数的每一项都类似于基于rpn的检测架构章节中所介绍的检测损失函数。但是这里使用了两组不同的锚:

  • 锚的集合_a_用于计算Second Shot的损失(右项)。
  • 较小的锚集_sa_用于计算First Shot的损失(左项)。

实际上,由于每个增强的feature map都是使用相应的原始feature map和一层更深的原始feature map来计算的,feature map的感受野在增强的feature shot (second shot)中比在原始的feature shot中更宽。平均而言,原始shot能检测到的人脸要小一些。为了解释这一差异,作者在计算First Shot的损失时使用了较小的锚的集合。记住,只有从second shot的特征被用于预测/测试。

就像在SSD中一样,每个特征图使用不同的尺度的锚。增强shot的锚比原始的shot的锚大两倍。基于人脸的统计,所有锚只使用一个形状,1:5 .5。

升级的锚匹配

目标检测与人脸检测的一个主要问题是锚点的选择不能很好地覆盖目标或人脸可能的形状和尺度空间。这导致了训练中检测到的正边界框和负边界框数量的显著不平衡(负边界框更多),导致每个特征图上的回归器和分类器的不稳定和较慢的优化。

为了解决这个问题,使模型对各种形状和大小更健壮,SSD和RPN-based方法实现了各种解决方案,从固定正负样本比例采样预测框,到数据增强策略,到多尺度图像输入。

后一种方法是DSFD采用的方法。在训练时,以40%的概率对输入图像进行基于锚点的采样:

  • 图像中其中一个ground-truth人脸是随机选择的。
  • 在第二个shot中随机选择一个可能的锚尺度(增强特征shot的锚尺度为16、32、64、128、256、512)。
  • 该图像被裁剪成包含所选人脸的子图像。选择裁剪的大小,使子图像与所选人脸的大小比为_640/S_,其中_S_为所选尺度。

对于剩余的概率,对输入应用一种类似于SSD中使用的数据增强策略,即:

  • 随机裁剪输入图像(最终得到和物体的最小重叠)。如果存在一个物体,裁剪就以它为中心。
  • 缩放到固定大小。
  • 随机水平翻转。
  • Photo-metric畸变。

结果

DSFD架构在两个主要的人脸数据集WIDER和FDDB上实现了高精度。正如你在下图中看到的,它克服了人脸检测任务中的许多挑战:遮挡、化妆、反射、模糊、姿势……

WechatIMG852.jpeg

用绘图的方式说明了DSFD在人脸检测中的各种挑战的性能。只有当检测器(分类器)置信度大于0.8时,才会绘制蓝色边框。

在这篇文章中,作者声称在两个数据集上都是排第一的,并进行了消融研究,以显示他们的三个贡献各自的相对影响。在所有三个版本的更广泛的数据集(简单,中等和困难)中,每个贡献都带来了平均精度的提高:

  • 特征增强模块带来了0.4%(easy WIDER)和5.5%(hard WIDER)的提升
  • 渐进锚损失带来了0.3%到0.6%的提升
  • 锚匹配带来了0.1%到0.3%的提升

—END—

英文原文:https://www.sicara.ai/blog/2019-09-26-face-detectors-dsfd-state-of-the-art-algorithms

推荐阅读


关注图像处理,自然语言处理,机器学习等人工智能领域,请点击关注AI公园专栏
欢迎关注微信公众号
AI公园 公众号二维码.jfif
推荐阅读
关注数
8259
内容数
210
关注图像处理,NLP,机器学习等人工智能领域
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息