CenterNet: Keypoint Triplets for Object Detection论文详解

《CenterNet: Keypoint Triplets for Object Detection》发表于CVPR2019

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

它是之前一篇《CornerNet: Detecting Objects as Paired Keypoints》文章的改进版,与CornerNet相同的是它们都是one-stage的方法,没有引入anchor的操作。CornerNet是通过预估框的左上角点和右下角点来得到物体的预测框,但centernet认为只预测物体的角点位置并没有很好的利用框内的信息,这样容易导致误检。所以文章提出一种新的检测方式,通过预测出物体的左上角点右下角点和物体的中心点,进而来预测出物体的位置。

下面来看看文章的具体做法

一、网络结构

网络结构和CornerNet一样,采用的是hourglass作为backbone,整体流程如下图所示
CenterNet: Keypoint Triplets for Object Detection论文详解_第1张图片

关于backbone的问题不在具体描述,可以参考《CornerNet: Detecting Objects as Paired Keypoints论文详解》

,或者查看作者公开的代码。下面只讨论一下文章的新思路。

1.1 使用三点表示一个检测框

文章采用的是左上角点,右下角点,中心点表示物体的检测框,所以文章的处理流程与CornerNet不太一样。但是角点和中心点的表示和估计方法和CornerNet一致,这里不重复说明,可以先看看《CornerNet: Detecting Objects as Paired Keypoints论文详解》。

处理流程描述如下:

  1. 根据网络的输出,选取分数在前k的中心预测点
  2. 根据中心点的offset的估计,将中心点在原图中的精确定位计算出来
  3. 根据预先定义的物体框中心区域,查看中心区域里是否包含上面预测的中心点。(这里提到的中心区域下面会详细说明)
  4. 如果满足3)条件,就保留预测的物体框。

上面提到一个中心区域的问题。看看如何定义这个中心区域,因为对于大框来说预测的中心点更大概率能落在框的中心区域,对于小框来说落在中心区域的概率更小。为了更好的适应框的大小,预测的中心点保证大小框的概率差距不那么大,这里做了如下操作。类似于roi pooling,将预测的框按照 3 ∗ 3 3*3 33 5 ∗ 5 5*5 55两种情况等分,其中边框小于150的用 3 ∗ 3 3*3 33划分,大于150的用 5 ∗ 5 5*5 55划分。这里说的150,代码采用的是边框的长宽相乘是否大于22500来表示。
划分操作如下图所示。
CenterNet: Keypoint Triplets for Object Detection论文详解_第2张图片

1.2 丰富角点和中心点的信息

对于角点和中心点的信息丰富操作采用的是如下图的方式
CenterNet: Keypoint Triplets for Object Detection论文详解_第3张图片

中心点
通过backbone的输出的中心点预测的featuremap,为了更好的确定哪些是真的得中心点,文章提出了center pooling,如上图的a所示,通过将featuremap上的预测点在其水平和竖直方向都找到最大值,然后将两个方向的最大值相加作为预测中心点的值。

角点
不同于CornerNet,文章提出了cascade corner pooling。如上图的b和c,类似于CornerNet先从预测的角点处找到边界上的最大值,然后根据边界上的最大值在相应的方向再次寻找框内部的最大值,最后将两次的最大值相加得到角点的最终值。上面说的相应方向指的是,对于上边界、下边界、左边界、右边界的最大值点来说,分别搜索的方向是竖直向下、水平向右、竖直向上、水平向左。

从上面的描述可以可以看出这些操作可以很容易的通过CornerNet中提出的Corner pooling来扩展。通过原来的Corner pooling扩展出的两种新的pooling方式如下图所示
CenterNet: Keypoint Triplets for Object Detection论文详解_第4张图片

二、损失函数

基本和CornerNet相同,只是多了一个中心点的预测loss和中心点位置偏移的loss计算。公式表示如下:
L = L d e t c o + L d e t c e + α L p u l l c o + β L p c o u s h + γ ( L o f f c o + L o f f c e ) L = L^{co}_{det}+L^{ce}_{det}+\alpha L^{co}_{pull} + \beta L^{co}_push + \gamma (L^{co}_{off}+L^{ce}_{off}) L=Ldetco+Ldetce+αLpullco+βLpcoush+γ(Loffco+Loffce)

其中 L d e t c o L^{co}_{det} Ldetco L d e t c e L^{ce}_{det} Ldetce是focal loss, L p u l l c o L^{co}_{pull} Lpullco L p c o u s h L^{co}_push Lpcoush同CornerNet是计算角点匹配提出来的loss, L o f f c o L^{co}_{off} Loffco L o f f c e L^{ce}_{off} Loffce使用的是l1 loss,上式中的 α 、 β 、 γ \alpha 、 \beta 、\gamma αβγ分别取0.1、0.1、1。

原理基本就这些,更多的实验结果可以查看原文。

欢迎加入Object Detection交流,群聊号码:910457072

你可能感兴趣的:(机器学习,机器学习)