简介
图1:论文原文
论文是发表在
I
C
C
V
2019
{\rm ICCV\ 2019}
I C C V 2 0 1 9 上的一篇基于
A
n
c
h
o
r
{\rm Anchor}
A n c h o r -
F
r
e
e
{\rm Free}
F r e e 的目标检测论文。
C
e
n
t
e
r
N
e
t
{\rm CenterNet}
C e n t e r N e t ——顾名思义,论文检测流程是先得到目标的中心点,再由中心点得到边界框,进而完成目标检测过程。 论文原文 源码
0. Abstact
论文提出一种基于关键点的目标检测算法——
C
e
n
t
e
r
N
e
t
{\rm CenterNet}
C e n t e r N e t ,将检测边界框转化为检测一个关键点,即目标的中心点。同CornerNet 一样,这避免了一系列
A
n
c
h
o
r
s
{\rm Anchors}
A n c h o r s 的操作。实验结果为该方法在
M
S
C
O
C
O
{\rm MS\ COCO}
M S C O C O 数据集上的
A
P
{\rm AP}
A P 为
47.0
%
{\rm 47.0\%}
4 7 . 0 % ,一阶段算法上表现
S
O
T
A
{\rm SOTA}
S O T A 。 论文贡献 :(一)提出一种新的
A
n
c
h
o
r
{\rm Anchor}
A n c h o r -
F
r
e
e
{\rm Free}
F r e e 目标检测方法(主要是对
C
o
r
n
e
r
N
e
t
{\rm CornerNet}
C o r n e r N e t 的改进);(二)提出两种新的池化方法用于改善关键点的生成。
1. Introduction
当前基于
A
n
c
h
o
r
{\rm Anchor}
A n c h o r 的目标检测算法在图像上生成大量
A
n
c
h
o
r
s
{\rm Anchors}
A n c h o r s ,然后通过标注信息回归
A
n
c
h
o
r
s
{\rm Anchors}
A n c h o r s 以定位目标的最终位置。这种方法通常需要大量
A
n
c
h
o
r
s
{\rm Anchors}
A n c h o r s 以确保与标注框有足够大的
I
o
U
{\rm IoU}
I o U ,而且
A
n
c
h
o
r
s
{\rm Anchors}
A n c h o r s 的大小尺寸需要人为设定。
C
o
r
n
e
r
N
e
t
{\rm CornerNet}
C o r n e r N e t 是一种基于
A
n
c
h
o
r
{\rm Anchor}
A n c h o r -
F
r
e
e
{\rm Free}
F r e e 的方法,它有效避免了上述问题且在一阶段算法上达到了
S
O
T
A
{\rm SOTA}
S O T A 。然而,
C
o
r
n
e
r
N
e
t
{\rm CornerNet}
C o r n e r N e t 的性能仍受到其不能有效获取全局信息的限制 。
C
o
r
n
e
r
N
e
t
{\rm CornerNet}
C o r n e r N e t 中每个目标边界框由一对角点构建,它不能有效地判断哪一对角点属于目标,从而对边界框的生成非常敏感。图2中展示了
C
o
r
n
e
r
N
e
t
{\rm CornerNet}
C o r n e r N e t 的一些错误检测结果,大多数检测结果都能够通过如宽高比等信息过滤掉。
图2:CornerNet检测结果
为了处理这个问题,我们对
C
o
r
n
e
r
N
e
t
{\rm CornerNet}
C o r n e r N e t 进行改进,使其能够自行识别边界框的正确性。论文提出的
C
e
n
t
e
r
N
e
t
{\rm CenterNet}
C e n t e r N e t 用于探讨建议框的中心区域。作者认为如果预测的边界框同标注框有很大的
I
o
U
{\rm IoU}
I o U 值,那么关键点在边界框的中心区域被预测为同一类别的概率也很高 (以图
2
{\rm 2}
2 说明),反之亦然。即相比于
C
o
r
n
e
r
N
e
t
{\rm CornerNet}
C o r n e r N e t ,
C
e
n
t
e
r
N
e
t
{\rm CenterNet}
C e n t e r N e t 一共预测三个关键点:两个角点和一个中心关键点。
如图2中的第二行所示。每个边界框中心的淡红色区域为边界框的中心区域,三个框的预测结果均为“马”。现在预测“马”这个类别的中心关键点,结果显示中心点只位于一个框的中心区域。则最终只保留该中心区域所在的边界框,舍弃其他预测结果。
同时,为了改善中心点和角点的检测,相应地提出了两种策略:
C
e
n
t
e
r
P
o
o
l
i
n
g
{\rm Center\ Pooling}
C e n t e r P o o l i n g 将有助于中心关键点获取目标的更多信息、感知边界框的中心区域。论文通过获取特征图的中心关键点在水平方向和垂直方向的最大和响应来预测中心关键点;
C
a
s
c
a
d
e
C
o
r
n
e
r
P
o
o
l
i
n
g
{\rm Cascade\ Corner\ Pooling}
C a s c a d e C o r n e r P o o l i n g 使
C
o
r
n
e
r
{\rm Corner}
C o r n e r 池化具有感知内部信息的能力。论文通过获取特征图的目标在边界和内部的最大和响应来预测角点。(两种池化方式的细节参考第
3
{\rm 3}
3 部分) 实验在
M
S
C
O
C
O
{\rm MS\ COCO}
M S C O C O 数据集上的
A
P
{\rm AP}
A P 为
47.0
%
{\rm 47.0\%}
4 7 . 0 % ,达到了
S
O
T
A
{\rm SOTA}
S O T A 。使用
52
{\rm 52}
5 2 层的
G
o
u
r
g
l
a
s
s
{\rm Gourglass}
G o u r g l a s s 作为基础网络,时间为
270
m
s
{\rm 270ms}
2 7 0 m s ;使用
104
{\rm 104}
1 0 4 层的
G
o
u
r
g
l
a
s
s
{\rm Gourglass}
G o u r g l a s s 作为基础网络,时间为
340
m
s
{\rm 340ms}
3 4 0 m s 。
2. Related Works
两阶段目标检测算法将目标检测分为两个阶段:提取
R
o
I
s
{\rm RoIs}
R o I s 和分类、回归
R
o
I
s
{\rm RoIs}
R o I s ,包括
R
{\rm R}
R -
C
N
N
{\rm CNN}
C N N 、
S
P
P
{\rm SPP}
S P P -
N
e
t
{\rm Net}
N e t 、
F
a
s
t
{\rm Fast}
F a s t
R
{\rm R}
R -
C
N
N
{\rm CNN}
C N N 、
F
a
s
t
e
r
{\rm Faster}
F a s t e r
R
{\rm R}
R -
C
N
N
{\rm CNN}
C N N 、
R
{\rm R}
R -
F
C
N
{\rm FCN}
F C N 、
C
a
s
c
a
d
e
{\rm Cascade}
C a s c a d e
R
{\rm R}
R -
C
N
N
{\rm CNN}
C N N 等;一阶段目标检测算法去掉提取
R
o
I
s
{\rm RoIs}
R o I s 的过程而直接分类和回归建议框,包括
Y
O
L
O
{\rm YOLO}
Y O L O 、
S
S
D
{\rm SSD}
S S D 、
R
O
N
{\rm RON}
R O N 、
R
e
f
i
n
e
D
e
t
{\rm RefineDet}
R e f i n e D e t 、
C
o
r
n
e
r
N
e
t
{\rm CornerNet}
C o r n e r N e t 等。
3. Our Approach
3.1 Baseline and Motivation
本论文是基于对
C
o
r
n
e
r
N
e
t
{\rm CornerNet}
C o r n e r N e t 的改进(
C
o
r
n
e
r
N
e
t
{\rm CornerNet}
C o r n e r N e t 的阅读见这里 )。图3列出了
C
o
r
n
e
r
N
e
t
{\rm CornerNet}
C o r n e r N e t 在
M
S
C
O
C
O
{\rm MS\ COCO}
M S C O C O 数据集上实验结果。
图3:CornerNet实验结果
表中
F
D
{\rm FD}
F D 表示
F
a
l
s
e
D
i
s
c
o
v
e
r
y
{\rm False\ Discovery}
F a l s e D i s c o v e r y ,
F
D
=
1
−
A
P
{\rm FD=1 - AP}
F D = 1 − A P 。其中
F
D
5
\rm FD_5
F D 5 、
F
D
25
\rm FD_{25}
F D 2 5 、
F
D
50
\rm FD_{50}
F D 5 0 中的数字表示设置的
I
o
U
{\rm IoU}
I o U 阈值(0.05、0.25、0.5);
F
D
S
\rm FD_S
F D S 、
F
D
M
\rm FD_M
F D M 、
F
D
L
\rm FD_L
F D L 中的
S
{\rm S}
S 、
M
{\rm M}
M 、
L
{\rm L}
L 表示目标尺寸(
S
m
a
l
l
{\rm Small}
S m a l l 、
M
e
d
i
u
m
{\rm Medium}
M e d i u m 、
L
a
r
g
e
{\rm Large}
L a r g e )。
由
F
D
S
{\rm FD_S}
F D S 的数值可知,
C
o
r
n
e
r
N
e
t
{\rm CornerNet}
C o r n e r N e t 对小目标的检测结果较差。文中指出这可能是因为
C
o
r
n
e
r
N
e
t
{\rm CornerNet}
C o r n e r N e t 不能评估边界框内部的区域(由于
C
o
r
n
e
r
N
e
t
{\rm CornerNet}
C o r n e r N e t 只是通过角点生成边界框而没有作进一步处理)。论文提出的一种可能改进方法是将
C
o
r
n
e
r
N
e
t
{\rm CornerNet}
C o r n e r N e t 设计成为两阶段算法,但是考虑到这会加大计算量,文中并没有采用。 论文提出了
C
e
n
t
e
r
N
e
t
{\rm CenterNet}
C e n t e r N e t 用于探索边界框内部的信息。相比于
C
o
r
n
e
r
N
e
t
{\rm CornerNet}
C o r n e r N e t ,
C
e
n
t
e
r
N
e
t
{\rm CenterNet}
C e n t e r N e t 一共检测三个关键点 。此外,论文还进一步使用
C
e
n
t
e
r
P
o
o
l
i
n
g
{\rm Center\ Pooling}
C e n t e r P o o l i n g 和
C
a
s
c
a
d
e
P
o
o
l
i
n
g
{\rm Cascade\ Pooling}
C a s c a d e P o o l i n g 将边界框内部的信息引入到关键点的检测过程中。
3.2 Object Detection as Keypoint Triplets
图4:CenterNet网络结构
网络结构如图4所示,输入经过
B
a
c
k
B
o
n
e
{\rm BackBone}
B a c k B o n e 后通过池化得到两个结果分别产生角点和中心关键点,用一个关键点和一对角点表示一个目标。确切地说,在
C
o
r
n
e
r
N
e
t
{\rm CornerNet}
C o r n e r N e t 的基础上嵌入一个热图用于检测中心关键点及其偏移 。然后产生
t
o
p
{\rm top}
t o p -
k
k
k 个边界框(保留分数最高的
k
k
k 个边界框,
C
e
n
t
e
r
N
e
t
{\rm CenterNet}
C e n t e r N e t 中分数的计算方法为取两个角点分数的平均值,
C
e
n
t
e
r
N
e
t
{\rm CenterNet}
C e n t e r N e t 中分数的计算方法为取三个关键点分数的平均值)。为了有效过滤掉不正确的边界框,作如下处理 :(1)根据分数得到
t
o
p
{\rm top}
t o p -
k
k
k 个中心关键点;(2)利用偏移信息将中心关键点映射回原图;(3)为每个边界框定义一个中心区域,然后检查中心关键点是否位于中心区域;(4)如果中心关键点位于中心区域,则保留该边界框,否则丢弃该边界框。 中心区域的尺寸对检测结果影响很大 。文中举例如较小的中心区域对于小的边界框有很低的召回率,较大的中心区域对大的边界框有很低的精度。 因此论文提出了一种自适应中心区域的方法用以适应边界框的大小。该方法致力于对小的边界框生成较大的中心区域,对大的边界框生成较小的中心区域。边界框用
i
i
i 表示。
t
l
x
\rm tl_x
t l x 和
t
l
y
\rm tl_y
t l y 表示
i
i
i 的左上角角点的坐标,
b
r
x
\rm br_x
b r x 和
b
r
y
\rm br_y
b r y 表示
i
i
i 的右下角角点的坐标。中心区域用
j
j
j 表示。
c
t
l
x
\rm ctl_x
c t l x 和
c
t
l
y
\rm ctl_y
c t l y 表示
j
j
j 的左上角角点的坐标,
c
b
r
x
\rm cbr_x
c b r x 和
c
b
r
y
\rm cbr_y
c b r y 表示
j
j
j 的右下角角点的坐标。上面各变量满足如下关系:
{
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
(3.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{3.1}
⎩ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎨ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎧ c t l x = 2 n ( n + 1 ) t l x + ( n − 1 ) b r x c t l y = 2 n ( n + 1 ) t l y + ( n − 1 ) b r y c b r x = 2 n ( n − 1 ) t l x + ( n + 1 ) b r x c b r y = 2 n ( n − 1 ) t l y + ( n + 1 ) b r y ( 3 . 1 )
其中
n
n
n 是一个奇数用于表示中心区域的大小。论文中
n
=
3
n=3
n = 3 和
n
=
5
n=5
n = 5 分别对应于边界框的大小小于和大于
150
{\rm 150}
1 5 0 个情况。
图5:生成中心区域
图中分别列举了
n
=
3
n=3
n = 3 和
n
=
5
n=5
n = 5 生成中心区域的情况,外面的实线框表示边界框,中间的灰色区域表示通过公式(3.1)生成的中心区域。
3.3 Enriching Center and Corner Information Center Pooling
C
e
n
t
e
r
P
o
o
l
i
n
g
{\rm Center\ Pooling}
C e n t e r P o o l i n g :论文提出的
C
e
n
t
e
r
{\rm Center}
C e n t e r 池化用于寻找物体的几何中心。如图6中的子图1,中心池化 的详细过程如下:
B
a
c
k
b
o
n
e
{\rm Backbone}
B a c k b o n e 输出一个特征图,为了确定特征图上的像素点是否是中心关键点,我们需要找到水平方向和垂直方向的最大值,然后将这些值相加。这样,中心池化有助于中心关键点的检测。
图6:池化
C
a
s
c
a
d
e
C
o
r
n
e
r
P
o
o
l
i
n
g
{\rm Cascade\ Corner\ Pooling}
C a s c a d e C o r n e r P o o l i n g :边界框的角点通常位于物体的外部,
C
o
r
n
e
r
N
e
t
{\rm CornerNet}
C o r n e r N e t 使用
C
o
r
n
e
r
{\rm Corner}
C o r n e r 池化利用沿边界方向的最大值来确定角点。但是,这会使得角点对边界产生很大的依赖性 。论文提出级联角点池化 使得角点能够从目标的中心区域提取信息。如图
6
{\rm 6}
6 中的子图
3
{\rm 3}
3 ,级联角点池化的详细过程如下:首先沿着边界框分别找到边界上的最大值(上、下、左、右四个边界),然后在最大值的位置处在边界框的内部找到最大值;最后,将这两个最大值相加。这样,级联角点池化得到的角点同时具有边界信息和内部信息。
图7:池化的实现
C
e
n
t
e
r
P
o
o
l
i
n
g
{\rm Center\ Pooling}
C e n t e r P o o l i n g 和
C
a
s
c
a
d
e
C
o
r
n
e
r
P
o
o
l
i
n
g
{\rm Cascade\ Corner\ Pooling}
C a s c a d e C o r n e r P o o l i n g 可由不同方向上的
C
o
r
n
e
r
P
o
o
l
i
n
g
{\rm Corner\ Pooling}
C o r n e r P o o l i n g 实现。 如图7所示,如(a)中所示,中心池化可由向左、向右、向上和向下的池化共同作用得到;如图(b)中所示,上级联角点池化可先由一个水平向左的池化和向上的池化共同作用得到。
3.4 Training and Inference
损失函数 定义为
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
)
.
(3.2)
\rm L=L_{det}^{co}+L_{det}^{ce}+αL_{pull}^{co} +βL_{push}^{co}+γ(L_{off}^{co}+L_{off}^{ce}).\tag{3.2}
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 ) . ( 3 . 2 )
L
d
e
t
c
o
\rm L_{det}^{co}
L d e t c o 和
L
d
e
t
c
e
\rm L_{det}^{ce}
L d e t c e 为
F
o
c
a
l
L
o
s
s
{\rm Focal\ Loss}
F o c a l L o s s ,分别用于检测角点和中心关键点;
L
p
u
l
l
c
o
\rm L_{pull}^{co}
L p u l l c o 为
“
p
u
l
l
”
{\rm “pull”}
“ p u l l ” 损失,用于最小化相同目标间嵌入向量的距离;
L
p
u
s
h
c
o
\rm L_{push}^{co}
L p u s h c o 为
“
p
u
s
h
”
{\rm “push”}
“ p u s h ” 损失,用于最大化不同目标间嵌入向量的距离;
L
o
f
f
c
o
\rm L_{off}^{co}
L o f f c o 和
L
o
f
f
c
e
\rm L_{off}^{ce}
L o f f c e 为
l
1
l_1
l 1 损失,用于预测角点和中心关键点的偏移;
α
α
α 、
β
β
β 、
γ
γ
γ 为超参数。损失函数的具体说明可见CornerNet 中损失函数的定义。
4. Experiments
图8:实验对比结果
原文还对中心区域选取、中心池化、级联角点池化等做了消融实验。
5. Conclusions
论文提出了对
C
o
r
n
e
r
N
e
t
{\rm CornerNet}
C o r n e r N e t 的改进——
C
e
n
t
e
r
N
e
t
{\rm CenterNet}
C e n t e r N e t ,检测一对角点和一个中心关键点。主要解决了一阶段目标检测算法的一类问题:没有考虑边界框的内部信息。 论文指出:论文贡献之一是使一阶段算法具备两阶段算法的能力——额外添加一个判别器 。作者认为该思想同样可以应用于其他一阶段算法。
由于没有阅读源码,本文只总结了
C
o
r
n
e
r
N
e
t
{\rm CornerNet}
C o r n e r N e t 的大体结构和信息,详细内容请阅读论文原文 。
参考
Law H, Deng J. Cornernet: Detecting objects as paired keypoints[C]//Proceedings of the European Conference on Computer Vision (ECCV). 2018: 734-750.
Duan K, Bai S, Xie L, et al. Centernet: Keypoint triplets for object detection[C]//Proceedings of the IEEE International Conference on Computer Vision. 2019: 6569-6578.
完