face detection[SSH]
该文来自《SSH: Single Stage Headless Face Detector》,本文时间线2017年8月。
不同于face rcnn那种两阶段的方法,SSH和ssd一样是一阶段的方法。其从一个分类网络的前面卷积层直接检测人脸。这里所谓的Headless是移除潜在的分类网络的"头",而且SSH本身就是基于尺度不变设计的,所以不需要做图像金字塔。通过不同层上同时检测不同尺度的人脸。这些属性使得SSH即快而且轻量。而且实测发现,在WIDER数据集上采用headless VGG16的效果超过了ResNet-101.而且SSH不使用图像金字塔,所以有5X的加速,而如果SSH配合图像金字塔使用,则可以全面超过其他方法。
0 引言
现在最好的人脸检测方法都需要大量的参数去保证尺度鲁棒性或者上下文整合,所以速度都很慢或者需要很大的内存,如《finding tiny faces》需要超过1s才能处理一张图片。而SSH的Headless表示的是去除网络的头。对于VGG-16,其中的fc6-8层可以看成是该网络的head,其计算代价很大(VGG-16网络头包含大约120M个参数,ResNet-101的头包含大约12M个参数),而且在二阶段模型中,必须在所有提出的候选框上都计算一次。
相对而言,本文中SSH模型就更轻量一些。和RPN一样,分类网络的前面feature maps都可以用来回归一系列预定义的锚。然而,不同于2阶段的检测器,这里最后的分类部分也同时会对这些锚进行回归拟合:
- SSH的headless,正是因为去除了具有大量的参数部分,从而变得更快更轻量;
- 不依赖外部多尺度图像金字塔保证尺度不变性,SSH从网络的不同层上检测人脸。
1 SSH
SSH设计的初衷是为了减少inference时间,并且只需要很少的内存,同时具有尺度不变性。
1.1 结构

如图2所示,SSH是一个全卷积网络,通过在feature maps顶层增加检测模块来完成人脸定位和分类,对应的strides是8,16,32,分别表示为\(M_1,M_2,M_3\)。检测模块包含一个卷积二值分类器和为了检测人脸和定位的回归器。
为了解决定位问题,SSH将一些预定义的边界框(称为锚)与ground-truth进行回归。作者通过使用一个与RPN相似的策略:
- 在每一个划窗位置上,定义K个锚,其中包含了不同的尺度;
- 只考虑长宽比为1的锚来减少锚的个数。
作者发现在实验中使用不同的长宽比对人脸检测效果提升不大,而且SSH中连接着\(W_i\times H_i\)大小feature map的检测模块\(M_i\),有\(W_i\times H_i \times K_i\)个长宽比为1的锚,其对应尺度为\({S_i^1,S_i^2,...S_i^{K_i}}\)。
对于检测模块
一系列卷积层被用来提取特征以供人脸检测和定位,如图3

这包含了一个简单的上下文模块来增加感受野的有效性。上下文模块的输出通道数量(图3 和图4的“X”)在\(M_1\)被设为128,在\(M_2,M_3\)中被设为256。最后2个卷积层用来进行边界框回归和分类。在\(M_i\)中每个卷积位置,分类器判别当前以滤波器为中心的,不同尺度\({S_i^K}_{k=1}^K\)的划窗是否包含人脸。
- 这里的分类器:就是一个1x1的卷积层与2xK个输出通道组成的结构;
- 这里的回归器:就是一个1x1的卷积层与4xK个输出通道组成的结构。
1.2 尺度不变的设计
SSH可以在一次前向传输中同时检测大人脸和小人脸,受到《Feature pyramid networks for object detection》的启发,SSH从三个不同的卷积层上检测人脸,对应的检测模块\(M_1,M_2,M_3\)。这三个模块对应的strides为\(8,16,32\),就是分别用来检测小型,中型,大型人脸。
检测模块\(M_2\)是接在VGG-16的conv5-3上的,虽然可以直接将检测模块\(M_1\)接在conv4-3上,不过这里还是考虑了feature map融合的方式。为了减少内存的消耗,feature map中的通道数通过1x1卷积从512减少到128。conv5-3 feature map会上采样(双线性上采样)然后与conv4-3 feature map结合起来,然后跟一个3x3的卷积层。为了检测更大的人脸,在conv5-3上接一个stride等于2的最大池化,使其stride增大到32。检测模型\(M_3\)放在新加的层上面。
在训练阶段,每个检测模块\(M_i\)是用来训练检测不同尺度范围的;在预测阶段,会将所有尺度上的预测结果通过NMS进行处理并生成最后的检测。
1.3 上下文模块
在二阶段检测器中,通常都是扩大候选框来融合上下文;而SSH是通过简单的卷积层来模拟这种策略。

如图4,将上下文层融合进检测模块。因为锚是以卷积方式进行分类和回归,所以采用更大的滤波器就类似二阶段中的扩大候选框方式。本文中上下文模块中是采用5x5和7x7的滤波器。以这种方式对上下文进行建模增加了对应层的感受野,同时也增加了每个检测模块中的目标尺度。为了减少模型参数量,作者使用类似《Going deeper with convolutions》的方法,并采用了序列3x3的滤波器代替较大的卷积滤波器。检测模块的输出通道的个数(图4中"X")\(M_1\)中为128,\(M_2,M_3\)中分别为256。在本文中使用的带上下文滤波器的检测模块相比《Faster r-cnn: Towards real-time object detection with region proposal networks》拥有更少的参数。作者在实验中还发现上下文模块提升了WIDER上的MAP。
1.4 训练和loss函数
本文算法中,只有当IOU大于0.5的时候才将该锚与ground-truth相对比,而Faster rcnn中是每个ground-truth至少有一个锚(与最高IOU对比),所以这里BP不会迭代与ground-truth不匹配的锚。SSH是一个多任务loss,该loss公式为:

- 这里\(\ell_c\)是人脸分类loss,这里使用的是标准的多项log的 loss。索引K表示第几个检测模块\(M= \{M_k\}_1^K\),并且\(A_K\)表示定义在\(M_k\)中的锚的集合。在\(M_k\)中第\(i\)个锚和对应的ground-truth标签表示为\(p_i,q_i\)。这里锚中正样本为与ground-truth的IOU超过0.5;而负样本是与任何ground-truth的IOU都小于0.3的那些锚。\(N_k^c\)是模块\(M_k\)中锚的个数,会参与分类loss的计算。
- \(\ell_r\)表示边界框回归的loss,如《Faster r-cnn: Towards real-time object detection with region proposal networks》一样,回归空间是基于框维度的log空间迁移和尺度不变性的变换,使用\(\ell_1\)平滑loss。在这个参数化空间中,\(b_i\)表示预测框的值,\(t_i\)表示ground-truth的值。\(I(\dot)\)是指示函数,用于限制回归loss只对可能关联的锚负责,\(N_k^r=\sum_{i \in A_k}I(g_i=1)\)。
1.5 在线硬负和正样本挖掘
这里使用《Training regionbased object detectors with online hard example mining》中的OHEM。并且对于每个检测模块独立的使用各自的OHEM。也就是对每个模块\(M_k\),基于最高得分选择负锚,基于最低得分选择正锚。因为负锚的数量超过正锚,如《Fast r-cnn》,mini-batch中25%保留下来用于做正锚。
2 实验
在实验中,主要分析了:
- 尺度不变性设计;
- 输入尺寸的影响;
- OHEM的影响;
- 特征融合的影响;
- 锚尺度的选择等等。
face detection[SSH]的更多相关文章
- Linux System Account SSH Weak Password Detection Automatic By System API
catalog . Linux弱口令攻击向量 . Linux登录验证步骤 . PAM . 弱口令风险基线检查 1. Linux弱口令攻击向量 0x1: SSH密码暴力破解 hydra -l root ...
- [转]Jailbreak Detection Methods
Source: http://blog.spiderlabs.com/2014/10/jailbreak-detection-methods.html Many iOS applications co ...
- Abnormal Detection(异常检测)和 Supervised Learning(有监督训练)在异常检测上的应用初探
1. 异常检测 VS 监督学习 0x1:异常检测算法和监督学习算法的对比 总结来讲: . 在异常检测中,异常点是少之又少,大部分是正常样本,异常只是相对小概率事件 . 异常点的特征表现非常不集中,即异 ...
- face detection[PyramidBox]
本文来自<PyramidBox: A Context-assisted Single Shot Face Detector>,是来自百度的作品,时间线为2018年8月. 0 引言 最近基于 ...
- SSH高级服务
SSH端口转发 SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据.但是,SSH 还能够将其他 TCP 端口的网络数据通过 SSH 链接来转发,并且自动提供了相应的 加密及解密服务.这 ...
- SMTP 通过 ssh 通道发送垃圾邮件
通过SSH隧道传输SMTP 根据设计,我们不允许校外机器使用我们的SMTP服务器.如果我们允许它,我们将允许任何和所有使用我们的SMTP服务器来分发垃圾邮件.但是也可以通过我们的SMTP服务器发送邮件 ...
- SSH安全服务
ssh安全服务 client \ sever ssh: secure shell, protocol, 22 / tcp, 安全的远程登录, 基于RSA或DSA实现身份认证 两 ...
- [linux]阿里云主机的免登陆安全SSH配置与思考
公司服务器使用的第三方云端服务,即阿里云,而本地需要经常去登录到服务器做相应的配置工作,鉴于此,每次登录都要使用密码是比较烦躁的,本着极速思想,我们需要配置我们的免登陆. 一 理论概述 SSH介绍 S ...
- SSH实战 · 唯唯乐购项目(上)
前台需求分析 一:用户模块 注册 前台JS校验 使用AJAX完成对用户名(邮箱)的异步校验 后台Struts2校验 验证码 发送激活邮件 将用户信息存入到数据库 激活 点击激活邮件中的链接完成激活 根 ...
随机推荐
- 快速排序的java实现
快速排序也属于“交换”类的排序. 核心思想可以概括为:通过多次划分操作实现排序.每一趟选择当前所有子序列中的一个关键字(通常是第一个)作为枢轴,将小于它的元素统统放到它的前面,大于它的统统放到它的后面 ...
- java抓取网页或者文件的邮箱号码
抓文件的 package reg; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.i ...
- Django-404错误处理
404错误是用户输入错误的URL,在 URLconf 中匹配不到相应的URL而抛出的异常 如下图: 为了给用户提供一个友好的访问,需要配置404错误页面 1.在 templates 目录下新建 404 ...
- C#-封装(七)
封装概念 C#是面向对象的一门语言,面向对象的语言有三大特性:封装.继承.多态.而封装可以实现一个自定义的类,从而定义新的对象 封装是将一个或多个项目集合在一个单元中,这个单元称之为类.这样可以防止对 ...
- 数据执行保护呈灰色无法开启 用命令BCEDIT无效 请问怎么解决?
1.默认的管理员账号是关闭开不了的. 2.你重新创建个管理员账户. 3.然后登陆这个账号. 4.然后打开cmd 输入 bcdedit /set nx optin alwaysoff 这行指令.然后回车 ...
- Dockfile制作镜像
讲一个简单的案例 @哈希码用来校验,这样子会安全 MAINTANIER可能将会被LABEL代替,仅仅说说明一下镜像信息罢了. 1.首先是我们创建一个镜像 [root@ELK-chaofeng08 ~] ...
- SAP LOGON 快捷登陆方式如何保存密码
默认情况下,快捷方式密码是不能输入的. 解决方法:修改注册表: 计算机\HKEY_CURRENT_USER\Software\SAP\SAPShortcut\Security EnablePasswo ...
- June. 21 2018, Week 25th. Thursday
Summertime is always the best of what might be. 万物最美的一面,总在夏季展现. From Charles Bowden. It was June, an ...
- CSS鼠标悬浮DIV后显示DIV外的按钮
昨天写样式遇到个问题,如何让鼠标悬浮DIV后,显示DIV外的按钮,可以点击到按钮. 效果如下: 问题: 在DIV hover时候将按钮设为display: block,这是很直接的想法,但是这有个问题 ...
- 我的BRF+自学教程(一):公式(formula)
Business Rule Framework Plus(业务规则框架,以下简称BRFplus或BRF+)是一个强大的工具, 它允许用户以直观的方式对规则建模,并在不同的应用程序中重用这些规则.通过它 ...
