CVPR2019论文看点:自学习Anchor原理

原论文链接:https://arxiv.org/pdf/1901.03278.pdf

CVPR2019的一篇对anchor进行优化的论文,主要将原来需要预先定义的anchor改成直接end2end学习anchor位置和size。首先anchor的定义通常为(x, y, w, h) (x, y为中心点),formulate一下:

本文所提的guided anchoring利用两个branch分别预测anchor的位置和w、h:

guided anchoring的主要内容有如下几点:
Anchor
Location Prediction

逻辑很简单,利用一个1x1的conv将输入的feature map转换成 W x H x 1的heatmap,通过卡阈值t来得到anchor可能出现的位置,在训练的时候可以通过gt的框来生成heatmap的groudtruth,negtive、positive、ignore的pixel定义论文中有比较详细的介绍。

Anchor Shape Prediction
这一部分逻辑和上一部分一样,也是通过一个1x1的conv将输入的feature map转换成W x H x 2的heatmap,只是考虑到如果直接回归w和h范围太广会比较不稳定,作者做了一定的转化将预测值约束到[-1,1],实际使用的时候再映射回去,s为feature map的stride,sigma为8:

需要注意的是和传统的anchor设置不一样的是,guider anchoring在某一个pixel下只会设置一个anchor。
这一部分的训练其实会是比较需要特别注意的地方,论文中使用来IoU
loss来监督,但是这样存在一个问题,因为这个分支本身是预测w,h的,所以IoU Loss的计算无法知道match的具体gt,作者提出的方法是sample 9组常见的w、h,这样就可以利用这9组w、h构建9个不同的anchor去和gt匹配,IoU最大的匹配gt就是当前需要去计算IoU Loss的gt,然后直接用heatmap的w、h和这个gt计算IoU Loss即可:

Anchor-Guided
Feature Adaptation

这一个模块主要是针对feature有可能和anchor不一致而提出的,因为对于原先预定义的anchor而言,每一个pixel对应位置的anchor其实都是一样的,所以也就无所谓feature的异同,但是guided
anchoring逻辑下不同的pixel有可能anchor的size差别很大,仍然像之前那样直接出cls和reg很显然是不合适的,所以作者就提出了adaptation的模块,利用deformable
conv来处理不同形状的anchor对应的feature。

论文的最后作者也提了一下因为GA-RPN可以得到很多高质量的porposal,通过提高阈值可以进一步优化检测的效果。
实验结果:

高质量 proposal 的正确打开方式

故事到这里其实也可以结束了,但是我们遇到了和之前一些改进
proposal 的
paper 里相同的问题,那就是
proposal 质量提升很多(如下图),但是在
detector 上性能提升比较有限。在不同的检测模型上,使用
Guided Anchoring 可以提升 1
个点左右。明明有很好的 proposal,但是 mAP 却没有涨很多,让人十分难受。

经过一番探究,我们发现了以下两点:1.
减少 proposal 数量,2.
增大训练时正样本的 IoU 阈值(这个更重要)。既然在 top300 里面已经有了很多高 IoU 的 proposal,那么何必用
1000 个框来训练和测试,既然
proposal 们都这么优秀,那么让
IoU 标准严格一些也未尝不可。

这个正确的打开方式基本是 独立调出来的,让
performance 一下好看了很多。通过这两个改进,在
Faster R-CNN 上的涨点瞬间提升到了
2.7 个点(没有加任何
trick),其他方法上也有大幅提升。

生成 anchor

在得到
anchor 位置和中心点的预测之后,我们便可以生成
anchor 了,如下图所示。这时的
anchor 是稀疏而且每个位置不一样的。采用生成的
anchor 取代
sliding window,AR
(Average Recall) 已经可以超过普通
RPN 4 个点了,代价仅仅是增加两个
1x1 conv。

实验结结果

原文地址:https://www.cnblogs.com/wujianming-110117/p/12506208.html

时间: 2024-07-31 14:12:38

CVPR2019论文看点:自学习Anchor原理的相关文章

如何使你的英文论文看起来更地道

很多人都会有这样的困惑,我们学了十几年英语,单词.语法.时态说起来头头是道,甚至揶揄国际友人不一定能通过我们的大学英语四.六级,可在真正的英语环境里,我们常常还是会尴尬,Chinglish总归不是阳春白雪. 语言只是交流的工具,脱口而出的英语相信大家一般能做到,如果要求高一点,用英文写作,甚至科研论文的撰写呢? 这对许多做科研的朋友来说是一个大难题,我们可以从以下几个方面入手,让你的英文论文看起来更接近原汁原味一点: 一.语言的学习不可能一蹴而就,平时的积累至关重要. 日常可以利用各种英文社交平

CVPR2019论文解读:单眼提升2D检测到6D姿势和度量形状

CVPR2019论文解读:单眼提升2D检测到6D姿势和度量形状 ROI-10D: Monocular Lifting of 2D Detection to 6D Pose and Metric Shape 论文链接地址:https://arxiv.org/pdf/1812.02781.pdf 摘要内容: 本文提供了基于端到端单目3D目标检测和度量形状检索的深度学习方法.为了在3D中提升2D检测,定位,以及缩放,提出了一种新的loss函数.不同于各自独立的优化这些数量,3D示例允许适当的度量box

网桥的自学习算法原理

网桥:在数据链路层可以用网桥设备来扩展以太网.网桥工作在数据链路层,它根据MAC 帧的目的地址对收到的帧进行存储转发和过滤.当网桥收到一个数据帧时,并不是向所有的接口转发这个数据帧,而是会进行有条件的转发(网桥会丢弃CRC检验有差错的帧以及帧长过短和过长的无效帧)再根据此帧的目的MAC地址,然后查找转发表(网桥会自己维护转发表,转发表中每一条目都记录了到达某个目的MAC地址的数据帧可以从那个接口进行转发)根据转发表中的条目逐步匹配看该从那个接口转发或是否需要丢弃该数据帧.最简单的网桥只有两个接口

[智能硬件] 3、三分钟看懂智能硬件原理——简易智能手环制作教程(包括炫酷手机客户端开发)

首先恭喜大家挺过了测试二!为什么说“挺”呢?因为测试二的难度和测试一相比有一个比较大的跳跃:首先测试一仅仅利用现有硬件模块稍加改造而DIY一个蓝牙防丢器,而测试二则要求大家具有从脑袋里的一个想法到一个全新的小设备的实现的全部能力,显然该过程不是连几根线那么简单:其次测试一对蓝牙的使用仅限于信号搜索层面,而测试二一下子深入到可靠通信的层面了,其难度可想而知:最后在测试二中客户端的设计中复杂的状态转换过程,以及嵌入式编程时需要对所使用的硬件作细致的分析,都构成了对前期基础没打牢的同学一种挑战.不过好

javascript真的是异步的吗?且看setTimeout的实现原理以及setTimeout(0)的使用场景

在今天之前我一直以为setTimeout这个函数是异步的,无意中看到了一篇关于setTimeout的文章.发现自己曾经的认识全是错误的,赶紧总结下. 先看一段代码: var start = new Date(); setTimeout(function(){ var end = new Date(); console.log("Time elapsed: ", end - start, "ms"); }, 500); while (new Date - start

Struts1——从BeanUtils看struts的实现原理

在Struts中很典型的特点就是使用了ActionForm来搜集表单数据,但是搜集到的表单数据全部都是String类型的,如果我们直接拿来使用我们会面临一个很麻烦的问题就是频繁的类型装换.Struts中使用了BeanUtils来使我们从繁重的体力劳动中解脱出来. BeanUtils的工作原理: 我们通过一个简单的例子来了解一下他最基本的使用,首先建立一个实体类Student package com.tgb.struts; import java.sql.Date; public class St

[智能硬件] 1、三分钟看懂智能硬件原理——蓝牙防丢器制作教程(包括手机应用)

1 什么是智能蓝牙防丢器 所谓智能蓝牙(Smart Bluetooth)防丢器,是采用蓝牙技术专门为智能手机设计的防丢器.其工作原理主要是通过距离变化来判断物品是否还控制在你的安全范围.主要适用于手机.钱包.钥匙.行李等贵重物品的防丢,也可用于防止儿童或宠物的走失 .[请看正版请百度:beautifulzzzz(看楼主博客园官方博客,享高质量生活)嘻嘻!!!] 图 1-1 蓝牙防丢器应用领域 2 蓝牙防丢器的主要构造 目前比较成熟的产品一般是采用蓝牙4.0技术,具有低功耗.双向防丢.自动报警等优

[智能硬件] 2、三分钟看懂智能硬件原理——智能玩具小风扇制作教程(包括手机应用开发)

恭喜大家顺利通过测试一!在测试一中我们学会了如何利用现有模块HC-05/06进行简单的连线来制作一个蓝牙防丢器,同时学习了安卓蓝牙相关的几个API并最终制作了一个自己的蓝牙防丢客户端软件.可能有些专门来看软硬结合的同学会抱怨“什么呀,感觉就是在开发安卓App嘛!“.不错!测试一的目的就是让大家通过了解硬件原理DIY一个简单的硬件,并学习如何充分利用移动端开发的特点设计一款配套的应用.除此之外楼主还悄悄地为测试二埋下了伏笔,因为测试二将会涉及利用移动端和蓝牙模块的通信功能来实现一个遥控小风扇!如果

从汇编层面看函数调用的实现原理

本文是<go调度器源代码情景分析>系列 第一章 预备知识的第6小节. 前面几节我们介绍了CPU寄存器.内存.汇编指令以及栈等基础知识,为了达到融会贯通加深理解的目的,这一节我们来综合运用一下前面所学的这些知识,看看函数的执行和调用过程. 本节我们需要重点关注的问题有: CPU是如何从调用者跳转到被调用函数执行的? 参数是如何从调用者传递给被调用函数的? 函数局部变量所占内存是怎么在栈上分配的? 返回值是如何从被调用函数返回给调用者的? 函数执行完成之后又需要做哪些清理工作? 解决了这些问题,我