【检测】Prime Sample Attention in Object Detection-程序员宅基地

技术标签: 目标检测  

Prime Sample Attention in Object Detection
作者:CUHK SenseTime Joint Lab, NTU

在目标检测中的一个普遍认知就是应该平等的对待每个sample和目标。这篇文章研究了不同的样本对于最终结果的影响。作者认为在每个minibatch中的样本既不是独立的也不是同样重要的,所以一个平均的结果并不能意味是一个更高的mAP。作者提出了Prime Sample的概念并且提出了PISA的结果,主要关注这些样本的训练过程,实验证明关注prime sample而不是hard sample对于训练来说更加有效。在MSCOCO数据集上,PISA表现的比random sampling和hard mining超过了1个百分点。

现在的目标检测办法主要用的是region-based 方法。因此region sample的选择对于检测结果来说是很重要的,然而很多的sample位于图像的背景区域,音系简单的选择所有sample或者随意选择一些是一种不合理的办法。

已经有一些研究表明主要关注一些困难的sample是一个比较有效的办法。代表的有OHEM(?)和Focal Loss。OHEM主要选择hard samples比如说有着高的loss值。Focal Loss是给loss function换了一种形式来强调difficult samples。

然而,什么才是最重要的sample呢?

这项研究提出了2个需要被重点考虑的方面:

  1. Sample不应该是独立的或者是相同重要的。本文的研究西安市,应该重点关注了那些和groundtruth有着高iou的samples。
  2. 分类和定位是相关联的。尤其是,被很好定位的samples需要以高的confidences来分类(?)

文章重点:

  1. 提出了PISA
  2. 定义了IoU-HLR
  3. 加入了classification-aware regression loss

Related Work:
Improvement of NMS with localization confidence
IoU-Net并不是完全用分类结果来做NMS,定位结果也需要。 除了传统算法中的classification和regression分支,它引入了一个其他的分支来预测sample的IoU。并且用这个预测的IoU(localization confident) 来排序所有的sample。本文和IoU-Net的主要不同有:
本文是联系两个分支而不是开发出新一个。
本文的目标不是提升NMS。 而是调查sample的重要性并且重点关注prime samples。

Sampling strategies in object detection
在目标检测中最广泛被采用的sampling scheme是random sampling。因为负样本总是比正样本多很多,所以正样本负样本见一个固定的比例可能会被设置。(?)

还有的想法是选择有着高的loss值的hard samples,但是,hard mining的目的是增加classifier的的表现能力而不是探索检测和分类的差别。

Prime Samples

mAP:
mAP的工作方式反映了对于一个目标检测器来说哪个sample更重要。
所有的bounding boxes中IoU最高的那个被认为是最重要的,并且直接影响了recall。
在对于不同物体的全部最高的IoU的bounding box中,有着最高IoU的那个更加重要

IoU Hierarchical Local Rank (IoU-HLR):
本文提出了IoU-HLR来排序在一个minibatch中sample的重要性, IoU-HLR是基于最终的sample的定位计算的,而不是regression前的bounding box的坐标,因为mAP是基于regressed sample的位置衡量的。

如下图所示,首先将所有的sample根据他们最近的objects分成不同组,然后在每个组中,根据他们的IoU降序排序得到了LoU Local Rank(IoU-LR)。然后所有的top1 LoU-LR被选出来了,然后是top2,3。。。等等。这两步的分类结果会形成在一个batch中所有样本的一个线性的命令,所以称它IoU-HLR。

在这里插入图片描述
Learn Detectors via Prime Sample Attention

如果我们只有top IoU-HLR samples进行训练,就像OHEM做的那样,mAP就会下降的很厉害因为大多数prime sample都是很容易训练的所以不能提供足够的梯度来优化classifier(为什么只是classifier?)

所以本文提出了Prime Sample Attention,一个简单有效并且可以更关注于prime samples。 PISA包括2个部分,Importancebased Sample Reweighting (ISR) and Classification Aware
Regression Loss (CARL)。 在PISA的作用下,训练进程更加偏向于prime samples而被平均对待的samples。 首先,prime sample的loss weight比其他的大,所以在这些sample上,classifier往往可以预测出更好的分数(为什么是classifier?)。第二,因为classior和regressor是通过共同的目标进行学习的,所以prime samples的分数和不重要的那些比会增加(??)。

Importance-based Sample Reweighting
在被给相同的classifier的情况下,performance的分布总是于训练样本的分布相匹配的。如果一些sample在训练数据中出现的更频繁,那么在这些sample的分类正确率就会更好(为什么是分类正确率?)hard sampling和soft sampling时改变训练数据分布的两种不同方式。Hard sampling是从所有的候选中选择一些samples来训练一个模型,然而,soft sampling是给所有的samples分配不同的权重(?)。hard可以被看作是soft的一种特殊形式,每个sample都被分配一个是0或1的loss weight(?)。

这篇文章提出了一种soft Sampling 的方法—— Importance-based Sample Reweighting (ISR), 它根据重要程度给samples分配了不同的loss weights
用线性方程可以将r_i转换为u_i,如下所示:u_i代表了class j的第i个sample的重要性值。
在这里插入图片描述
u_i 和w_i存在着一个简单的递增的关系:
在这里插入图片描述
之后,cross entropy classification loss可以被改写为:
在这里插入图片描述
n和m分别是正样本和全部样本的总量。注意到简单的增加loss weights将会改变loss的全部值和正样本负样本之间的比例,所以我们将w_i归一化到 w_i’为了保证全部正样本的loss不变。(w_i为什么不能加到regression loss中?)

Classification-Aware Regression Loss

除了re-weight classification loss 来重点关注prime samples,作者还提出了一个联合优化两个分支通过Classification-Aware Regression Loss (CARL)。CARL可以增加prime sample的分数同时降低其他的分数。Regression的质量确定了sample的重要性,并且我们希望classifier可以输出对于重要sample的更高的分数。两个分支的优化应该是相关的而不是独立的。

解决方法是让regression loss关注到classification score以至于梯度可以从regression反传到classification

p_i代表了预测到相关class的概率,

实验:
在这里插入图片描述

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

智能推荐

AndroidStudio无代码高亮解决办法_android studio 高亮-程序员宅基地

文章浏览阅读2.8k次。AndroidStudio 升级到 4.2.2 版本后,没有代码高亮了,很蛋疼。解决办法是:点开上方的 File,先勾选 Power Save Mode 再取消就可以了。_android studio 高亮

swift4.0 valueForUndefinedKey:]: this class is not key value coding-compliant for the key unity.'_forundefinedkey swift4-程序员宅基地

文章浏览阅读1k次。使用swift4.0整合Unity出现[ valueForUndefinedKey:]: this class is not key value coding-compliant for the key unity.'在对应属性前加@objc 即可。或者调回swift3.2版本_forundefinedkey swift4

Spring Security2的COOKIE的保存时间设置_springsecurity 设置cookie失效时间-程序员宅基地

文章浏览阅读1.3k次。http auto-config="true" access-denied-page="/common/403.htm"> intercept-url pattern="/login.**" access="IS_AUTHENTICATED_ANONYMOUSLY"/> form-login login-page="/login.jsp" defau_springsecurity 设置cookie失效时间

view滑动冲突解决实战篇2(外部拦截法)_viewpage2外部拦截事件-程序员宅基地

文章浏览阅读1.1k次。继上篇内部拦截法需求还是跟上篇一样。只不过这次用外部拦截法来解决;只要在父容器添加如下代码就可以解决了滑动冲突,很简单,套模板就行 // 分别记录上次滑动的坐标(onInterceptTouchEvent) private int mLastXIntercept = 0; private int mLastYIntercept = 0; @Override public bo_viewpage2外部拦截事件

汇编 堆栈 变量存储 指针_汇编语言栈指针-程序员宅基地

文章浏览阅读2.5k次,点赞7次,收藏9次。本文章系作者原创,未经许可,不得转载。汇编 堆栈 变量存储 指针先说栈的概念,栈其实也是一种。。。。。先说内存的概念吧。。。。。额 先说计算机吧,简单来说的话,可以把计算机理解成由CPU,内存,硬盘组成,而CPU内部又包括一种叫做内部寄存器的东西,包括 数据寄存器: AX,BX,CX,DX; 段寄存器: CS,DS,ES,SS; 指针与变址寄存器SP,BP,SI,DI; ..._汇编语言栈指针

架构师之路:从码农到架构师你差了哪些_web架构师-程序员宅基地

文章浏览阅读1w次,点赞14次,收藏56次。转载自 架构师之路:从码农到架构师你差了哪些 Web应用,最常见的研发语言是Java和PHP。 后端服务,最常见的研发语言是Java和C/C++。 大数据,最常见的研发语言是Java和Python。 可以说,Java是现阶段中国互联网公司中,覆盖度最广的研发语言,掌握了Java技术体系,不管在成熟的大公司,快速发展的公司,还是创业阶段的公司,都能有立足之地。有..._web架构师

随便推点

超级简单的Python爬虫入门教程(非常详细),通俗易懂,看一遍就会了_爬虫python入门-程序员宅基地

文章浏览阅读7.3k次,点赞6次,收藏36次。超级简单的Python爬虫入门教程(非常详细),通俗易懂,看一遍就会了_爬虫python入门

python怎么输出logistic回归系数_python - Logistic回归scikit学习系数与统计模型的系数 - SO中文参考 - www.soinside.com...-程序员宅基地

文章浏览阅读1.2k次。您的代码存在一些问题。首先,您在此处显示的两个模型是not等效的:尽管您将scikit-learn LogisticRegression设置为fit_intercept=True(这是默认设置),但您并没有这样做statsmodels一;来自statsmodels docs:默认情况下不包括拦截器,用户应添加。参见statsmodels.tools.add_constant。另一个问题是,尽管您处..._sm fit(method

VS2017、VS2019配置SFML_vsllfqm-程序员宅基地

文章浏览阅读518次。一、sfml官网下载32位的版本 一样的设置,64位的版本我没有成功,用不了。二、三、四以下这些内容拷贝过去:sfml-graphics-d.libsfml-window-d.libsfml-system-d.libsfml-audio-d.lib..._vsllfqm

vc——类似与beyondcompare工具的文本比较算法源代码_byoned compare 字符串比较算法-程序员宅基地

文章浏览阅读2.7k次。由于工作需要,要做一个类似bc2的文本比较工具,用红色字体标明不同的地方,研究了半天,自己写了一个简易版的。文本比较的规则是1.先比较文本的行数,2.再比较对应行的字符串的长度3.再比较每一个字符串是否相同。具体代码如下:其中m_basestr和m_mergestr里面存放是待比较的字符串int basecount=m_basestr.GetLength(); int mergec_byoned compare 字符串比较算法

aetna java_pom.xml-程序员宅基地

文章浏览阅读79次。xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">org.apacheapache174.0.0org.apache.atlasapache-atlas3.0.0-SNAPSHOTMetadata Management and Data Govern..._atlas.pom

生成随机数_<math.h>随机数-程序员宅基地

文章浏览阅读1.5k次。C语言中有可以产生随机数据的函数,需要添加 stdlib. h头文件与time.h头文件。首先在main函数开头加上“ srand(unsigned)time(NULL));",这个语句将生成随机数的种子(不懂也没关系,只要记住这个语句,并且知道 srand是初始化随机种子用的即可)。然后,在需要使用随机数的地方使用 rand()函数。下面是一段生成十个随机数的代码:程序代码:#incl..._随机数