概述

本文介绍1篇人脸检测方面的工作,这是2017年的工作。S3FD是SSD类的检测器,为人脸检测做了相应优化和修改。即使放在今年(2019),这个工作的结果也都是SOTA级的存在。

前段时间写了文章总结FaceBoxes,那篇文章和本文的主角S3FD是同一个实验室出品的,都来自中国,并且在榜单中都取得了当时最好的成绩。

动机

论文一般都要先写出当前存在的问题,然后才好展开具体的方法。本文的动机就是解决人脸检测中存在的几点不足,可以用一张图片来表示:

  • 问题一:铺设锚框的特征图相对原图的步长太大(8/或16),这样小脸基本就剩不下多少特征了。可以想象,8x8以下的人脸基本就没有对应的特征了。具体见上图(a)

  • 问题二:对小脸来说,anchor尺寸和有效感知野不匹配,anchor都是偏大的。理论感知野一般会很大,但是能影响输出结果的有效感知野会小得多。具体见上图(b),白色部分才是有效感知野。

  • 问题三:anchor的匹配策略问题。anchor的边长是离散的(比如本文的anchor尺寸是16, 32, 64, 128, 256, 512 ),而图片中的人脸尺寸是连续的,使用IOU进行匹配的时候,就会发现人脸尺寸远离anchor尺寸的时候,平均能匹配到的anchor个数特别少。比如上图(c)中,和anchor尺寸一致的人脸能得到很多匹配的anchor框,而和anchor尺寸相差较多的人脸,平均能匹配到的anchor框数远小于平均值,对于图上的tiny face和outer face来说,它们能匹配的anchor数不足2甚至1,这些人脸的召回率就会很低。

  • 问题四:为了检测小脸,需要在较底层的特征图上密集的铺设anchor框,总的来看大部分anchor框都来自第一层底层特征,但是这些anchor框大部分都是负样本,只有少数是正样本,整体来看正负样本很不均衡,见上图(d)。(虽然本网路强制正负样本比例1比3,也只能一定程度缓解)。

总的来说,本文针对小脸的检测做出了很多改进,并且兼顾了人脸检测的其它方面。

网络结构

本网络的主干网络来自VGG,输入640x640保留pool5和以前的部分,后续部分堆积下采样和卷积。最终共六个特征图参与最终的预测,预测的时候采用3x3卷积核生成坐标回归和结果分类。

网络结构上来看,基本是一个SSD的样子。参与预测的六个特征图步长从4到128(这就是一个特征金字塔),对应的anchor尺寸从16到512。

最终共六个特征图参与最终的预测。每个参与预测的特征后跟一个p×3×3×q的卷积,其中p是输入特征的额通道数,q是输出特征的通道数, 卷积核大小是3x3。

对每个anchor来说,我们要预测4个坐标偏移量和Ns个分类分数,最底层的特征层conv3_3来说Ns=Nm+1(其中Nm是max-out背景标签数,代码中取Nm=3), 对其它5层特征图来说Ns=2。

损失函数采用联合损失函数,分类部分采用softmax loss,坐标回归部分采用smooth L1 loss。

解决问题的思路

问题一的解决办法:多个特征图用于预测

为了解决小脸的特征信息过少的问题,本文在步长为4的特征图开始预测(而不是8或16),共用到了6个特征图进行预测,详细信息参见上面的网络结构。这样小脸在第一个预测特征图处还能剩下很多信息,改善了小脸的召回率。

问题二的解决办法:精心设计anchor框大小

前面说了有效感知野会比理论感知野小得多,所以要小心设置各个特征图的anchor尺寸大小,使之和有效感知野匹配起来。具体每一层的大小见上面的Table_1。

同时,anchor的设置还遵循了等稠密度间隔原则。稠密度具体的计算可参考我前面写的FaceBoxes的论文笔记博客。

问题三的解决办法

问题三的原因是anchor的边长是离散的,而图片中的人脸尺寸是连续的。人脸尺寸远离anchor尺寸的时候,平均能匹配到的anchor个数特别少,一定程度上被网络忽略了。

作者有两个基本的观察:

  1. 平均匹配到3个anchor框还不足以为人脸召回得到较高的分数
  2. 匹配到的anchor框数和anchor的尺寸高度相关

因此,为了解决这个问题,论文把anchor的匹配策略分为两个阶段:

stage 1:将IOU匹配的阈值从0.5设置为0.35,增加平均匹配到的anchor数量

stage 2:经过上一个阶段,tiny face和outer face可能仍然没有匹配到足够的anchor数量,所以直接把阈值降为0.1,取前N个匹配结果,N是第一阶段平均的匹配数量。

该策略对各个尺度的人脸平均匹配的anchor个数的改善见下图(a)。

我的一个疑问:这里主要是指训练阶段的匹配策略吧,主要为了让各个anchor学习和它们的尺寸相差较大或者相距较远的人脸。推理的时候不知道怎么用的匹配策略。

问题四的解决办法

问题四的根本原因是正负样本不均衡。这也是没办法的事,想检测小脸就要在较底层的特征图上密集铺设anchor框,这样一来小的anchor框就会占比较大,比如对于S3FD来说,第一个检测层的anchor框数量占了75%, 而这些anchor框里天生就是大部分为负样本,这样在所有anchor中负样本必定占有较大比例,导致检测结果中有较高的假阳性率。

为了解决这个问题,本文在最底层的conv3_3特征图预测上采用了更加复杂的分类策略:max-out 背景标签。

其它几个特征图用于分类的时候都是2分类,这里认为的把背景设为Nm种,得到Nm个背景的预测分数和一个人脸的预测分数,Nm个背景分类中取最大值和人脸做softmax,无形中分为人脸的概率就大大增加了(我感觉这里类似一个权重降权的操作)。具体见Fig 4(b)。

总结

问题一的解决方案应该来自SSD,问题二的解决方案主要是一篇计算有效感知野的论文和作者之前的FaceBoxes这篇论文, 后面两个解决方案没看出来是哪来的。

总之,作者的几个idea都很简洁,但是整体效果非常好。为作者点100个赞。

最终结果

谦虚点说当时就是傲视群雄。当然,两年后的今天已经有不少框架超过这个了。

在WIDER FACE的hard验证集上,S3FD优势巨大。


论文

S3FD: Single Shot Scale-invariant Face Detector

代码

S3FD官方代码(caffe):sfzhang15/SFD

clcarwin/SFD_pytorch

yxlijun/S3FD.pytorch

sciencefans/RSA-for-object-detection

参考资料

这就是神经网络 16:深度学习-人脸检测-FaceBoxes

[WIDER FACE官网:WIDER FACE: A Face Detection Benchmark

人脸检测背景介绍和发展现状

人脸检测算法之 S3FD

人脸检测: S3FD

论文阅读_人脸检测:S3FD

这就是神经网络 19:深度学习-人脸检测-S3FD相关推荐

  1. 【每周CV论文推荐】 深度学习人脸检测入门必读文章

    欢迎来到<每周CV论文推荐>.在这个专栏里,还是本着有三AI一贯的原则,专注于让大家能够系统性完成学习,所以我们推荐的文章也必定是同一主题的. 人脸图像是整个图像处理领域里面研究时间最长, ...

  2. fasterrcnn论文_【每周CV论文推荐】 深度学习人脸检测入门必读文章

    我的新书<深度学习之人脸图像算法>市了,欢迎大家关注! 言有三新书来袭,业界首次深入全面讲解深度学习人脸图像算法​mp.weixin.qq.com 欢迎来到<每周CV论文推荐> ...

  3. 深度学习---人脸检测(勿喷)

    所谓人脸检测,就是给定任意一张图片,找到其中是否存在一个或多个人脸,并返回图片中每个人脸的位置和范围.自动人脸检测技术是所有人脸影像分析衍生应用的基础. 人脸检测大致分为两种方案:一是刚性模板(rig ...

  4. 深度学习人脸检测与人脸识别

    一.概述 1. 基本概念 人脸是个人重要的生物特征,业界很早就对人脸图像处理技术进行了研究.人脸图像处理包括人脸检测.人脸识别.人脸检索等.人脸检测是在输入图像中检测人脸的位置.大小:人脸识别是对人脸 ...

  5. [深度学习]人脸检测-Tensorflow2.x keras代码实现

    人脸检测 1. 所需Python环境 2. 数据准备 3. 代码实现 3.1 用OpenCV实现 3.2 用深度学习实现目标检测 3.3. 最后在加一个图片 1. 所需Python环境 pip ins ...

  6. 【OpenCV-Python】——Haar人脸检测深度学习人脸检测EigenFaces/FisherFaces/LBPH人脸识别

    目录 前言: 1.人脸检测 1.1 基于Haar的人脸检测 1.2 基于深度学习的人脸检测 2.人脸识别 2.1 EigenFaces人脸识别 2.2 FisherFaces人脸识别 2.3 LBPH ...

  7. java深度学习人脸检测、特征提取、人脸对比

    网上几乎没有关于java使用深度学习的人脸识别完整的源码,这个是我进半年来自己摸索出来的,现在开源出来,希望对喜欢人脸识别的java社区有帮助. 人脸识别分为以下3步骤完成: 1.人脸定位,也叫人脸检 ...

  8. Opencv中的深度学习(人脸检测、车牌检测、DNN)

    首先,无论是做检测还是DNN图像分类,所有的模型或配置文件都需要从以下三个网站中下载IT大牛们帮我们创建的各种分类器: # 人脸检测 ''' https://github.com/opencv/ope ...

  9. 【视频课】一课彻底掌握深度学习人脸图像算法,长期更新

    课程介绍 人脸图像在计算机视觉领域中研究方向非常广,覆盖底层图像特征,目标检测与跟踪,图像分类和检索,图像滤波,图像分割,三维重建,风格迁移等方向. 在商业界应用落地也有非常多的软件产品和硬件产品. ...

最新文章

  1. TCP面向连接中的“连接”和“可靠”与“不可靠”
  2. python字典遍历 没有顺序_Python中字典的顺序问题(为什么实践发现字典的遍历和方法popitem并不是随机的?)...
  3. CV Code | 计算机视觉开源周报 20190603期
  4. mysql客户端centos离线安装_mysql离线安装部署centos
  5. spring boot连接redis配置127.0.0.1_springboot+redis项目实战
  6. .NET平台开源项目速览(6)FluentValidation验证组件介绍与入门(一)
  7. EasyRecovery数据恢复(U盘)
  8. 得先好好研究一数据库
  9. Fckeditor漏洞利用总结
  10. 在计算机操作系统中操作系统是处于应用软件,计算机操作系统考试复习题
  11. (2020/11/9)学习记录
  12. 编程语言学习方法总结
  13. 【题解】【AcWing】149. 荷马史诗
  14. BIOS知识枝桠——UEFI Driver
  15. Nyko推出平板手柄 为运行在Tegra3上的游戏特别打造
  16. Linux定时任务的基础操作
  17. 【016】基于51单片机的pwm加速减速步进电机Proteus仿真设计与实物设计
  18. 携程旅行网的盈利模式
  19. Spring系列第2篇:控制反转(IoC)与依赖注入(DI),晦涩难懂么?
  20. Python 基础 函数的使用——参数

热门文章

  1. 基于 SpringMvc+OpenCV 实现的答题卡识别系统(附源码)
  2. 轻便型FDW框架 for pb
  3. 中国手机浏览器行业发展模式与投资策略分析报告2022-2028年版
  4. 中国万网获国家信息安全应急服务资质
  5. iPhone 上也能用安卓系统了?!
  6. 【PHP基础】Cookie基础知识、应用案例代码及攻防
  7. 中信银行信用卡服务较差,现在连交易的短信通知也取消了!!!
  8. 火狐实用插件 Video DownloadHelper
  9. office 365安装教程
  10. idea翻译成中文是什么意思_idea是什么意思_idea在线翻译_英语_读音_用法_例句_海词词典...