paper: https://arxiv.org/pdf/1904.07850.pdf
code
文章目录
1. Motivation
大部分的目标检测网络都需要详尽的可能的目标定位以及分类的anchor,这是非常浪费,不高效并且要引入预处理操作,如NMS。
在这篇论文中,作者提出了一个不同的方法,成为CenterNet,将物体建模为a single point———也就是一个物体的中心点。该检测器使用关键点估计方法去找到中心点,并回归其他目标属性(类别C,长宽,偏移量,预测值,3D位置等等)。
Center是一个end-to-end,simpler,faseter的目标检测器。可以应用于2D目标检测,3D目标检测以及姿态估计上面。
2. Differences
CenterNet与单阶段的anchor-based方法有关,一个中心点可以作为一个anchor,但有以下3种区别。
①CenterNet仅仅基于location挑选‘anchor’制定为正样本,而不是像之前方法,是挑选anchor与Ground Truth的IOU较大的作为正样本。因此对于前景和背景就没有定义thresholds。
②对于anchor,CenterNet只有正样本anchor,不需要NMS后处理操作。作者只需要在heatmap的peaks峰值上提取特征。
③与传统方法相比(步长为16的下采样),CenterNet可以获得一个更大的分辨率(步长为4的下采样)。
3.Related Work
CenterNet主要基于CornerNet和Hourglass Network。
3.1 CornerNet
3.2 Hourglass Network
4. loss
4.1 物体损失
图像定义为
I
∈
R
W
×
H
×
3
I \in R^{W \times H \times 3}
I∈RW×H×3,本文的目标是制造一个包含关键点的热力图heatmap
Y
^
∈
[
0
,
1
]
W
R
×
H
R
×
C
\hat{Y} \in [0,1]^{\frac{W}{R} \times \frac{H}{R} \times C}
Y^∈[0,1]RW×RH×C ,C就是预测的类别的总数,R为下采样因子,本文设置为4。
基于物体的损失采用和focal loss相似的参数和公式。分为
Y
x
y
c
=
1
Y_{xyc} =1
Yxyc=1以及
Y
x
y
c
=
0
Y_{xyc} = 0
Yxyc=0的两种情况,
Y
x
y
c
=
1
Y_{xyc} =1
Yxyc=1表示ground truth keypoint中心点,
Y
x
y
c
=
0
Y_{xyc} =0
Yxyc=0表示背景。本文采用了几个不同的全卷积编码-解码网络来预测图像 I 得到的
Y
^
\hat{Y}
Y^:stacked hourglass network , upconvolutional residual networks (ResNet), deep layer aggregation (DLA) 。
对于 每一个类别class为c的
p
∈
R
2
p \in R^2
p∈R2Ground Truth Keypoints,首先会进行下采样对于映射成
p
~
=
⌊
p
R
⌋
\tilde p =\left \lfloor \frac{p}{R} \right \rfloor
p~=⌊Rp⌋。然后将所有的关键点通过高斯核函数
Y
x
y
c
=
e
x
p
(
(
−
(
x
−
p
x
~
)
2
+
(
y
−
p
~
y
)
2
2
σ
2
)
Y_{xyc}=exp((-\frac{(x - \tilde{p_x})^2 + (y-\tilde p_y)^2}{ 2 \sigma^2})
Yxyc=exp((−2σ2(x−px~)2+(y−p~y)2)分散到整张heatmap图上
Y
^
∈
[
0
,
1
]
W
R
×
H
R
×
C
\hat{Y} \in [0,1]^{\frac{W}{R} \times \frac{H}{R} \times C}
Y^∈[0,1]RW×RH×C。如下图所示,一张图要有2个相同的类猫,如果对于同个类 c (同个关键点或是目标类别)有两个高斯函数发生重叠,我们选择高斯核对应元素最大的,至于其他类,发生了重合也不用考虑,因为都分布在了C个通道上了。
基于focal loss的物体逻辑回归损失的公式如下:
4.2 偏移损失offset loss
4.3 大小损失
下面的公式表示的是第K个bounding box,他的类别为 C k C_k Ck,表示为 ( x 1 ( k ) , y 1 ( k ) , x 2 ( k ) , x 2 ( k ) ) (x_1 ^{(k)} , y_1 ^{(k)}, x_2 ^{(k)}, x_2 ^{(k)} ) (x1(k),y1(k),x2(k),x2(k))。
因此它的中心点就是两点坐标的平均:
其中
s
k
=
(
X
2
(
k
)
−
X
1
(
k
)
,
y
2
(
k
)
−
y
1
(
k
)
)
s_k = (X_2 ^{(k)} - X_1 ^{(k)}, y_2 ^{(k)} - y_1 ^{(k)} )
sk=(X2(k)−X1(k),y2(k)−y1(k))表示 要回归的每一个object k的大小。
同样的对于所有的分类,使用
S
^
∈
R
(
W
/
R
)
×
(
H
/
R
)
×
2
\hat S \in R^{(W/R) \times (H/R) \times 2}
S^∈R(W/R)×(H/R)×2作为网络的输出。
4.4 总损失
5. Inference
网络在每一个location预测
C
+
4
C+4
C+4个outputs,其中的4所代表的就是根据heatmap的置信度
Y
^
x
,
y
,
c
\hat Y_{x,y,c}
Y^x,y,c,偏移offset和size的width与height2维。C(如果是coco就是80)就是代表着heatmap,详细如下(参考):
(1)HeatMap,大小为(W/4,H/4,80),输出不同类别(80个类别)物体中心点的位置。
(2) Offset,大小为(W/4,H/4,2),对HeatMap的输出进行精炼,提高定位准确度。
(3) Height&Width,大小为(W/4,H/4,2),预测以关键点为中心的检测框的宽高。
在HeatMap(W/4,H/4,80)的特征图上,挑选一个peaks,其value满足大于周围8个相连领域的value,一共挑选100个,用于coco-eval,让
P
^
c
\hat P_c
P^c作为关于某个类c的n个检测的中心点,
P
^
=
(
x
^
i
,
y
^
i
)
i
=
1
n
\hat P={(\hat x_i, \hat y_i)}^n_{i=1}
P^=(x^i,y^i)i=1n,每一个关键点的位置通过坐标给出
(
x
i
,
y
i
)
(x_i, y_i)
(xi,yi),接着使用
Y
^
x
,
y
,
c
\hat Y_{x,y,c}
Y^x,y,c计算其置信度,然后结合offset分支和size分支,最终得到经过偏移后的4个坐标点,表示如下:
其中,
δ
x
i
^
,
δ
y
i
^
=
O
^
x
i
^
,
y
i
^
\delta \hat{x_i}, \delta \hat{y_i} = \hat{O}_{\hat{x_i},\hat{y_i}}
δxi^,δyi^=O^xi^,yi^ 表示为offset预测,
(
w
i
^
,
h
i
^
=
S
^
x
^
i
,
y
^
i
)
(\hat{w_i}, \hat{h_i}= \hat{S}_{\hat x_i, \hat y_i})
(wi^,hi^=S^x^i,y^i)表示预测宽高的大小。所有的输出都是不需要NMS的。基于peak的关键点提取作为一个搞笑的NMS替代方式,并且可以被3x3的max pooling方法所取代。
下图中,top从左到右,分别为目标检测输出的heatmap,offset prediction和size。
References
https://blog.csdn.net/c20081052/article/details/89358658
https://zhuanlan.zhihu.com/p/72373052
https://zhuanlan.zhihu.com/p/45002720
https://zhuanlan.zhihu.com/p/41825737