必威体育Betway必威体育官网
当前位置:首页 > IT技术

Consistent Optimization for Single-Shot Object Detection - 你的anchor用对了吗?

时间:2019-08-21 18:14:15来源:IT技术作者:seo实验室小编阅读:59次「手机版」
 

consistent


论文名称:Consistent Optimization for Single-Shot Object Detection

作者:Tao Kong & fuchun Sun & Huaping Liu & Yuning Jiang & Jianbo Shi

论文链接:https://arxiv.org/abs/1901.06563

作者解读:https://zhuanlan.zhihu.com/p/55416312


先上一张图,下图为论文中提供的retinaNet加入了Consistent Optimization之后的效果,在COCO数据集上,AP平均提高1个百分点,很稳,也说明了本文方法的有效性,下面一起来学习一下这篇文章吧。

简要概述文章精华

本篇论文中,作者提出在one stage目标检测中影响网络精度的一个原因在于优化的目标与inference设置的不一致性(misalignment between the optimization target and inference configurations),解释来说就是,现在流行的目标检测方法,一般会有两个分支,一个分类,一个坐标框回归,而这两个分支往往是独立的,都是对原始anchor进行处理,这就会带来一个问题,我们在进行分类的时候,使用的是原始的anchor,而在坐标框回归后,很可能回归后的anchor与原始anchor已经产生了不同,这样使用原始anchor的分类结果作为回归后的anchor的分类得分就不准确了,本篇论文就是围绕着解决这个问题来进行的。乍一看本篇文章,感觉与Cascade RCNN有点像,采用的方法同样是对网络输出的结果进行refine,来达到提升网络精度的效果,但是其出发点是不同的,Cascade R-CNN的出发点是解决IOU阈值的设置带来的噪声问题,而consistent optimization的出发点是解决分类anchor与回归后的anchor不一致的问题。并且consistent optimization方法只是修改了RetinaNet网络的loss,改动不大,整体上时间消耗也没有增加,原则上说,其也不算是cascade方法,只是思想相近而已,但是本方法的实用性还是很强的。


文章详细解析

首先,为了证明存在上面提到的不一致性的问题,作者进行了实验分析,分析结果如下图figure 3,可以发现,Input IOU在[0.3,0.5]之间的anchor,经过回归之后,已经变到[0.5,0.85],而在网络训练的时候,IOU在0.4以下是被当做负样本的,显然,强行将anchor的分类得分代表坐标回归后的anchor的得分是有问题的。

另外论文中,作者指出,当两个目标交叉在一起的时候,回归器容易产生疑惑。如下图Figure2所示,红框和黄框对应的类别都是bicycle,但是由于人与自行车交叠在一起,黄框在进行回归的时候,容易误回归到人,但如果它的分类标签还是自行车的话,就可能出现问题,如Figure2(b)所示,结果黄框的score比红框还高,这就容易导致红框在NMS的时候被干掉了,影响了目标检测的精度。

另外作者同时分析了在RetinaNet上面对于不同的IOU的output,输出的平均的score及其方差,以及输出的output IOU的均值及其方差,实验结果如下图Figure 5所示,根据实验结果可以发现output的IOU与output score是呈正相关的,但是图(b)显示,随着Output IOU的增大,其标准差也在增长,这说明检测器对于负样本更加的鲁棒,对正样本波动比较大,但是我们希望其对正样本也具有更强的稳定性,红线是采用的consistent方法的结果,虽然没有完全解决问题,但是明显效果要好一些,符合我们的预期。

说了这么多consistent的效果,你一定很想知道consistent到底是怎么做的,下面我们就来详细学习一下。

其实,解决方法也很简单,既然anchor进行坐标框回归之后,与原来的anchor相差较大,那么我们直接对回归后的坐标框再进行一次处理就可以了。

这样做的可选的方案其实还不少呢,如下图Figure4所示,其中图(b)是cascade rcnn的方式,图(c)是cascade rcnn的变体,图(d)是作者设计的consistent optimization结构,都可以达到目的。

这里先说一下作者的结构(肯定这个是最好的),在作者设计的结构中,并没有增加额外的head,不增加额外的计算,仅仅是在原有的模型基础上,修改了网络的loss,将回归后的anchor与其更新后的ground truth的loss也加入到网络的loss中。

分类loss修改如下,i代表的是anchor的index,ci代表的是预测的概率,ci*代表的是代表的是原anchor对应的ground truth,ci+代表的是refined anchor对应的ground truth。并且作者指出,其实只使用refined anchor来训练网络已经可以得到更好的表现了,组合这两个loss一起,可以使得训练的结果更加的稳定

为了保持与分类的一致性,检测的loss修改如下:其中ti0t_i^0ti0​是原始anchor输出的offsetti1t_i^1ti1​是refined anchor的输出offset,tt^*t∗和t+t^+t+分别是其对应的ground truth

讲到这你可能还不是特别理解网络到底是怎么做的,我在详细讲一下,最简单的方法,我们将优化后的anchor的gt交给分类,然后利用上面的分类loss进行训练,作者说明,这个方法是有效的,这个应该理解,再进一步的,就是作者推荐的,不仅仅是将优化后的anchor交给分类,坐标回归也同样进行两次,即在第一次回归的基础上,再进行一次回归(我猜想这就可以解决前面提到的第二个问题,容易产生混淆的问题),最终给出结果,至于怎么回归两次,其实就是在倒数第二层输出回归offset的时候,多输出4个offset,作为第二次的结果,而这4个的gt是第一次优化后anchor重新求的gt。

为什么最终作者选择了那个结构呢?主要原因还在于,这个结构的效果在这几个中是最好的。


更多的实验分析

  • 不同设计结构的效果对比

观察表1可以发现,使用cascade方式,虽然加入了更多的参数以及计算量,但是并没有增加AP,相反作者这种没有增加计算量的方法却取得了较好的效果。

这个实验也说明了,效果的改善并不是因为更多的参数或者结构的设计,而是如何能将训练器训练的更好

并且对于,Cascade RCNN这种级联的方式,在two stage方法中,在anchor调整了之后,可以利用RoiPooling方式对目标区域重新提取特征,具有一定的效果,但是在one stage方法中,由于是采用卷积来联系起anchor与其gt,在anchor调整了之后,仍然是利用卷积去提取特征,只是gt做了修改而已,这样效果其实是有限的,网络较难学习到其内在的变换

  • 那是不是可以多refined几次,stage是不是越多越有效呢?

作者同样进行了实验,如下:在实验中,作者分别对比了不同stage下的模型效果,并且对不同的stage,设置了不同的IOU阈值,第二个stage的正负样本IOU阈值分别为0.6,0.5,第三个stage的正负样本阈值分别为0.7,0.6,实验结果如下表,第一行是baseline,第二行是进行两次的classification,可以发现,效果提升了大约0.8个百分点,实验结果发现,进行2次分类加2次回归的实验效果是最好的,进一步增加stage,下过反而下降了,并且第三行结果显示(第三行带星号,代表的是inference时候只进行一次的回归),结果仍然提升了大约1个点,进一步说明了算法的有效性。

作者同样对比了对于不同输入尺度的模型效果,结果如下表:

可以发现,在使用了consistent optimization之后,基本上AP可以提高一个百分点左右,增大图像的尺度还是有效果的,图像大小从500增加到800之后,平均可以提高3个点左右。并且对比下图使用consistent的结果可以发现,对于大图的精度的提升是最明显的(APLAP_LAPL​平均提升了约3个百分点)。

为了进一步证明consistent方法的泛化效果,作者在SSD上面进行了实验,实验结果如下,结果是令人满意的:

与目前的state-of-the-art网络的对比,结果显示,ConRetinaNet还是很有优势的。这里的ConRetinaNet训练的时候使用了尺度的变化。加星的为使用过多预处理的技巧结果。

另外ConRetinaNet的精度比Cascade R-CNN以及基于Deformable ConvNet的faster R-CNN的效果差一点,困难在哪呢?也许Cascade RCNN就是因为可以在修改了anchor之后提取对应的feature,而Deformable ConvNet则很好的学习了物体的几何变换,不过,他们的参数也比ConRetinaNet要多一些吧。

总结

本篇文章主要总结了在目标检测中,回归后的anchor与分类的anchor会产生不一致的问题,并在此基础上设计了consistent优化,其想法其实是很简单的,实验结果也比较不错,总体的思想还是对anchor进行进一步优化,只是采用了与cascade rcnn不同的方式,本文采用了更简单的方法实现,并在在结尾作者也说了,要想进一步提高,其实引入region-based方法的anchor效果应该更好,不过那也就不是one-stage了。

相关阅读

WaitForSingleObject()函数

VC声明DWORD WaitForSingleObject(HANDLE hHandle,DWORD dwMilliseconds);参数hHandle是一个事件的句柄,第二个参数dwMilliseconds

JSONObject使用方法

1.JSONObject介绍 JSONObject-lib包是一个beans,collections,maps,java arrays和xml和JSON互相转换的包。2.下载jar包 http://fil

js 的Object.assign(),要慎用

最近也一直会用JavaScript,然后中间使用的一些组件,如Echarts 会有非常复杂的配置文件,而大部分配置可能都是一样的,所以想着写一份

JSONObject详解

JSONObject只是一种数据结构,可以理解为JSON格式的数据结构(key-value 结构),可以使用put方法给json对象添加元素。JSONObject可以很

Objection源码解析

一、简介 Objection是一个iOS中轻量级的对DI及IoC的实现,不知道DI及IoC的请移步至iOS组件通信方案,Objection只有Object-C版本,没有

分享到:

栏目导航

推荐阅读

热门阅读