本文来自《DSFD: Dual Shot Face Detector》,时间线为2018年10月,是南理工Jian Li在腾讯优图实验室实习时候的作品。在WIDER FACE,FDDB上效果也超过了PyramidBox和SRN。

0 引言

最近在比赛上拿到最好成绩的人脸检测模型大致可以分成2类:

  • 基于RPN的网络,这种网络是2阶段模型
  • 基于SSD这种一次shot检测,直接预测边界框和置信度。

而一次shot的检测器因其高预测速度和简单的系统设计而更受青睐。不过分析下来,仍然有以下三个问题未完全解决:

  • 特征学习:当前特征金字塔网络(feature pyramid network,FPN)广受应用,然而FPN只是将high-level和low-level的输出网络层简单合并了下,并未考虑到当前层的信息,而且基于锚之间的上下文关系信息都被忽略了;
  • loss设计:主流使用的是目标检测中传统的loss函数,为了解决类别不平衡问题,Focal loss可以重点关注一个稀疏的硬样本的训练。为了使用所有原始和增强的特征,《Feature agglomeration networks for single stage face detection》提出层级loss以更有效训练网络。然而上面这些loss函数都没考虑到feature map在不同level上需要渐进学习的能力;
    ps:平滑L1 loss有助于阻止梯度爆炸
  • 锚匹配策略:基本上,每个feature map上面的预定义锚集合是通过在图片上平铺不同尺度和长宽比的框完成的。许多别人先前的工作分析了锚的合理尺度和锚的补偿策略,以此来增加正锚的数量。然而这些策略忽略了数据增强中的随机采样。人脸尺度的连续性和大量不同尺度的锚仍然会导致负锚和正锚之间比例的差距

本文提出了一个新的人脸检测框架叫DSFD(dual shot face detector),其继承了SSD的结构:

  • 首先,结合PyramidBox中low-level的FPN与RFBNet中的感受野块(receptive field block,RFB),提出一个特征增强模块(feature enhance module,FEM)来增强特征的判别性和鲁棒性;
  • 其次,受到《Feature agglomeration networks for single stage face detection》中层级loss(hierarchical loss)和PyramidBox中的金字塔锚的启发,将更小的锚平铺到higher-level feature map cell上可以获得更多关于分类的语义信息和更多关于检测的高分辨率定位信息。提出渐进锚loss(progressive anchor,loss,PAL),通过一组更小的锚去计算辅助有监督loss,以辅助特征学习;
  • 最后,提出一个改进锚匹配方法(improved anchor matching,IAM),在DSFD中融合锚划分策略和基于锚的数据增强方法去,以提供更好的回归器初始化,让锚和ground-truth人脸尽可能匹配。


图1显示更小的锚平湖和改进的锚与ground-truth人脸的匹配可以消除尺度和遮挡的问题,从而提升人脸检测性能。

1 结构

1.1 DSFD的结构(Pipeline of DSFD)

DSFD的结构如图2。

作者也采用如PyramidBox和S3FD中一样的策略,通过扩展VGG16作为DSFD的基底骨干网络,即将VGG16的全连接层替换成其他辅助的卷积层。作者选择conv3_3,conv4_3,conv5_3,conv_fc7,conv6_2,conv7_2作为first shot检测器层,以生成6个original feature maps,其对应命名为,\(of_1\),\(of_2\),\(of_3\),\(of_4\),\(of_5\),\(of_6\);然后,作者提出的FEM可以将这些original feature maps 转换成6个增强的feature maps,其对应命名为\(ef_1\),\(ef_2\),\(ef_3\),\(ef_4\),\(ef_5\),\(ef_6\),它们与对应的original feature maps有相同的size,通过将他们输入到SSD类型的头部,以此构建second shot 检测层。注意到训练图片的输入size是640,这意味着lowest-level层到highest-level层的feature map的size 从160到5。不同于S3FD和PyramidBox,在使用FEM对感受野增强和新的锚设计策略后,原则上就没必要让(stride,锚,感受野)这三个size满足等比例间隔原则。因此,DSFD更灵活也更鲁棒。同时,original和enhanced shot有2个不同的loss。分别被命名为第一次shot渐进式锚loss(first shot progressive anchor loss, FSL)和第二次shot渐进式锚loss(second shot progressive anchor loss, SSL)。

1.2 特征增强模块(Feature Enhance Module)

这里提出的FEM模块主要是为了增强original features 让特征变得更据辨识性和鲁棒性。对于当前锚\(a(i,j,l)\),FEM会利用包含当前层锚\(a(i-1,j-1,l)\),\(a(i-1,j,l)\),...\(a(i,j-+1,l)\),\(a(i+1,j+1,l)\)和上层锚\(a(i,j,l+1)\)的不同维度信息。具体的,关联锚\(a(i,j,l)\)的feature map cell可以通过数学定义:

这里\(c_{i,j,l}\)是在第\(l\)层中feature maps上坐标为\((i,j)\)的cell,\(f\)表示扩张卷积(dilation convolution),逐元素相乘和上采样操作的组合,\(\gamma, \delta\)分别表示当前层信息和上一层信息。

如图3所示,其是FEM的原理,主要是受到FPN和RFB的启发。这里:

  • 首先用1x1卷积核去归一化feature maps;
  • 然后,上采样上一层feature maps并与当前层进行逐元素相乘;
  • 最后,将feature maps划分成3个部分,并连接对应的3个子网络,每个子网络包含不同数量的扩张卷积层。

1.3 渐进锚loss(Progressive Anchor Loss)

DSFD采用的是多任务loss,因为其可以让original和enhanced feature maps的训练任务以两个shots进行训练。首先,DSFD的second shot anchor-based 多任务loss函数定义如下:
\[L_{SSL}(p_i,p_i^*,t_i,g_i,a_i)=\frac{1}{N}(\sum_iL_{conf}(p_i,p_i^*)+\beta\sum_ip_i^*L_{loc}(t_i,g_i,a_i))\]
这里\(N\)是匹配的密集边界框的个数;\(L_{conf}\)是基于2个类(人脸和背景)的softmax loss;\(L_{loc}\)是基于锚\(a_i\)下,介于参数化的预测边界框\(t_i\)和ground-truth边界框\(g_i\)之间的平滑L1 loss;当\(p_i^*=1(p_i^*=\{0,1\})\)时,锚\(a_i\)是正类,且此时位置loss也是激活的。\(\beta\)是一个权衡这两个loss的超参数。相比于同一个level中的enhanced feature maps,original feature maps针对分类的语义信息更少,但是有更多针对检测的高分辨率定位信息。因此,作者认为original feature maps可以检测和分类更小的人脸。因此,作者提出了基于一组更小锚的first shot 多任务loss:
\[L_{FSL}(p_i,sp_i^*,t_i,g_i,sa_i)=\frac{1}{N}(\sum_iL_{conf}(p_i,sp_i^*)+\beta \sum_ip_i^*L_{loc}(t_i,g_i,sa_i))\]
这两个shot loss可以组合成一个渐进式锚loss:
\[L_{PAL}=L_{FSL}(a)+L_{SSL}(sa)\]
这里first shot中锚的size是second shot中的一半。在预测阶段,只采用second shot的输出,这意味着预测阶段并不会有额外的计算代价。

1.4 改进的锚匹配策略(Improved Anchor Matching)

在训练中,需要计算正锚和负锚以决定对应人脸边界框是哪一个锚。当前锚匹配方法是基于锚和ground-truth人脸之间双向选择。因此锚的设计和增强的人脸采样是协同的,以此尽可能让锚和人脸进行相配,以此提供回归器更好的初始化。

表1显示DSFD的锚设计细节,每个feature map cell是如何关联固定shape的锚的。这里基于人脸尺度的统计信息,将锚尺度的比例设为1.5:1。original feature中锚的size是enhanced feature中的一半。另外,在数据增强上:

  • 基于\(\frac{2}{5}\)的概率,采用PyramidBox中data-anchor-sampling相似的基于锚的采样,其是在一个图片中随机选择一个人脸(裁剪的子图片包含人脸),并将子图和选择的人脸之间size比例设置为\(\frac{640}{rand(16,32,64,128,256,512)}\);
  • 基于\(\frac{3}{5}\)的概率,采用SSD中的数据增强方法。

2 实验结果分析


.

face detection[DSFD]的更多相关文章

  1. Clash Detection

    Clash Detection eryar@163.com Abstract. Clash detection is used for the model collision check. The p ...

  2. YOLO: Real-Time Object Detection

    YOLO detection darknet框架使用 YOLO 训练自己的数据步骤,宁广涵详细步骤说明

  3. tensorfolw配置过程中遇到的一些问题及其解决过程的记录(配置SqueezeDet: Unified, Small, Low Power Fully Convolutional Neural Networks for Real-Time Object Detection for Autonomous Driving)

    今天看到一篇关于检测的论文<SqueezeDet: Unified, Small, Low Power Fully Convolutional Neural Networks for Real- ...

  4. 使用intellij的svn时提示出错: Can't use Subversion command line client: svn.Errors found while svn working copies detection.

    使用Intellij的svn时提示出错:Can't use Subversion command line client: svn. Errors found while svn working co ...

  5. 论文阅读(Chenyi Chen——【ACCV2016】R-CNN for Small Object Detection)

    Chenyi Chen--[ACCV2016]R-CNN for Small Object Detection 目录 作者和相关链接 方法概括 创新点和贡献 方法细节 实验结果 总结与收获点 参考文献 ...

  6. 论文阅读(Xiang Bai——【TIP2014】A Unified Framework for Multi-Oriented Text Detection and Recognition)

    Xiang Bai--[TIP2014]A Unified Framework for Multi-Oriented Text Detection and Recognition 目录 作者和相关链接 ...

  7. 论文阅读(Xiang Bai——【arXiv2016】Scene Text Detection via Holistic, Multi-Channel Prediction)

    Xiang Bai--[arXiv2016]Scene Text Detection via Holistic, Multi-Channel Prediction 目录 作者和相关链接 方法概括 创新 ...

  8. 论文阅读(Zhuoyao Zhong——【aixiv2016】DeepText A Unified Framework for Text Proposal Generation and Text Detection in Natural Images)

    Zhuoyao Zhong--[aixiv2016]DeepText A Unified Framework for Text Proposal Generation and Text Detecti ...

  9. 论文阅读(Xiang Bai——【CVPR2015】Symmetry-Based Text Line Detection in Natural Scenes)

    Xiang Bai--[CVPR2015]Symmetry-Based Text Line Detection in Natural Scenes 目录 作者和相关链接 方法概括 创新点和贡献 方法细 ...

随机推荐

  1. 浅谈SnackBar(Toast大兄弟)

    SnackBar是 Android Support Library 22.2.1 里面新增提供的一个控件,我们可以简单的把它理解成一个加强版的Toast,或者是一个轻量级的Dialog. 特点: .S ...

  2. Android滑动冲突解决

    (1).场景一:外部滑动方向跟内部滑动方向不一致,比如外部左右滑动,内部上下滑动   ViewPager+Fragment配合使用,会有滑动冲突,但是ViewPager内部处理了这种滑动冲突   如果 ...

  3. DataGridView的单元格如何嵌入多个按钮控件

    前段时间我有一个朋友面试公司的时候遇到这个面试题,他也给了份原题给我瞧瞧,并没有什么特别的要点,关于这一类问题,如何在网格上的单元格嵌入多个控件(如按钮.超链接等)问题,我在网上搜索了下这类问题,发现 ...

  4. 关于在ROS kinetic下arbotix报错的问题

    最近在学习ros过程中 出现了一个包错误  ERROR:cannot launch node of type [arbotix_python/arbotix_driver]:arbotix_pytho ...

  5. UnrealEd3视图导航及常用快捷键

    本博客使用的版本:2010-08   [更多其他的UE3版本][tps所用版本: 2011-02]     [最新的UE3版本 -- 2015-02] [unreal engine wiki  中文w ...

  6. Linux 最小化安装后IP的配置(手动获取静态IP地址)

    一.图形化界面配置(假设为电脑A) 如果你的Linux安装有图形化界面,那么通过以下方式来配置: 我这里是有两块网卡,第一个网卡在上篇中已经通过DHCP来配置了:Linux 最小化安装后IP的配置(D ...

  7. servlet请求和响应的过程

    1.加载 Servlet类被加载到Java虚拟机中,并且实例化.在这个过程中,web容器(例如tomcat)会调用Servlet类的公开无参构造函数,产生一个Servlet类的实例对象.默认情况下Se ...

  8. c/c++ 字节对齐

    c 字节对齐 概念: 结构体里会包括各种类型的成员,比如int char long等等,它们要占用的空间不同,系统为一个结构体开辟内存空间时,会有2种选择. 第一种:节省空间的方案,以上面的列子来说的 ...

  9. echo 在shell及脚本中显示色彩及闪烁警告效果

    在shell脚本编写中,echo用于输出字符串等提示信息,当我们需要格外显示色彩及闪烁效果如下: 一.在执行shell中显示色彩: 语法格式: echo -e "\033[颜色1:颜色2m ...

  10. 将web项目部署到阿里云服务器上

    一.用eclipse将写好的项目打成war包 1.右键点击项目,选择Export 选择打包之后的路径,点击Finsh. 2.购买阿里云服务器 按下图选择 3.设置云服务器防火墙 4.远程连接云服务器 ...