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的方..
《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,整体流程如下图所示
关于backbone的问题不在具体描述,可以参考《CornerNet: Detecting Objects as Paired Keypoints论文详解》
,或者查看作者公开的代码。下面只讨论一下文章的新思路。
1.1 使用三点表示一个检测框
文章采用的是左上角点,右下角点,中心点表示物体的检测框,所以文章的处理流程与CornerNet不太一样。但是角点和中心点的表示和估计方法和CornerNet一致,这里不重复说明,可以先看看《CornerNet: Detecting Objects as Paired Keypoints论文详解》。
处理流程描述如下:
- 根据网络的输出,选取分数在前k的中心预测点
- 根据中心点的offset的估计,将中心点在原图中的精确定位计算出来
- 根据预先定义的物体框中心区域,查看中心区域里是否包含上面预测的中心点。(这里提到的中心区域下面会详细说明)
- 如果满足3)条件,就保留预测的物体框。
上面提到一个中心区域的问题。看看如何定义这个中心区域,因为对于大框来说预测的中心点更大概率能落在框的中心区域,对于小框来说落在中心区域的概率更小。为了更好的适应框的大小,预测的中心点保证大小框的概率差距不那么大,这里做了如下操作。类似于roi pooling,将预测的框按照
3
∗
3
3*3
3∗3和
5
∗
5
5*5
5∗5两种情况等分,其中边框小于150的用
3
∗
3
3*3
3∗3划分,大于150的用
5
∗
5
5*5
5∗5划分。这里说的150,代码采用的是边框的长宽相乘是否大于22500来表示。
划分操作如下图所示。
1.2 丰富角点和中心点的信息
对于角点和中心点的信息丰富操作采用的是如下图的方式
中心点
通过backbone的输出的中心点预测的featuremap,为了更好的确定哪些是真的得中心点,文章提出了center pooling,如上图的a所示,通过将featuremap上的预测点在其水平和竖直方向都找到最大值,然后将两个方向的最大值相加作为预测中心点的值。
角点
不同于CornerNet,文章提出了cascade corner pooling。如上图的b和c,类似于CornerNet先从预测的角点处找到边界上的最大值,然后根据边界上的最大值在相应的方向再次寻找框内部的最大值,最后将两次的最大值相加得到角点的最终值。上面说的相应方向指的是,对于上边界、下边界、左边界、右边界的最大值点来说,分别搜索的方向是竖直向下、水平向右、竖直向上、水平向左。
从上面的描述可以可以看出这些操作可以很容易的通过CornerNet中提出的Corner pooling来扩展。通过原来的Corner pooling扩展出的两种新的pooling方式如下图所示
二、损失函数
基本和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
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)