论文是发表在 I C C V 2019 {\rm ICCV\ 2019} ICCV 2019上的一篇基于 A n c h o r {\rm Anchor} Anchor- F r e e {\rm Free} Free的目标检测论文。该论文是基于对上一篇介绍的论文 C o r n e r N e t {\rm CornerNet} CornerNet的改进。我们知道 C o r n e r N e t {\rm CornerNet} CornerNet中引入嵌入向量的概念来判断两个角点是否配对,而本论文的思路是额外检测一个关键点,即使用中心点来辅助角点对的匹配。实验结果为该模型在 M S C O C O {\rm MS\ COCO} MS COCO数据集上的 A P {\rm AP} AP为 47.1 % {\rm 47.1\%} 47.1%。论文原文 源码
作者指出,基于关键点的目标检测算法通常会产生错误的目标边界框,这是由于在生成边界框时没有充分利用域内的信息。基于 C o r n e r N e t {\rm CornerNet} CornerNet,作者提出了 C e n t e r N e t {\rm CenterNet} CenterNet。 C o r n e r N e t {\rm CornerNet} CornerNet通过检测框的左上角和右下角角点来寻找合适的边界框,而 C e n t e r N e t {\rm CenterNet} CenterNet通过额外引入一个中心点的检测来提高生成边界框的质量。同时,论文提出了 C a s c a d e P o o l i n g {\rm Cascade\ Pooling} Cascade Pooling(级联角点池化)和 C e n t e r P o o l i n g {\rm Center\ Pooling} Center Pooling(中心池化),它们用于丰富两个检测角点的信息,以及增强获取来自域内的信息。 C o r n e r N e t {\rm CornerNet} CornerNet的相关介绍可参考这里。
论文贡献:(一)提出一种新的基于关键点的 A n c h o r {\rm Anchor} Anchor- F r e e {\rm Free} Free目标检测方法,论文的提出主要是对 C o r n e r N e t {\rm CornerNet} CornerNet的改进;(二)指出在基于关键点的检测算法应充分利用生成域内的信息,可以看到后面的诸多论文都使用了这一思想;(三)提出级联角点池化和中心池化来丰富两个检测角点和生成域内的信息。
作者首先指出 A n c h o r {\rm Anchor} Anchor- B a s e d {\rm Based} Based目标检测方法的局限性,主要是 A n c h o r {\rm Anchor} Anchor的超参数设置以及正负样本不均衡的问题。然后指出 C o r n e r N e t {\rm CornerNet} CornerNet提出一种全新的思路,用于解决有关 A n c h o r {\rm Anchor} Anchor的问题。但同时也指出, C o r n e r N e t {\rm CornerNet} CornerNet在生成边界框的时候受限于检测的角点对,即如果生成角点对的质量够高,则对应的边界框的质量也高;反之,则会产生错误的边界框。下图是 C o r n e r N e t {\rm CornerNet} CornerNet中的一些错误检测结果:
观察上述结果图,作者得出结论:在生成边界框是不能仅依靠角点对的信息,还要充分利用由角点生成的区域内的信息。因此,论文提出的 C e n t e r N e t {\rm CenterNet} CenterNet是对 C o r n e r N e t {\rm CornerNet} CornerNet的改进,使模型能够自行判断生成边界框的正确性。 C e n t e r N e t {\rm CenterNet} CenterNet的关注点在于由角点生成的框的中心区域。作者指出,如果预测的边界框同标注框有很大的交并比,即该预测框的质量较高,那么该预测框的中心区域应该包含中心关键点。根据图 2 2 2中的第二行我们可以观察到,第一列的图产生三个可能的检测结果,但如果根据上一条观点,只有一个检测框符合条件。同时,为了提高检测角点和中心点的质量,作者提出级联角点池化和中心池化改善上述关键点的生成。二者的具体内容请查看后文。
相关工作部分,作者首先列举了经典的两阶段目标检测算法如 R {\rm R} R- C N N {\rm CNN} CNN系列、 S P P {\rm SPP} SPP- N e t {\rm Net} Net、 R {\rm R} R- F C N {\rm FCN} FCN、 C a s c a d e R {\rm Cascade\ R} Cascade R- C N N {\rm CNN} CNN等和一阶段目标检测算法如 Y O L O {\rm YOLO} YOLO系列、 S S D {\rm SSD} SSD、 R O N {\rm RON} RON、 R e f i n e D e t {\rm RefineDet} RefineDet等,同时本文的主要工作来源于对 C o r n e r N e t {\rm CornerNet} CornerNet改进,其相关内容可以参考这里。
上图是 C o r n e r N e t {\rm CornerNet} CornerNet在 M S C O C O {\rm MS\ COCO} MS COCO数据集上的实验结果, F D {\rm FD} FD表示误检率。结合结果我们可以看到, C o r n e r N e t {\rm CornerNet} CornerNet对小目标的检测不具有鲁棒性,这与在对我们对 C o r n e r N e t {\rm CornerNet} CornerNet的总结时的观点一致。作者指出产生上述结果的主要原因是, C o r n e r N e t {\rm CornerNet} CornerNet不能评估产生边界框的质量,即没有对生成的边界框作进一步处理。作者首先考虑的解决办法是将 C o r n e r N e t {\rm CornerNet} CornerNet改造成一个两阶段算法,额外添加一个阶段单独处理生成的边界框。但由于这回引入大量额外的计算,作者并没有采用。作者采用的另一种方案,即 C e n t e r N e t {\rm CenterNet} CenterNet。
如图 4 {\rm 4} 4是 C o r n e r N e t {\rm CornerNet} CornerNet的整体检测思路。首先输入图像经过骨干网络得到特征图,然后由卷积产生两个分支,分别通过级联焦点池化和中心池化产生角点的热图和中心点的热图。角点通过嵌入向量和偏移调整,中心点通过偏移调整。具体地,首先使用 C o r n e r N e t {\rm CornerNet} CornerNet中的方法产生 t o p {\rm top} top- k k k个预测框,然后按照以下流程过滤掉不合理的边界框: ( 1 ) {\rm (1)} (1)根据置信度选取 t o p {\rm top} top- k k k个中心点; ( 2 ) {\rm (2)} (2)将这些中心点映射回原图; ( 3 ) {\rm (3)} (3)为每个预测框定义一个中心区域,然后判断中心关键点是否位于该中心区域,如果是,则保留该预测框,同时其置信度设置为两个角点和中心点三者置信度的平均值;否则丢弃它。
由以上过程我们可以观察到,预测框的中心区域的大小至关重要。举例来说,如果在检测小目标时设置的预测框的中心区域太小,因为小目标的边界框和中心点在映射时本来就存在偏移,这会使得很多正样本被丢弃;在检测大目标时设置的预测框的中心区域太大,因为偏移产生的误差相对整个目标来说很小,这会造成中心关键点落入很多负样本的中心区域内。直观上,我们需要针对较小的边界框生成较大的中心区域、针对较大的边界框生成较小的中心区域。论文的设计思路是根据各角点和中心点的坐标信息生成自适应大小的边界框。令 i i i表示某个边界框, j j j表示对应生成的中心区域。 t l x \rm tl_x tlx、 t l y \rm tl_y tly和 b r x \rm br_x brx、 b r y \rm br_y bry分别表示边界框左上角和右下角的坐标, c t l x \rm ctl_x ctlx、 c t l y \rm ctl_y ctly和 c b r x \rm cbr_x cbrx、 c b r y \rm cbr_y cbry分别表示中心区左上角和右下角的坐标,它们满足如下关系式:
{ c t l x = ( n + 1 ) t l x + ( n − 1 ) b r x 2 n c t l y = ( n + 1 ) t l y + ( n − 1 ) b r y 2 n c b r x = ( n − 1 ) t l x + ( n + 1 ) b r x 2 n c b r y = ( n − 1 ) t l y + ( n + 1 ) b r y 2 n (1) \left\{ \begin{aligned} &{\rm ctl_x}=\frac{(n+1){\rm tl_x}+(n-1){\rm br_x}}{2n}\\ &{\rm ctl_y}=\frac{(n+1){\rm tl_y}+(n-1){\rm br_y}}{2n}\\ &{\rm cbr_x}=\frac{(n-1){\rm tl_x}+(n+1){\rm br_x}}{2n}\\ &{\rm cbr_y}=\frac{(n-1){\rm tl_y}+(n+1){\rm br_y}}{2n}\\ \end{aligned} \right.\tag{1} ⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧ctlx=2n(n+1)tlx+(n−1)brxctly=2n(n+1)tly+(n−1)brycbrx=2n(n−1)tlx+(n+1)brxcbry=2n(n−1)tly+(n+1)bry(1)
其中 n n n的取值为 3 3 3和 5 5 5,分别对应于边界框的尺寸小于和大于 150 150 150,如下图:
中心池化的提出用于解决寻找目标几何中心关键点的问题。如图 6 6 6中的子图 1 1 1所示,为了确定热图上某点是否为中心关键点,逐像素地寻找点所处位置的水平方向和垂直方向的最大值,然后将二者相加。这样中心池化有助于增强中心关键点的响应,最后根据像素值的大小确定该点是否为我们寻找的中心关键点。
先来回忆 C o r n e r N e t {\rm CornerNet} CornerNet中寻找角点的过程,如上图中的子图 2 2 2所示,角点池化利用所在位置的水平方向和垂直方向的最大响应来定位角点。作者指出,角点池化的方式对边界框的边界产生很大的依赖性,并提出寻找角点时应充分考虑框内部的信息,即论文提出的级联角点池化。如上图中的子图 3 3 3所示,首先沿着边界框的边界框寻找最大响应的位置,然后在找到的位置处往边界框的内部扫描找到最大值,最后将两个最大值相加作为对应边界位置处的值。然后通过角点池化的方式找到相应角点,这样级联角点池化过程同时利用了边界框的边界信息和边界框的内部信息。
另外,论文中提出的中心池化和级联角点池化均可以通过组合不同方向上的角点池化实现,如下图所示。如第一个虚线框内的中心池化过程而言,我们可以同故宫组合四个方向上的池化结果得到中心池化的结果。如第二个虚线框内的顶部级联角点池化而言,它可以通过首先在上边界找到最大响应位置,然后组合垂直方向池化的结果即得到顶部级联池化的结果。
C e n t e r N e t {\rm CenterNet} CenterNet中损失函数的定义参考 C o r n e r N e t {\rm CornerNet} CornerNet,其具体形式如下:
L = L d e t c o + L d e t c e + α L p u l l c o + β L p u s h c o + γ ( L o f f c o + L o f f c e ) (2) \rm L=L_{det}^{co}+L_{det}^{ce}+αL_{pull}^{co} +βL_{push}^{co}+γ(L_{off}^{co}+L_{off}^{ce})\tag{2} L=Ldetco+Ldetce+αLpullco+βLpushco+γ(Loffco+Loffce)(2)
L c e t ∗ {\rm L_{cet}^*} Lcet∗表示角点和中心关键点检测时的损失函数, L p u l l c o {\rm L_{pull}^{co}} Lpullco和 L p u s h c o {\rm L_{push}^{co}} Lpushco表示在角点匹配时的损失函数, L o f f ∗ {\rm L_{off}^*} Loff∗表示角点和中心关键点偏移时的损失函数。损失函数的由来可参对 C o r n e r N e t {\rm CornerNet} CornerNet的介绍。
由结果可知, C e n t e r N e t {\rm CenterNet} CenterNet的各项检测指标在一阶段目标检测算法中均达到最佳。
上图是关于 C o r n e r N e t {\rm CornerNet} CornerNet和 C e n t e r N e t {\rm CenterNet} CenterNet在各种条件下误检率的对比。由图可知, C e n t e r N e t {\rm CenterNet} CenterNet在各项检测指标上均优于 C o r n e r N e t {\rm CornerNet} CornerNet。但同时我们也可以观察到小目标的检测仍存在着较大的问题, C e n t e r N e t {\rm CenterNet} CenterNet仍没有有效改善基于关键点的目标检测算法对于小目标检测的问题。
上图是关于 C e n t e r N e t {\rm CenterNet} CenterNet中创新点的实验结果对比, C R E {\rm CRE} CRE、 C T P {\rm CTP} CTP和 C C P {\rm CCP} CCP依次表示引入中心区域的操作、中心池化和级联角点池化池化,由结果可以观察到,各创新点均对最后的实验结果有提升效果。
上图就是否使用标注信息获取边界框的中心而直接作为中心关键点来过滤无效边界框。由结果可知,论文的方法可以得到更佳的检测结果。
论文的主要贡献是对 C e n t e r N e t {\rm CenterNet} CenterNet的改进,利用生成边界框内部的信息来筛选出高质量的边界框,同时提出中心池化和级联角点池化来改善各关键点的生成。最后作者指出,文中还指出可以给一阶段检测算法,如 C e n t e r N e t {\rm CenterNet} CenterNet等,添加一个判别器用于进一步筛选预测框而使其具备两阶段目标检测算法的能力。一方面可以提高模型的检测性能,另一方面可以减少不必要的额外开销。