论文:DSFD: Dual Shot Face Detector

原文链接:https://arxiv.org/abs/1810.10220

DSFD是2019年的人脸检测算法,来自腾讯优图实验室

先看看算法的效果,在各个场景下都能达到非常好的人脸检测效果

摘要:

本文提出了一个新的人脸检测网络-DSFD,DSFD计继承了SSD的网络结构,并引入了一个特征增强模块来转换原始的特征特征图,把单点检测器转化为双点检测器。特别的,采用两组anchors计算渐进式锚点损失(progressive anchor loss)有效地简化了计算过程。另外,通过整合新的数据增强技术和anchor设计策略,DSFD更能好的初始化回归器,我们提出一种改进的anchor匹配方法。

引言

先前最好的检测器大概可以分为两类,第一类主要是基于Faster RCNN中的RPN网络,采用两阶段的检测机制,RPN是端到端训练的并生成高质量的region proposals供后面的fast  RCNN进一步使用。另外一类是基于单阶段的单点检测器(SSD),抛弃了RPN直接预测bbox和置信度。目前,单阶段的人脸检测框架更加关注更高的推理效率和直接系统部署。

人脸检测仍然存在的一些问题:
    特征学习:特征学习部分对人脸检测来说非常重要,目前FPN网络广泛应用在state of  the art的人脸检测器上来获得更丰富的特征。然而FPN只在高层和低层输出层上合并分层的特征图,而没有考虑当前层的信息,并且anchor之间的上下文信息也被忽略。

损失设计:目标检测中传统的损失函数包括人脸回归的回归损失和是否检测到人脸的类损失。为了进一步处理类不平衡问题,LIn等人提出一种focal loss来强调关注训练稀疏难样本。为了使用所有原始和增强的人脸特征,zhang等人提出了分层损失来有效学习网络。然而上述损失函数没有考虑不同层之间特征图的渐进学习能力。

Anchor 匹配:基本上,每个特征图的预置anchor都是通过在图像上定期平铺一组具有不同比例和长宽比的框来生成的。有文献分析了一系列合理的anchor尺度和anchor补偿策略,以增加正anchor数量。然而,这种策略忽略了数据增强中的随机抽样。连续的人脸尺度和大量离散anchor尺度对正anchor和负anchor的比值差异仍然很大。
    为了处理上面三个问题,我们提出了一种基于SSD的新网络pipeline——双点人脸检测器(DSFD)。第一,联合了PyramidBox中FPN低层的相似设置和RFBnet中的感受野模块。我们引入了一个特征增强模块来加强特征的区分度和鲁棒性第二,受PyramidBox中的分层损失和pyramid anchor的启发,我们提出了渐进性anchor 损失(PAL),通过一些更小的anchor,PAL计算辅助监督损失以有效简化原始特征,因为由于较小的Anchor平铺到原始特征图上,单元格可能具有更多的分类语义信息和小人脸的高分辨率定位信息。最后,我们提出了一种改进的anchor 匹配机制,将anchor划分策略和基于anchor的数据增强技术集成到我们的DSFD中,尽可能匹配anchor和ground truth,为回归器提供更好的初始化。图一表明我们提出的DSFD方法在各种场景都非常有效,特别是在非常小的人脸和扬中遮挡的人脸情况下性能很好。

本文的贡献:
    1,为了利用不同层信息,提出了一个新的特征增强模块并因此获得更有区分度和鲁棒性的特征。
    2,通过使用一些更小的anchor在低层引入辅助检测来有效简化特征。
    3,一种改进的anchor匹配策略来尽可能匹配anchor和ground truth 人脸,以为回归器提供更好的初始化。
    4,在FDDB和WIDER FACE数据集上的实验表明,我们提出的DSFD网络是最好的算法。

相关工作

我们从三个层面重审了之前的工作:
    特征学习,人脸检测的早期工作主要依赖手工设计的特征,例如哈尔特征,控制点设置,边缘方向直方图。然而,手工设计的特征缺少引导。随着深度学的发展,手工设计的特征已经被卷积神经网络所取代。例如,Overfeat,cascade RCNN,MTCNN采用CNN在图像金字塔中作为一个滑动窗口检测器来构建特征金字塔。然而使用图像金字塔非常慢并且占用显存。结果,大多数的二阶段检测器都是在单个尺度上提取特征。RCNN通过选择搜索算法获取区域提案,然后通过CNN前传每一个归一化的图像区域进行分类。faster RCNN,RFCN采用RPN网络生成原始区提案。另外ROI pooling和位置敏感POI pooling用来从每个区域提取特征。
    最近,一些研究表明多尺度特征图对小目标的教程表现更好,特别的,SSD,MS-CNN,SSH,S3FD在多个特征层上预测box。FCN,Hyper-column,parsenet融合多层特征进行分割。尽管类似FAN和PyramidBox的FPN分风格的网络取得很好的效果,但是他们没有考虑当前层的信息。不同于上述方法忽略anchor之间的上下文信息,我们提出了一个包含多层扩张卷积层的特征增强模块来加强特征的语义

 loss 设计,通常检测目标损失是对分类和回归的加权求和。Girshick等人提出了平滑L1损失来阻止梯度爆炸,Lin等人发现类不平衡是影响性能的主要原因,提出了动态缩放的交叉熵。另外wang等人设计了RepLoss进行行人检测,改善了遮挡场景的性能。FANet提出了分层特征金字塔和分层损失。然而,FANet中使用的anchor的尺度在不同阶段是保持一样的。本文,我们在不同阶段选择采用不同的anchor size以简化特征。

Anchor匹配,为了让模型更加鲁棒,大多数检测方法会做数据增强,例如颜色蒸馏,水平翻转,随机裁剪,和多尺度训练等。zhag等人提出了一个anchor 补偿策略使小的人脸在训练时匹配更多的anchor。Wang等人提出随机裁剪在训练时生成大量遮挡的人脸。然而,这些方法都忽略了数据增强的随机采样,然而我们合了anchor赋值为anchor匹配提供更好的数据初始化。

DSFD的Pipeline 

DSFD的网络结构如图2所示,我们的网络结构采用VGG16作为backbone,和PyramidBox和S3FD一样,在分类层之间进行截断并增加一些辅助结构。我们选择conv3_3,conv4_3,conv5_3,conv_fc7,conv6_2和conv7_2作为第一个检测层生成六个原始的特征图分别叫作of1,of2,of3,of4,of5,of5。然后为我们提出FEM(特征增强模块)把这些原始的特征图转换层六个增强的特征图,分别叫做ef1,ef2,ef3,ef4,ef5,ef6,这些增强的特征图和对应的原始特征图具有同样的尺寸,然后把他们送入SSD风格的头部构造第二个检测层。注意输入图片的训练尺寸为640,这意味着最底层的特征图尺寸和最高层的特征图尺寸分别是160和5。与PyramidBox和S3FD不同,FEM(特征增强模块)中我们使用了大感受野和新的anchor设计策略,因此无需考虑步长,anchor和感受野三种尺寸要满足同等比率间隔原则。因此,我们的DSFD更加灵活鲁棒。另外原始和增强的两个部分具有不同的损失,分别叫作第一个渐进性anchor(FSL)损失和第二个第二个渐进性损失(SSL)

特征增强模块:特征增强模块可以增强原始特征使这些特征更加可分并鲁棒,简称FEM。为了增强原始特征cell oc(i,j,l),FEM利用不同维度的信息,包括较高层的原始神经元cell oc(i,j,l),和当前层非局部神经元cell:nc(i-e,j-e,l),nc(i-e,j,l),...,nc(i,j+e,l),nc(i+e,j+e,l)。特别地,增强的神经元cell ec(i,j,l)可以用下面的数学公式表示:

(可以理解为,非局部神经元cell nc(i,j,l)是把当前层的上一层特征图进行上采样,然后和当前层特征图进行元素级相乘,然后增强的神经元cell ec(i,j,l)表示对非局部神经元cell nc(i,j,l)进行若干个不同的空洞卷积(细节见下面)后的特征图进行通道级联)
    其中,是位于第 l 层特征图(i,j)处的cell坐标,f 表示一些基本的空洞卷积,元素级相乘,上采样或级联操作。图3解释了FEM的思想,这是受到FPN和RFB的启发。这里,我们首先使用1*1的卷积核对特征图进行标准化,然后,我们上采样更高层的特征图和当前层进行元素级相乘。最后,我们把特征图切分成三部分,后面接三个包含不同空洞卷积层数的子网络。

渐进性anchor损失:我们采用了多任务损失,因为它能在两个方面简化原始和增强特征图的训练任务。第一,第二个shot基于anchor的多任务损失函数定义如下:

表示正样本和负样本anchor的数量,是二类softmax损失(人脸和背景),是预测box 和采用anchor 的ground truth 的平滑L1损失。当时,anchor 是正样本并且定位损失被激活。beta 平衡分类和定位影响的权重因子。在同样的层对比增强的特征图,原始特征图具有更少的用于分类的语义信息,但是具有更高的分辨率信息用来检测。因此,我们认为原始的特征图可检测并分类更小的人脸。因此,我们针对较小的anchor提出了第一个多任务损失函数,定义如下:

其中表示第一个层中较小的anchor,因此两个层的损失可以进行加权求和得到整个渐进性anchor损失,定义如下:

注意,第一个shot层的anchor尺寸是第二个shot anchor尺寸的一半,lamuda是权重因子,Anchor尺寸的详细分配见下面的描述,在预测阶段,我们只使用第二个层的输出,这意味着,并没有引入额外的计算代价

    改进的anchor匹配

训练期间我们需要计算anchor是正的还是负的并判断哪个anchor对应人脸的box,目前的anchor匹配方法是anchor和ground truth人脸双向匹配。因此,在增强过程中anchor设计和人脸采样是协同进行的,尽可能匹anchor和人脸,以便更好地初始化回归器。

表1展示了anchor的设计细节,说明了每个特征图单元格是如何与固定形状anchor关联的。根据人脸尺度统计,我们设置anchor的比率为1.5:1。对原始特征图的anchor尺寸设置为增强特征尺寸的一半。另外,类似于PyramidBox中的data-anchor sampling策略,我们以五分之二的概率进行基于anchor的采样,在图片中随机选择一个人脸,裁剪包含人脸的子图,并设置子图和所选人脸的尺度比率为640/rand(16,32,64,128,256,512)。另外以五分之三的概率采用类似于SSD中的数增强。为了同时改善人脸的召回率并确保anchor的分类能力,我们以IOU门限值为0.4来分配anchor和它的ground truth人脸。

实验

实验细节:backbone网络初始化采用ImageNet上的VGG/ResNet预训练模型。所有新增加的卷积层参数利用“xavier”方法进行初始化。采用SGD,0.9的momentum,权重衰减为0.0005来fine tuneDSFD模型。batch size为16,前40k次迭代的学习率为0.001,然后接着两个10k次迭代分别衰减到0.0001,0.00001。
    在inference阶段,第一个shot层的输出忽略不计,只采用第二shot层前5k个高置信度的人脸。每张图采用NMS,IOU门限值为0.3以产生top750张高置信度人脸,对4个bbox的坐标,我们将左上角坐标四舍五入,并将宽度和高度四舍五入,以扩展检测边界框。

我们在WIDER FACE数据集上进行消融研究来评估我们所提出框架的不同模块的有效性,包括特征增强模块渐进性anchor损失改进的anchor匹配策略。为了公平比较,除了对指定组件的改变,我们对所有的实验采用相同的参数设置。所有的模型都是在WIDER FACE训练集上进行训练,所有的评估都是在都是在验证集上进行。为了更好的理解DSFD,我们选择不同的baseline来简化每个组件,说明这部分如何影响最终性能。

 特征增强模块,先采用S3FD和PyramidBox中VGG16输出的6个特征图进行分类和回归作为baseline并叫作Face SSD(FSSD)。然后在基于VGG16的FSSD网络上增加特征增强模块进行比较。表2展示了特征增强模块对于基于VGG16的FSSD的改善。

Progressive Anchor Loss(渐进性anchor损失),第二,我们采用基于resnet50的FSSD最为baseline并增加渐进性增强anchor损失进行比较。我们采用4个残差块的输出代替VGG中conv3_3,conv4_3,conv5_3和conv_fc7的输出。除了VGG16,我们不执行层标准化。表3展示了我们得到渐进性anchor损失可以改善基于Res50,使用FEM的FSSD。(笔注:这里似乎不能说明这个增益是来自渐进性损失的,因为更换了backbone,不能确定这个增益是是否来自于PAL,缺少一组不使用PAL的基于Res50使用FEM的FSSD实验)。

    改进的anchor匹配:为了评估我们的anchor匹配策略,我们采用基于Res101没有anchor补偿的FSSD作为baseline。表4展示了我们提出的改进版anchor匹配策略可以可以改善使用FEM的基于Res101的FSSD性能。最后,我们采用Res152可以进一步改善性能。

另外,图4显示了我们改进的anchor匹配策略大大增加了接近anchor的ground truth数量,这样降低了离散anchor尺度和连续人脸尺度的矛盾。再者,图5显示了与ground truth人脸匹配的anchor数目的数量分布,这表明了我们的改进版anchor匹配策略可以有效的增加匹配的anchor数目,并且不同尺度人脸的平均匹配anchor数量从6.4增加到6.9。

经过上述的结果和分析,可以得出一些客观的结论:
1)特征增强很重要,我们采用一个更鲁棒更有区分度的特征增强模块来改善特征的表达能力,特别是hard人脸特征的表达能力。
2)采用基于渐进性anchor的辅助损失来训练12个不同尺度的检测特征图,这同时改善了easy,medium,hard人脸的检测性能。
3)改进版anchor提供了更好的初始化的anchor和ground truth人脸来从人脸回归anchor。在三个不同的设置上分别改进了0.3%,0.1%,0.3%。另外,当我们增大训练abtch(LargerBS),在hard设置中可以得到91.2%的AP。

    不同backbone的影响:为了更好的理解DSFD,我们进一步进行了一些实验来检测不同backbone对分类和检测性能的影响。具体地,除了特征提取网络,我们采用同样的参设设置,我们实现了Se-ResNet101,DPN-98,Se_ResNext101_32*4d.表5显示了Se-RseNeXt101_32*4d在easy,medium,hard上的实验结果。这表明了更复杂的模型和ImageNet中Top-1分类准确率越高的模型对人脸检测AP可能没有好处。我们的DSFD具有很高的推理速度得益于简单地使用第二个层(second shot)头的检测结果。对于基于res50的DSFD的VGA分辨率输入,它在推理期间在NVIDA GPU P40上运行22帧FPS。

人脸检测之DSFD算法——论文翻译(DSFD: Dual Shot Face Detector)相关推荐

  1. 人脸检测 DSFD:Dual Shot Face Detector

    论文解读: Abstract 本文解决问题:人脸的尺度变化.姿态.遮挡.表情.外观和光照.本文提出了一种新的人脸检测网络--DSFD,它继承了SSD的结构,引入了一个特征增强模块(FEM),将原始特征 ...

  2. 腾讯最新人脸检测模型DSFD: Dual Shot Face Detector

    [LearnX导读]人脸检测是人脸相关应用中必不可少的一环.如我们熟悉的刷脸解锁,美颜相机,刷脸支付等都离不开人脸检测.这篇文章写的就是提高人脸检测准确度的方法.这篇文章从特征抽取,锚匹配(Ancho ...

  3. Centerface:开源实用的边缘设备无锚人脸检测与对齐算法

    点击我爱计算机视觉标星,更快获取CVML新技术 昨天Github上 ywlife 开源了 CenterFace:实用的边缘设备无锚人脸检测与对齐算法,引起了很多52CV群友的关注,开源不到一天,已经1 ...

  4. [深度学习从入门到女装]DSFD: Dual Shot Face Detector

    论文地址:https://arxiv.org/abs/1810.10220v2 Dual Shot Face Detector 这是一篇CVPR19来自腾讯的论文,本文是在SSD的基础上,加入了Fea ...

  5. 人脸检测之MTCNN算法:论文阅读及源码解析

    文章目录 前言 一.MTCNN论文阅读 1.1 论文信息 1.2 论文摘要翻译 1.3 论文核心(三级级联网络) 1.4 论文核心(级联子网络结构) 1.5 损失函数 二.源码解析 2.1 三级级联网 ...

  6. DSFD(Dual Shot Face Detector)论文解读

    原文连接:DSFD 本文仅记录DSFD的主要创新点,不考虑训练的调参过程.且对SSD类检测算法不不知道的人可以先去学习SSD以及特征融合等相关论文. DSFD 三大创新点:Feature Enhanc ...

  7. 卷积神经网络——目标检测之Faster R-CNN论文翻译

    论文连接 https://arxiv.org/abs/1506.01497 相关论文翻译链接 R-CNN:https://blog.csdn.net/itlilyer/article/details/ ...

  8. 卷积神经网络——目标检测之Fast R-CNN论文翻译

    论文连接 https://arxiv.org/abs/1504.08083 相关论文翻译链接 R-CNN:https://blog.csdn.net/itlilyer/article/details/ ...

  9. Haar、pico、npd、dlib等多种人脸检测特征及算法结果比较

    原文:opencv.pico.npd.dlib.face++等多种人脸检测算法结果比较 NDP检测结果: 结果分析: Pico(Pixel Intensity Comparison-based Obj ...

最新文章

  1. git patch操作
  2. BPW34F红外光电传感器
  3. 【C语言入门教程】3.4 循环控制语句
  4. 为什么有些xpath绝对路径拿不到数据_我写的Xpath 为什么爬取不到内容
  5. py---------面向对象进阶
  6. Kettle使用_24 Kettle输入输出组件汇总
  7. 【Linux系统编程】文件IO操作
  8. 卸载小鲁温度监控有影响吗_通过中央控制器和远程监控优化能源效率
  9. 利用BayesianOptimization库对模型进行贝叶斯调参(XGBOOST)
  10. php中数组自定义排序
  11. 中国剩余定理-数硬币
  12. postman访问abp接口因cookies问题导致400错误
  13. EasyDarwin云平台:EasyCamera开源摄像机接入海康威视摄像机PS流转ES流
  14. kubeedge v1.1.0部署指南
  15. csp php,CSP策略及绕过方法
  16. html5获取视频帧,从HTML5和JavaScript的视频捕获帧
  17. 去social一下什么意思_bbs论坛是什么意思(论坛的含义)
  18. 猫咪藏在哪个房间python作业_猫作文
  19. 上个厕所的功夫,搞懂MySQL事务隔离级别,Java学习视频百度云盘
  20. 2022新版域名防红系统源码+功能强大

热门文章

  1. 配置PSP开发环境的准备工作
  2. 1、mui app在线更新
  3. 优思学院:Weibull 分布 和 Lognormal 分布 (一)
  4. CentOS挂载新硬盘
  5. java(itextpdf)根据不同实体类后台打印对应pdf(与thymeleaf或者freemarker不同的是:不需要写html,css等前端内容)
  6. 图形学笔记(七)画一个 3D 的彩色的立方体
  7. 什么是单点登录(SSO) 侵删
  8. nginx下TCP负载均衡配置
  9. PSTR、LPSTR、PCSTR、LPCSTR、LPWSTR、PWSTR、PCWSTR、LPCWSTR、LPCTSTR
  10. pkl压缩包改成.pkl文件