CentripetalNet: Pursuing High-quality Keypoint Pairs for Object Detection解读

摘要

基于关键点的检测器得到了不错的性能,但关键点匹配错误是普遍性存在的,严重的影响了其检测器的性能。

作者通过centripetal shif将相同的类别的实例分开。CentripetalNet是预测角点的位置和向心偏移,通过向向心偏移来对齐角点的匹配。

注:这里说明,基于关键点检测器的难点是针对相同类别的实例。而这个分析来源于在公开数据集中,跑前面论文的模型,分析出的bad case。为了提点,针对普遍存在的问题,进行优化。

corner pooling通过提取bbox的边缘信息,这里为了更好的利用这一信息,设计交叉星形变卷积(cross star deformable convolution)来引导学习这种特征。

注:说明cross star deformable convolution能够更好的提取bbox的信息,为什么呢,这个是后面阅读文献的关键点。

此外,作者加入了anchor free的实例级分割作为mask module。centripetalNet在性能上,不仅优于所有(all,多霸气)的现存的anchor free的方法,还优在实例分割达到最好的效果。

注:如何做实例级分割的,这里大概想下,应该和mask rcnn差不多的思路,毕竟是主要做检测的。针对论文的用词,作者精通写论文。

 

引言

anchor-base的检测器,经过过去几年的发展,其难点在于如何手工的设计合适的anchor,并且它们还存在正负样本的不均衡的问题。

注:这里总结了anchor-base的难点,虽然是一般性认识,但很多人不一样意识到了。

为了解决这个问题,CornerNet提出了通过提取角点对(左上和右下),来得到bbox的新思路,直接引导了检测的新方向。基于角点的检测器,分为两步,分别为角点的提取和角点的匹配。该文献中,关心第二点。

注:这里引入了cornernet,并总结了方法的特点,并针对性的优化。作者很会写文章,一步步的引人入胜,逻辑清楚。

那么针对角点的匹配进行优化,那是不是我们先思考下,如何做呢?这个是发paper的要有的习惯。作者会提什么样的新颖的方法呢。想到摘要里提到的cross star 形变卷积,有利于提取边缘信息,是不是与它有关呢?如果是,又是如何体现在第二步?

大家可以先去回顾下形变卷积的论文。形变卷积的本质是对几何图形的变化进行自适应的建模,而它放在哪里,都有会性能的提升。如果还是猜不出,作者是如何用这个形变卷积,那么得好好琢磨了。

根据我们的理解,形变卷积应该对第一步的角点提取是很有帮助的,因为在摘要里说是为了改进corner pooling的。这与第二步有什么关系呢?我们在脑子里应该立刻去想,前面的论文针对角点匹配是做了什么优化。论文中也进行了对比:

图1

从图上,可以看到centernet是通过中心点来优化匹配的,而作者是通过方向来判断的,这个想法与openpose的类似。如果是我,我可能会去用PAF去做,这样会更准确,单一方向也会有问题,特别是大框里有小框。不想了,继续看下去。

cornernet和centernet主要是通过associative embedding来得到匹配点的,它们需要学习到两个角点的匹配特征。在它们的方法中,要学习同一个bbox的和不同bbox的区分能力,通过push和pull loss来让每个点进行学习,即属于同一个目标,就pull,不同的目标,就push。

注:这个与triple loss有同样的意思,这类的话题有很多论文讲了,减小类内距,增加类间距。比如传统方法[1],深度学习,如人脸识别针对loss改进的一系列文献,这里不说了。这里说下主要思路,一是改进loss,二是对数据的质量有一定的要求。

因此,在训练阶段,网络要能够学习到在所有潜在匹配点中,发现唯一的匹配点。其训练的难点在于,针对多相同的目标(如图中的相同的飞机)一起出现时,它会对outliers敏感。第二是,embedding预测是基于纹理语义信息,并没有用到位置信息。

注:这里提到了其难点是训练出现多个相同目标的情况,作者分析是因为只用到语义信息,并没有使用位置信息。那么如何使用位置信息呢?哪些论文使用了位置信息呢,Openpose使用了吗?很显然,openpose用到了,完全可以把openpose的搬过来。

基于上面的考虑,使用centripetal shift方法,同时cross-star deformable convlution模块能够让centripetal shift表现的更好。每一个角点,通过centripetal shift都能够产生一个中心点,如果是同一个bbox的角点,那么这个中心点会非常的接近。

而且不仅仅能学到更大的感受野,还能够几何结构信息。观察得到在corner pooling的输出,有cross stars现象。

cross star包括了目标的边缘信息,是因为corner pooling是通过max和sum实现的交叉星的。所以我内嵌形变卷积,来达到提取定位信息和几何信息。

注:作者的想法是因为corner pooling能够有交叉星的现象,说明有能够学习到任何结构信息,而形变卷积本身能够学习到几何信息,那么两者是否能够结合起来呢,这是他的出发点。

受到目标检测中的多任务的启发,增加实例级的分割,来改善精度。为了证明它的有效性,在MS-COCO数据集上进行验证。

CentripetalNet不仅仅比所有的现存的anchor-free的精度高,还能够在实例级分割上达到最好的效果。

注:MS-COCO说明有它的特点,标注也有多样性。

对于anchor-base的方法,需要仔细的设计anchor。而anchor-free的方法,不需要设计anchor,目前主流有两种:

1. 直接预测目标的中心。比如yolov1、densebox、unitbox。为了解决小目标,导致的低召回问题,FCOS直接训练bbox里面的所有点,检测bbox里所有点到四边的距离。

2. 预测关键点,然后组合成bbox。cornernet、deepextremecut、reppoints。需要仔细的将点集转换成bbox。而centernet增加中心点预测,能够极大改进了性能。这些方法通常有高召回,但会带着很多错误检测。其主要的挑战在于,相同目标的关键点匹配问题。

在我们的工作中,我们提出centripetal shift来编码角点之间的关系及与相关中心的空间信息。

CentripetalNet
 

图2

我们首先通过centripetalnet pipeline得到候选角点,然后再通过centripetal shift算法进行高质量的角点对。

然后通过cross-star deformable convolution能够产生自适应的的feature,去丰富角点位置的视觉特征。而它的offset field是从角点与它们的中心来学习到的。这种方式,能够对改进centripetal shift module非常重要。

最后增加实例级分析来改善检测精度。

注:它的意思是说,形变卷积的offset filed是通过是从角点与它们的中心单独学习到的。与后面的loss有关系。

注:先来看下这个网络结果,先由Hourglass网络组成backbone,后面由三个分支组成,一个左上角点,另一个是右下角点,还一个是实例分割。

preview
图3

沙漏网络的设计初衷是为了捕捉每个尺度下的信息,即需要局部信息,又需要全局信息。比如人体关键点,需要局部身体信息,还需要在全局人体信息,甚至还需要全局的背景信息。为了单独处理不同尺度的信息,使用skip layers的单个pipeline来保存每个尺度下的空间信息。如上图所示。

其很适合角点检测任务,所以一般的关键点网络里面,都有所涉及。

Centripetal Shift Module
 

其中ctx,cty,tlx,tly,brx,bry指的是bbox的中心座标、左上点和右下点。s是个常数。cs就是偏移量,取了对数。loss为smoothL1 loss。

注:文章中没有说明指的什么,但代码里写了,指定的是1或8之类常数。

假如输入500X500的图像,那么log(500/2)=2.4,最小目标像素值为16,那么log(16/2)=0.9。所以cs值的变化范围为0.9到2.4,波动并不大,能够进行训练。

其中cs和ctx,cty是要预测的

图4

为了匹配角点,我们设计了基于centripetal shifts的方法来匹配。原理是,同一个bbox的角点,共享同一个中心点。

角点是从heatmaps和local offset得到,然后针对同一类别,且满足左上与右下的位置关系的条件下,进行组合。

注:local offset是因为下采样造成座标点的损失,通过学习,尽可能的恢复其真值的,指的上图中的Otl。这个有些论文也在用,如[2]。

(3)式是直接用于训练的值,它是通过(4)得到左上和右下各自的中心点。

注:(tlx+brx)/2就是bbox ground truth的中心点,(brx-tlx)/2是bbox的宽,那个u是一个[0,1]因子,让其中心点,能够在一定的范围进行波动。其它的也是一样。

这个Rcentral是预先设置好的,就是通过bbox的ground truth,计算出来的一个中心小区域,指的是上图(c)的红色中心小区域。

实验部分,说明了bbox面积>3500的这个u为1/2.1,其它情况为1/2.4。

通过预测,能够一组式(1)的cs值,通过计算与Rcentral的IOU,可以用来计算score。值越高,代表越相近。

注:这个w是用于筛选正样本的,训练和测试中都会用到。

这个IOU有点特别,首先各角点所预测的中心点,要落到Rcentral区域中。由于有这个条件,所以是包含关系,IOU计算很简洁。

Cross-star Deformable Convolution
 

图5

由于corner pooling本身在featuremap中有cross stars的特点,如上图(a)所示,其包括了丰富的目标上下文信息,是因为使用max和sum的操作。为了得到cross star中的上下文信息,不仅需要大的感受野,还需要学习任何结构信息。

注:corner pooling只需要看下面两图就明白了。

图6
图7

我们使用cross-star-deformable convolution来加强这种feature的提取。这个在上面的原理图上有说明。

首先,将corner pooling的结果,输入到cross-star deformable convolution模块里,为了学习到cross star的几何结构信息,直接在guiding offset上进行相关目标的训练。对于左上的点,让它更加关注右下的特征,使用减小目标外的特征的提取。其效果图在图5(b)中。这样,即包括了形状,也包括了方向信息。

在进行3X3,1X1的两层卷积得到guiding shift,在此处,加入监督学习,用如下的loss。

其中的变量,参考图4。也就是说这个loss直接在形变卷积里做了。注意,这里的ground truth是下采样后的座标值。这样在featuremap的上的值,很干净了,如图5(c)所示

Instance Mask Head

为了确保检测模块能够产生proposal,我们先用一些epochs进行预训练。选择top k高的proposal,使用ROIAlign去做mask。ROIAlign的大小是14X14,mask预测的大小是28X28.

ROI后,连续使用4个3X3的卷积后,再上采样得到28X28的mask map m,训练阶段,使用交叉熵进行训练

实验

最终我们的Loss为

这个\alpha很能影响网络的性能,设置成0.05.

作者使用16个 32G NVIDIA V100GPUs进行训练的

注:真有钱

作者针对Hourglass-52训练了110epochs,Hourglass-104训练了210个epochs。网络输入大小511X511.

在测试阶段,使用pad=0进行填充。

Comparison with state-of-the-art models

从上面的结果,可以看出,相对centernet,我们的改进是在中大值目标上。原因是目标越大,偏离值越大,中心越难学。针对二阶段网络,我们的指标还是很有竞争力的。

注:w.o指的是without。你看看人家的表述,很有竞争力,前面表述的是在坐的各位anchor-free都是渣渣。

我们认为有较高的召回的原因有两个:

1. 和cornertnet相比,基于centripetal shift的匹配方式能够有效消除误检的高分框

2. 我们的匹配策略不依赖于中心检测

注:AR是平均召回的意思。第一条的意思是,减小角点的误匹配的问题。第二个是为了解释第一点。总的来说是一个意思。

从上面来看,mask分支的结果,并不是最好的。和mask rcnn相比,在强些;有ExtremeNet有相同的骨干网络,有了4.2%的AP提升。

Ablation study

Cross-star Deformable Convolution

形变卷积通常是用来特征适应其形状,同时它的主要的不同在于怎么通过offset field来得到不同的feature。

在Guided anchoring里是学习预测的anchor shapes校正到不同位置的不同anchor的形状。

AlignDet提供了更加精确的特征提取,即ROI convolution。为了能够对比,我们对每个角点回归宽高,然后应用 RoI convolution在corner pooling。这里的RoI conv能够比deformable conv提供更高精度的anchor shapes。

就能看懂下面的图了

 

 

针对RoI conv还要比deformable还好,作者在deformable的基础上增加了guiding shift,这样比RoI conv更好了。

是有两个原因:

1. 在corner pooling后,已经有了边缘的信息了,能够更好的特征提取能力了。

2. 直接回归bbox宽高,在corner location上有是不准的,以至于在ROI上无法和groundtruth进行对齐,而无anchor的没有这个问题。

注:这里,作者把它的文章的设计过程的思路进行了对比,这点非常好,我们看到了作者是如何一步步的改进过来的。

刚开始直接用形变卷积,发现并没有太好的效果,只涨了0.1个点。于是上了RoI conv,但它是学习bbox的宽高,发现宽高学的不好,于是想到加个guiding shift,在这里加入bbox的位置和方向信息,更容易的学习到几何结构信息。这个就是前面讲的部分。

Instance Segmentation Module

作者发现,增加mask多任务分支,在110epchos时,增加了0.3%,在210epchos时,增加了0.4%,但cornerNet并没有增加。这说明多任务学习,对corner的预测和关联性预测,是没什么影响的。但对centripetal shift的预测是有影响的。

注:至于为什么,不清楚,认真思考,有利于对多任务学习的理解。

注:这个是它的效果图,看起来,少了很多大的误检框了,同时也减小了些漏检。

参考文献:

[1] Qian Q, Jin R, Zhu S, et al. Fine-grained visual categorization via multi-stage metric learning[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2015: 3716-3724.

[2] Liu W, Liao S, Ren W, et al. High-level semantic feature detection: A new perspective for pedestrian detection[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2019: 5187-5196.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章