Detection论文总结(3)FA-RPN: Floating Region Proposals for Face Detection_2016 ren rpn proposals-程序员宅基地

技术标签: 目标检测  人脸识别  

文章链接:arxiv

FA-RPN: Floating Region Proposals for Face Detection

本文提出了一个新的方法在人脸检测任务中生成候选区域。相比于利用特征图上的一个像素来对anchor分类,我们采用了一种基于池化的方法。然而,池化成百上千的anchor在推断时需要很大的计算量,因此我们提出了一种高校的anchor设置策略来减少anchor的数量。我们发现FA-RPN产生的候选区域比原来的RPN要好,它有一些好的特性包括迭代修正分数anchor以及不改变训练模型来改变anchor。用ResNet50的主干网络我们在WIDER数据集上得到了89.4%的mAP。

引言

人脸检测是重要的应用,同时它需要算法能评估图片中的每一个小角落。像Faster-RCNN的结构将不同大小的anchor密铺在图片上、对它们分类生成候选区域。然而,RPN只用了特征图中的一个像素来评估一个物体,而与其大小无关,因此完全依赖于高层特征空间所包含的上下文信息。它并没有从物体的整个区域中池化所有特征,因此可能会对物体的位置区域不敏感。同时,anchor的位置是固定的不能被修正,如果需要学习不同尺寸、长宽比的物体或者是用比像素更精细的anchor,那么这种anchor必须在训练中自始至终地使用。

而对RoI进行最终分类有两种基于池化的方法,一种是Fast-RCNN另一种是R-FCN。前者将特征图里的RoI部分池化到一个特定大小(7x7)然后再后面加两个FC层进行分类与回归。由于计算限制,这个方案对于生成候选区域其实是不可行的,因为我们要将这个网络分别应用到每一个被选出的RoI上面。

为了减少对FC层的依赖,R-FCN在RoI中做一个局部卷积来获取物体里的空间信息。每个卷积核是用于检测不同的空间特征,所以我们只需要将每张特征图上对应区域的响应进行池化即可。它可以高效地应用到大量的RoI上。然而,在高分辨率的图像中,RPN通常需要对百万个anchor进行评估,不可能都对它们采用pooling操作。幸而许多anchor都不是必须的,本文我们将说明好好地设置anchor可以有效减少proposals数量,从而可以用基于池化的方法来生成候选区域。从而有比RPN好的效果。

这种基于R-FCN、考虑到针对位置信息滤波的池化proposal算法对人脸检测非常合适。普通物体可能会变形、相对位置信息缺失,而人脸却是有严格的结构。同时,我们也可以在不加新的卷积核而放置其他大小的anchor,我们也可以在分数位置上旋转anchor并在pool时使用双线性插值。推断时我们还可以在生成的RoI的基础上迭代以提高定位的精确性。我们的网络称为FA-RPN,在WIDER和PascalFaces上都有卓越的结果。

相关工作

生成无类别RoI在CV领域研究很久了,早期用的都不是DL方法(如RCNN的selective search),在Faster-RCNN后,卷积网络就成为了默认的候选区域算法。

改进RPN。许多检测器试图一步找到物体,如SSH、SSD、RetinaNet等生成多个不同尺度的特征图并分类和回归其上的anchor。这些一步法网络思想与RPN网络类似,用特设的anchor去识别不同大小和长宽的物体,但是它们也综合了不同层的特征图。然而,网络得到最初的偏移之后没有进一步的修正。另一类别是迭代式的检测器,在这种网络中第一步也是类似RPN来去除大部分的背景。FA-RPN和这种比较类似,相反的是,它提供RPN阶段的迭代修正

人脸检测领域,anchor的选择与放置十分地重要,比如XXX。一些修正需要整个重训RPN网络。我们的框架中,可以在推断过程中选择不同尺寸的anchor、改变anchor的步长或者是加入分数anchor——因为我们的卷积核是为所有大小物体准备的。另外,一种基于pooling的设计也给了精确的空间特征。

背景

详见R-FCN相关论文。

FA-RPN网络

FA-RPN框架

放置Anchor

首先,分类不应该仅仅依靠一个高维特征而应该在对整个RoI里面的特征进行池化。因此,在训练和推断时我们对RoI都没有放置限制。只要卷积核还能学习,我们就可以在模型上用不同大小的RoI,即便没有显性用这些大小来训练。

FA-RPN在网格上有不同大小的anchor,并将超出图片范围的anchor裁剪掉。同时,当我们的anchor变大时变长也变大, s t r i d e = m a x ( c , s / d ) stride=max(c,s/d) stride=max(c,s/d)其中s是anchor面积的平方根,d是缩放因子(5),c是常数(16),以保证没有太多重叠,但是有足够的重叠保证所有物体被cover。简单放置法用三种长宽比、五种大小、相同16步长在处理800x1280时会慢上2~3倍。利用我们这种方法,在1280x1280的图片上我们将RoI数量从400,000降到100,000。增大图片这个数字也会成比例增加。只要用在pool上的时间相比于conv很少,我们就不会在表现上看出明显区别。

并不要求anchor的步长和卷积特征图一致,我们甚至可以把RoI放到两个像素之间而网络不用任何改动。这样我们可以对GT box进行数据扩增,不像RPN没有达到阈值的话就让最大重叠设置为正例。

采样

一张图片上可以放N多anchor,我们会在训练时对anchor进行采样。在RPN上使用focal loss会降低召回率,所以我们就不用了。使用了处理类别不均衡的通用方法来采样。重叠超过0.5为正,小于0.4为负样例。一个batch最多128个正/负样例。由于太容易得到简单的样本,所以我们会采集32个hard negative,它们的重叠至少是0.1。训练FA-RPN时其他的RoI都可以忽略,然而如果训练端到端的检测器,我们还需要给其他RoI打分,所以一张图片我们最多选择50,000个RoI(优先那些至少0.1重叠的RoI)。

迭代修正

最初放置的anchor期望能覆盖到所有的GT box。然而,不是所有的物体都能与一个anchor产生0.5以上的重叠,这就导致这个物体在检测器分类时所有anchor都会给出很低的分数,尤其对于小物体更容易出现这个问题,所以这个GT可能不会在top 500或1000的候选区域中出现。在FA-RPN中我们生成20000个修行区域,然后在这20000个区域中再次用相同的特征图pooling。我们认为修正后anchor会更好地定位,从而在得到的得分会更加可靠。在修正后,前1000排名的候选区域可能会变。

由于这个过程中我们只需要pooling,所以非常高效,当RoIs数接近时也极易实现。由于是纯pooling没有FC,所以迭代修正会很有效率。

速度与复杂性

非常高效,800x1280图片,在P6000GPU上只要50ms我们的网络就可以前后传播。如果用R-FCN进行完全的end to end检测,我们pool部分的运算量是随着类别数增加成比例增加的,比如100类的话就要慢100倍。但对于人脸检测来说这不成问题,即使要计算成千上万个anchor也问题不大。

尺度标准化训练

当RoI区域太小时,R-FCN就会失去其对于位置的敏感性。因为局部卷积local convolution是让RoI中每一个bin对应特征图中一片不同的区域,从而每个卷积核可以针对不同的部分。这里面隐含了前一层特征的分辨率与PSRoIPooling之后的分辨率类似的假定。否则,针对不同位置的卷积核会或多或少地从相同位置做pooling。因此,我们采用了scale normalized training,只选择性地对分辨率接近224x224的RoI进行梯度传播,并排除训练时能在其他分辨率特征上更好观察的RoI。这样,卷积核的位置敏感性得以保留,可以提升FA-RPN的性能。

数据集

我们在三个基准数据集上进行实验:WIDER、AFW和Pascal Faces。WIDER是最有挑战性的人脸公开数据集,因为其人脸尺寸多样性和遮挡问题。我们的模型均在WIDER数据集上训练,预训练时ImageNet或COCO的模型。而后两个数据集我们只用了其测试集。

实验

我们训练了一个基于ResNet-50的Faster-RCNN,并包括deformable conv和SNIP结构。FA-RPN则从conv4和conv5连接起来的特征上生成。在WIDER上我们用了三种训练分辨率(1800,2800),(1024,1440),(512,800)。SNIP范围则分别对应 [ 0 , 200 ) [0,200) [0,200) [ 32 , 300 ) [32,300) [32,300) [ 80 , ∞ ) [80,\infty) [80,),原图的短边大约为1024。我们训练了8个epoch,并在5.33个epoch处有一个stepdown。在所有实验中我们用同一学习速率以及0.0005权值衰减在8块GPU上训练,同样的学习速率与训练计划在4块GPU上。在实验中,我们用了OHEM(online hard example mining)来训练检测器中的2个FC层。对于检测器,我们在900个proposal上用了OHEM。

暂略XXX

结论

我们介绍了人脸检测的一种新的基于pooling的候选区域生成方法。并给出了anchor放置、label赋值等算法细节。FA-RPN有许多优点,比如高效迭代修正、灵活选择尺度与anchor步长、次像素anchor放置等等。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/volga_chen/article/details/85252516

智能推荐

攻防世界_难度8_happy_puzzle_攻防世界困难模式攻略图文-程序员宅基地

文章浏览阅读645次。这个肯定是末尾的IDAT了,因为IDAT必须要满了才会开始一下个IDAT,这个明显就是末尾的IDAT了。,对应下面的create_head()代码。,对应下面的create_tail()代码。不要考虑爆破,我已经试了一下,太多情况了。题目来源:UNCTF。_攻防世界困难模式攻略图文

达梦数据库的导出(备份)、导入_达梦数据库导入导出-程序员宅基地

文章浏览阅读2.9k次,点赞3次,收藏10次。偶尔会用到,记录、分享。1. 数据库导出1.1 切换到dmdba用户su - dmdba1.2 进入达梦数据库安装路径的bin目录,执行导库操作  导出语句:./dexp cwy_init/[email protected]:5236 file=cwy_init.dmp log=cwy_init_exp.log 注释:   cwy_init/init_123..._达梦数据库导入导出

js引入kindeditor富文本编辑器的使用_kindeditor.js-程序员宅基地

文章浏览阅读1.9k次。1. 在官网上下载KindEditor文件,可以删掉不需要要到的jsp,asp,asp.net和php文件夹。接着把文件夹放到项目文件目录下。2. 修改html文件,在页面引入js文件:<script type="text/javascript" src="./kindeditor/kindeditor-all.js"></script><script type="text/javascript" src="./kindeditor/lang/zh-CN.js"_kindeditor.js

STM32学习过程记录11——基于STM32G431CBU6硬件SPI+DMA的高效WS2812B控制方法-程序员宅基地

文章浏览阅读2.3k次,点赞6次,收藏14次。SPI的详情简介不必赘述。假设我们通过SPI发送0xAA,我们的数据线就会变为10101010,通过修改不同的内容,即可修改SPI中0和1的持续时间。比如0xF0即为前半周期为高电平,后半周期为低电平的状态。在SPI的通信模式中,CPHA配置会影响该实验,下图展示了不同采样位置的SPI时序图[1]。CPOL = 0,CPHA = 1:CLK空闲状态 = 低电平,数据在下降沿采样,并在上升沿移出CPOL = 0,CPHA = 0:CLK空闲状态 = 低电平,数据在上升沿采样,并在下降沿移出。_stm32g431cbu6

计算机网络-数据链路层_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏8次。数据链路层习题自测问题1.数据链路(即逻辑链路)与链路(即物理链路)有何区别?“电路接通了”与”数据链路接通了”的区别何在?2.数据链路层中的链路控制包括哪些功能?试讨论数据链路层做成可靠的链路层有哪些优点和缺点。3.网络适配器的作用是什么?网络适配器工作在哪一层?4.数据链路层的三个基本问题(帧定界、透明传输和差错检测)为什么都必须加以解决?5.如果在数据链路层不进行帧定界,会发生什么问题?6.PPP协议的主要特点是什么?为什么PPP不使用帧的编号?PPP适用于什么情况?为什么PPP协议不_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输

软件测试工程师移民加拿大_无证移民,未受过软件工程师的教育(第1部分)-程序员宅基地

文章浏览阅读587次。软件测试工程师移民加拿大 无证移民,未受过软件工程师的教育(第1部分) (Undocumented Immigrant With No Education to Software Engineer(Part 1))Before I start, I want you to please bear with me on the way I write, I have very little gen...

随便推点

Thinkpad X250 secure boot failed 启动失败问题解决_安装完系统提示secureboot failure-程序员宅基地

文章浏览阅读304次。Thinkpad X250笔记本电脑,装的是FreeBSD,进入BIOS修改虚拟化配置(其后可能是误设置了安全开机),保存退出后系统无法启动,显示:secure boot failed ,把自己惊出一身冷汗,因为这台笔记本刚好还没开始做备份.....根据错误提示,到bios里面去找相关配置,在Security里面找到了Secure Boot选项,发现果然被设置为Enabled,将其修改为Disabled ,再开机,终于正常启动了。_安装完系统提示secureboot failure

C++如何做字符串分割(5种方法)_c++ 字符串分割-程序员宅基地

文章浏览阅读10w+次,点赞93次,收藏352次。1、用strtok函数进行字符串分割原型: char *strtok(char *str, const char *delim);功能:分解字符串为一组字符串。参数说明:str为要分解的字符串,delim为分隔符字符串。返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。其它:strtok函数线程不安全,可以使用strtok_r替代。示例://借助strtok实现split#include <string.h>#include <stdio.h&_c++ 字符串分割

2013第四届蓝桥杯 C/C++本科A组 真题答案解析_2013年第四届c a组蓝桥杯省赛真题解答-程序员宅基地

文章浏览阅读2.3k次。1 .高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记_2013年第四届c a组蓝桥杯省赛真题解答

基于供需算法优化的核极限学习机(KELM)分类算法-程序员宅基地

文章浏览阅读851次,点赞17次,收藏22次。摘要:本文利用供需算法对核极限学习机(KELM)进行优化,并用于分类。

metasploitable2渗透测试_metasploitable2怎么进入-程序员宅基地

文章浏览阅读1.1k次。一、系统弱密码登录1、在kali上执行命令行telnet 192.168.26.1292、Login和password都输入msfadmin3、登录成功,进入系统4、测试如下:二、MySQL弱密码登录:1、在kali上执行mysql –h 192.168.26.129 –u root2、登录成功,进入MySQL系统3、测试效果:三、PostgreSQL弱密码登录1、在Kali上执行psql -h 192.168.26.129 –U post..._metasploitable2怎么进入

Python学习之路:从入门到精通的指南_python人工智能开发从入门到精通pdf-程序员宅基地

文章浏览阅读257次。本文将为初学者提供Python学习的详细指南,从Python的历史、基础语法和数据类型到面向对象编程、模块和库的使用。通过本文,您将能够掌握Python编程的核心概念,为今后的编程学习和实践打下坚实基础。_python人工智能开发从入门到精通pdf

推荐文章

热门文章

相关标签