论文笔记:CornerNet—Detecting Objects as Paired Keypoints
CornerNet: Detecting Objects as Paired Keypoints
1、摘要
作者提出了一种 s i n g l e − s t a g e single-stage single−stage 检测器,将目标边界框看作一对关键点(左上和右下)的检测。不需要设计一组 a n c h o r anchor anchor,作者提出新的池化方法 c o r n e r p o o l i n g corner~pooling corner pooling 来帮助网络更好地定位角点。
使用 a n c h o r anchor anchor 存在两个主要缺陷:
- 采用大量的 a n c h o r anchor anchor 导致严重的正负样本不平衡问题
- a n c h o r anchor anchor 的使用引入了大量超参数
三处创新点:
- 将目标检测转化为角点检测问题,并利用嵌入矢量对角点分组
- 设计角点池化层帮助角点定位
- 修改
H
o
u
r
g
l
a
s
s
Hourglass
Hourglass 结构并增加
f
o
c
a
l
l
o
s
s
focal~loss
focal loss 变体帮助更好地训练网络



2、细节
2.1、概览
网络预测两组热图,分别代表不同目标类别的左上角和右下角位置。同时为每个角点预测一个嵌入矢量,使同一目标的两个角点之间的嵌入距离很小。为产生紧密边界框,网络还预测偏移量来微调角点位置。使用热图,嵌入矢量,偏移量,通过简单的后处理获取最终边界框。

2.2、检测角点
预测两组热图,分别对应左上角和右下角,每组热图的每个通道分别对应一个目标类别,用二进制掩码指示该类角点位置。没有背景类通道。
在训练过程中,减少对正位置半径内的负位置的惩罚,而不是同等惩罚负位置。这是因为一对错误的角点检测,如果它们接近它们各自的
G
T
GT
GT 位置,仍然可以产生一个与
G
T
GT
GT 框充分重叠的预测框。如图
5
5
5。

半径根据目标大小来确定,确保半径内的一组点形成与
G
T
GT
GT 注释至少
t
I
o
U
t~IoU
t IoU 的边界框(实验中
t
t
t 取
0.3
0.3
0.3)。给定半径,惩罚减少由非标准
2
D
2D
2D 高斯函数
e
−
x
2
+
y
2
2
σ
2
e^{-\frac{x^{2}+y^{2}}{2 \sigma^{2}}}
e−2σ2x2+y2 确定, 中心在正位置,
σ
\sigma
σ 取半径的
1
3
\frac{1}{3}
31。
p
c
i
j
p_{cij}
pcij 是
c
c
c 类在预测热图的位置
(
i
,
j
)
(i,j)
(i,j) 上的分数,
y
c
i
j
y_{cij}
ycij 是非标准高斯扩充的
G
T
GT
GT 热图。作者设计
f
o
c
a
l
l
o
s
s
focal~loss
focal loss 的变体:
L
d
e
t
=
−
1
N
∑
c
=
1
C
∑
i
=
1
H
∑
j
=
1
W
{
(
1
−
p
c
i
j
)
α
log
(
p
c
i
j
)
if
y
c
i
j
=
1
(
1
−
y
c
i
j
)
β
(
p
c
i
j
)
α
log
(
1
−
p
c
i
j
)
otherwise
(1)
L_{d e t}=\frac{-1}{N} \sum_{c=1}^{C} \sum_{i=1}^{H}\sum_{j=1}^{W}\left\{\begin{array}{c}{\left(1-p_{c i j}\right)^{\alpha} \log \left(p_{c i j}\right)} & {\text { if } y_{c i j}=1} \\ {\left(1-y_{c i j}\right)^{\beta}\left(p_{c i j}\right)^{\alpha} \log \left(1-p_{c i j}\right)} & {\text { otherwise }}\end{array}\right.\tag1
Ldet=N−1c=1∑Ci=1∑Hj=1∑W{(1−pcij)αlog(pcij)(1−ycij)β(pcij)αlog(1−pcij) if ycij=1 otherwise (1)
其中,
N
N
N 是图像中目标的数量,
α
\alpha
α 和
β
\beta
β 是超参数,
α
=
2
\alpha=2
α=2,
β
=
4
\beta=4
β=4。
(
1
−
y
c
i
j
)
\left(1-y_{c i j}\right)
(1−ycij) 项减少了
G
T
GT
GT 位置附近的惩罚。
通常全卷积网络输出的热图比原输入图像小,将热图映射回原输入图像会损失一部分精度,这对小目标的检测影响较大。作者通过在映射回原输入分辨率前预测位置偏移量校正角点位置来解决这一问题。
o
k
=
(
x
k
n
−
⌊
x
k
n
⌋
,
y
k
n
−
⌊
y
k
n
⌋
)
(2)
o_{k}=\left(\frac{x_{k}}{n}-\left\lfloor\frac{x_{k}}{n}\right\rfloor, \frac{y_{k}}{n}-\left\lfloor\frac{y_{k}}{n}\right\rfloor\right)\tag2
ok=(nxk−⌊nxk⌋,nyk−⌊nyk⌋)(2)
所有类别的左上角共享一组偏移,所有类别的右下角共享一组偏移。训练时,在
G
T
GT
GT 角点位置使用
S
m
o
o
t
h
L
1
Smooth~L1
Smooth L1 损失:
L
o
f
f
=
1
N
∑
k
=
1
N
SmoothL1Loss
(
o
k
,
o
^
k
)
(3)
L_{o f f}=\frac{1}{N} \sum_{k=1}^{N} \text { SmoothL1Loss }\left(\boldsymbol{o}_{k}, \hat{\boldsymbol{o}}_{k}\right)\tag3
Loff=N1k=1∑N SmoothL1Loss (ok,o^k)(3)
2.3、角点分组
为了将检测到的左上角点和右下角点分组,生成最终边界框。网络为每个检测到的角点预测一个嵌入矢量,当左上角和右下角属于同一边界框时,嵌入的距离很小。
使用
e
t
k
e_{tk}
etk 和
e
b
k
e_{bk}
ebk 分别表示目标
k
k
k 左上角和右下角的嵌入矢量。使用
p
u
l
l
pull
pull 损失将角点组合,
p
u
s
h
push
push 损失将角点分离。
L
pull
=
1
N
∑
k
=
1
N
[
(
e
t
k
−
e
k
)
2
+
(
e
b
k
−
e
k
)
2
]
(4)
L_{\text {pull}}=\frac{1}{N} \sum_{k=1}^{N}\left[\left(e_{t_{k}}-e_{k}\right)^{2}+\left(e_{b_{k}}-e_{k}\right)^{2}\right]\tag4
Lpull=N1k=1∑N[(etk−ek)2+(ebk−ek)2](4)
L
p
u
s
h
=
1
N
(
N
−
1
)
∑
k
=
1
N
∑
j
=
1
j
≠
k
N
max
(
0
,
Δ
−
∣
e
k
−
e
j
∣
)
(5)
L_{p u s h}=\frac{1}{N(N-1)} \sum_{k=1}^{N} \sum_{j=1 \atop j \neq k}^{N} \max \left(0, \Delta-\left|e_{k}-e_{j}\right|\right)\tag5
Lpush=N(N−1)1k=1∑Nj=kj=1∑Nmax(0,Δ−∣ek−ej∣)(5)
其中,
e
k
e_k
ek 是
e
t
k
e_{tk}
etk 和
e
b
k
e_{bk}
ebk 的均值,
Δ
\Delta
Δ 等于
1
1
1。和偏移损失类似,只在
G
T
GT
GT 角点位置计算损失。
2.4、角点池化
局部视觉线索很难确定一个点是否为角点。为确定左上角点,需要水平向右查看目标的上边界,垂直向下查看目标的左边界。
假如要确定位置
(
i
,
j
)
(i,j)
(i,j) 是否为左上角点,
f
t
f_t
ft 和
f
l
f_l
fl 为左上角点池化层的输入特征图,
f
t
i
j
f_{tij}
ftij 和
f
l
i
j
f_{lij}
flij 分别为
f
t
f_t
ft 和
f
l
f_l
fl 在位置
(
i
,
j
)
(i,j)
(i,j) 的向量。对于
H
×
W
H\times W
H×W 的特征图,角点池化层首先将
f
t
f_t
ft 上位置
(
i
,
j
)
(i,j)
(i,j) 和
(
H
,
j
)
(H,j)
(H,j) 之间的所有特征向量最大池化为
t
i
j
t_{ij}
tij,将
f
l
f_l
fl 上位置
(
i
,
j
)
(i,j)
(i,j) 和
(
i
,
W
)
(i,W)
(i,W) 之间的特征向量最大池化为
l
i
j
l_{ij}
lij。最后将
t
i
j
t_{ij}
tij 和
l
i
,
j
l_{i,j}
li,j 一起处理。该过程可以表示为:
t
i
j
=
{
max
(
f
t
i
j
,
t
(
i
+
1
)
j
)
if
i
<
H
f
t
H
j
otherwise
(6)
t_{i j}=\left\{\begin{array}{cc}{\max \left(f_{t_{i j}}, t_{(i+1) j}\right)} & {\text { if } i<H} \\ {f_{t_{H j}}} & {\text { otherwise }}\end{array}\right.\tag6
tij={max(ftij,t(i+1)j)ftHj if i<H otherwise (6)
l
i
j
=
{
max
(
f
l
i
j
,
l
i
(
j
+
1
)
)
if
j
<
W
f
l
i
W
otherwise
(7)
l_{i j}=\left\{\begin{array}{c}{\max \left(f_{l_{i j}}, l_{i(j+1)}\right)} & {\text { if } j<W} \\ {f_{l_{i W}}} & {\text { otherwise }}\end{array}\right.\tag7
lij={max(flij,li(j+1))fliW if j<W otherwise (7)
使用基于元素的
m
a
x
max
max 运算。
t
i
j
t_{ij}
tij 和
l
i
j
l_{ij}
lij 可以如图
6
6
6 的方式计算。

预测模块如图
7
7
7 所示。该模块的第一部分是修正的残差块。使用角点池化模块取代第一个
3
×
3
3\times3
3×3 卷积块。角点池化模块首先使用两个
128
128
128 通道的
3
×
3
3\times3
3×3 卷积处理主骨网络输出的特征,然后使用角点池化层。将池化后的特征输入
256
256
256 通道的
3
×
3
C
o
n
v
−
B
N
3\times3~Conv-BN
3×3 Conv−BN 层,然后与
s
h
o
r
t
c
u
t
shortcut
shortcut 映射求和。修正残差块后面连接
256
256
256 通道的
3
×
3
3\times3
3×3 卷积模块,以及
3
3
3 个
C
o
n
v
−
R
e
L
U
−
C
o
n
v
Conv-ReLU-Conv
Conv−ReLU−Conv 层,产生热图、嵌入矢量和偏移量。

2.5、Hourglass Network
网络主骨由两个 h o u r g l a s s hourglass hourglass 组成。不再使用最大池化,使用步长为 2 2 2 的设置来减小特征分辨率。特征分辨率减小 5 5 5 次,最大通道数 512 512 512。采用最近邻上采样。输入 H G HG HG 之前使用 7 × 7 7\times7 7×7 卷积模块将输入分辨率减小 4 4 4 倍。
使用中间监督,但是不将中间预测加回到网络(损害网络性能)。只使用整个网络的最后一层来预测(因为重复下采样-上采样过程,而且 s h o r t c u t shortcut shortcut,所以最后一层融合了局部和全局信息以后不需要多尺度预测)。
3、实验
损失函数:
L
=
L
d
e
t
+
α
L
p
u
l
l
+
β
L
p
u
s
h
+
γ
L
o
f
f
(8)
L=L_{d e t}+\alpha L_{p u l l}+\beta L_{p u s h}+\gamma L_{o f f}\tag8
L=Ldet+αLpull+βLpush+γLoff(8)
其中,
α
\alpha
α 和
β
\beta
β 等于
0.1
0.1
0.1,
γ
\gamma
γ 等于
1
1
1。







4、总结
本文将目标检测任务转化为关键点检测,从而避免使用大量的 a n c h o r anchor anchor。角点检测需要解决以下问题:
- 如何定位角点
- 如何将角点成对匹配
第一个问题可以通过预测热图来解决。考虑到角点的特殊性,作者提出了角点池化方法来帮助角点定位。同时为了减小下采样—上采样过程造成的定位误差,预测偏移量来修正角点的位置。
对于第二个问题,网络为每个检测的角点预测嵌入矢量,将嵌入距离小的角点组成一对。训练时通过 p u l l pull pull 损失和 p u s h push push 损失来学习该过程。
5、思考
C o r n e r N e t CornerNet CornerNet 主要受人体姿态估计相关算法的启发。在多人姿态估计算法中,自顶向下的方法通常需要首先预测人体目标边界框,然后预测相应的人体目标姿态。因此可以考虑将人体目标检测与姿态估计统一在一个网络框架中,提升多人姿态估计算法效率。对本文的算法进行相应的调整,为实现这一目标提供了可能。