天天看点

CenterNet( Keypoint Triplets for Object Detection) 学习笔记

论文: CenterNet: Keypoint Triplets for Object Detection

代码: https://github.com/Duankaiwen/CenterNet

作者: Kaiwen Duan, Song Bai, Lingxi Xie, Honggang Qi, Qingming Huang, Qi Tian

一、CenterNet的提出

在目标检测方面,基于关键点的方法(CornerNet)由于缺少对预测框内部视觉模式的感知,会产生大量的误检候选框。下表列出的是CornerNet在MS-COCO验证集中误检率(False discovery rate)。

CenterNet( Keypoint Triplets for Object Detection) 学习笔记

即使选取与ground truth的iou为很低的0.05,误检率依然可以达到32.7%;在小物体中,误检率更高,可以达到60.3%。论文中分析一种可能的原因是CornetNet没有查看候选框内的区域。这种问题的一种解决方案是采取RoI Pooling来查看(look into)候选框内区域的视觉模式,但RoI Pooling是计算昂贵的。

论文中提出了高度有效的CenterNet来探索每一个bounding box内部的视觉模式(to explore the visual patterns within each bounding box)。对于检测一个物体,CenterNet采取三元组关键点(左上点、右下点和center point),它同时提高了recall和precision。同时论文中提出了center pooling,给中心区域(central regions)提供了更有辨识度的信息,和cascade corner pooling,来增强左上corner和右下corner的信息。

二、CenterNet介绍

CenterNet在CornerNet的基础上增加了预测中心关键点(center keypoints)的分支,并在此分支引入了center pooling。在预测corner分支,提出cascade corner pooling,它是在原来corner pooling的基础上增加了感知内部信息的能力。CenterNet的整体架构图如下所示:

CenterNet( Keypoint Triplets for Object Detection) 学习笔记

接下来会介绍

  • 如何使用中心关键点辅助预测
  • center pooling
  • cascade corner pooling
  • loss函数

2.1 如何使用中心关键点辅助预测

类似于CornerNet,CenterNet在预测center keypoints时也使用了heatmap来预测中心点的偏移。

使用中心关键点辅助预测的流程如下:

  • 产生top-k的bounding box(CornerNet)
  • 根据score选出top-k的中心关键点
  • 根据预测出的offsets把这些关键点映射到输入图像
  • 对于每一个bounding box定义一个central region,检测在该central region是否存在和bounding box同类别的关键点
  • 如果在central region检测到了关键点,将会保存该bounding box,这个bounding box的score也将会是这三个关键点的平均值。
  • 如果在central region没有检测到关键点,这个bounding box将会被移除。

检测效果如Fig2所示。

central region的尺寸会影响检测结果。对于小的bounding box,其central region如果太小会导致较低的recall;对于大的bounding box,其central region如果太大会导致较低的precision。论文中提出了一种scale-aware的方法来自适应bounding box的大小。

这个方法会对小的bounding box产生一个相对较大的central region,对大的bounding box会产生一个相对小的central region。产生方式如下:

{ 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 t l y = ( n − 1 ) t l y + ( n + 1 ) b r y 2 n \begin{cases} ctl_x = \frac{(n + 1)tl_x + (n - 1)br_x}{2n} \\\\ ctl_y = \frac{(n + 1)tl_y + (n - 1)br_y}{2n} \\\\ cbr_x = \frac{(n - 1)tl_x + (n + 1)br_x}{2n} \\\\ ctl_y = \frac{(n - 1)tl_y + (n + 1)br_y}{2n} \end{cases} ⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧​ctlx​=2n(n+1)tlx​+(n−1)brx​​ctly​=2n(n+1)tly​+(n−1)bry​​cbrx​=2n(n−1)tlx​+(n+1)brx​​ctly​=2n(n−1)tly​+(n+1)bry​​​

t l x , t l y , b r x , b r y tl_x, tl_y, br_x, br_y tlx​,tly​,brx​,bry​分别表示bounding box的左上点和右下点的(x,y)坐标, c t l x , c t l y , c b r x , c b r y ctl_x, ctl_y, cbr_x, cbr_y ctlx​,ctly​,cbrx​,cbry​分别表示其产生central region的左上点和右下点的(x,y)坐标。 n n n为奇数,对于小于150和大于150的尺寸分别取3和5。其产生central region的效果如下图所示:

CenterNet( Keypoint Triplets for Object Detection) 学习笔记

2.2 Center pooling

物体的几何中心不一定传递非常具有辨识度的视觉信息,比如人的头部具有非常强的辨识信息,但人的中心关键点在人的腰部。为了解决这个问题,论文中提出了center pooling来捕获更丰富, 更具有辨识度的视觉模式。其操作如图Fig4(a)所示。

CenterNet( Keypoint Triplets for Object Detection) 学习笔记

对于每一个位置,我们从水平方向和竖直方向分别获取特征图的最大值,然后相加。

2.3 Cascade corner poolinng

Corner point通常在对象的外部,缺少局部外观特征。CornerNet采用corner pooling解决该问题,如Fig4(b)所示。但是它对边界很敏感,因为它沿着边界方向进行pooling。为了解决这个问题,让corners看到内部信息,论文提出了cascade corner pooling,如图Fig©所示。

  • 它首先沿着边界寻找最大值max1
  • 沿着边界最大值向内部寻找最大值max2
  • max1和max2相加

通过这种方式,corners捕获了边界特征和视觉模式。

center pooling 和 cascade corner pooling可以通过corner pooling实现。

2.4 Loss函数

损失函数类似于CornerNet的损失函数,这里只把它列出来,详细信息可以参考CornerNet。

L l o s s = 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 ) L_{loss} = L_{det}^{co} + L_{det}^{ce} + \alpha L_{pull}^{co} + \beta L_{push}^{co} + \gamma (L_{off}^{co} + L_{off}^{ce}) Lloss​=Ldetco​+Ldetce​+αLpullco​+βLpushco​+γ(Loffco​+Loffce​)

c o co co表示corners, c e ce ce表示centers。

CenterNet实验结果

CenterNet( Keypoint Triplets for Object Detection) 学习笔记

在单阶段检测模型里,效果最好;在双阶段检测模型里效果居中。

CenterNet的不足

检测到的每一个bounding box的视觉模式依赖于center keypoing,当center keypoing没有被检测到时,会对该bounding box的保留/移除产生影响。

继续阅读