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
我们首先通过centripetalnet pipeline得到候选角点,然后再通过centripetal shift算法进行高质量的角点对。
然后通过cross-star deformable convolution能够产生自适应的的feature,去丰富角点位置的视觉特征。而它的offset field是从角点与它们的中心来学习到的。这种方式,能够对改进centripetal shift module非常重要。
最后增加实例级分析来改善检测精度。
注:它的意思是说,形变卷积的offset filed是通过是从角点与它们的中心单独学习到的。与后面的loss有关系。
注:先来看下这个网络结果,先由Hourglass网络组成backbone,后面由三个分支组成,一个左上角点,另一个是右下角点,还一个是实例分割。
图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是要预测的
为了匹配角点,我们设计了基于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
由于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为
这个很能影响网络的性能,设置成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.