模型四元素:
- 背景
- 模型结构与输出
- 后处理
- 损失函数
背景
目标检测就是识别出图中物体的位置,目前常用物体检测器详尽列出潜在物体的位置并对每个位置进行分类,这比较低效,并且需要额外的后处理。 而centernet,作为一个anchor free模型,将对象bounding box的中心点进行建模,使用关键点估计来找到中心点,并回归到所有其他对象属性,例如大小,3D位置。
与anchor系列模型的区别:
- anchor free模型一般通过目标的中心点建模,基于anchor的模型通过预先设置的anchor建模。
- 基于anchor的模型需要设置有关anchor的许多超参数。
- 每个位置的样本数不同: anchor free模型输出特征图上的一个位置只设置一个样本,而基于anchor的检测模型会设置多个样本(同一个位置设置多个不同形状anchor)。
- 正样本的确定方式不同:anchor free模型正样本通过位置确定,基于anchor的检测模型正样本通过IOU来确定
优点:
- centernet的输出分辨率大,下采样率只有4(output_stride=4),其他检测模型普遍为8~16。使其对小目标的召回效果比较好。
- centernet不需要nms,只需要找到heatmap的峰值就好。
缺点:
- 同一个类别的两个物体的中心点相同,模型只能给出一个物体检测框,原因是因为输出特征图同一个位置只设置一个样本,可以用类似fpn的结构来解决这个问题。
性能
Object Detection on COCO validation
model | backbone | fps | AP |
---|---|---|---|
CenterNet-DLA | DLA-34 | 28 | 39.2 |
CenterNet-HG | Hourglass-104 | 7.8 | 42.1 |
模型结构与输出
P代表中心点在原图的位置,R代表输出下采样率,也是输入输出特征图大小的比率。
预处理:将原图通过仿射变换变成512x512,除以255,减均值,除方差。
C: 类别的个数。
keypoint:以热力图的形式出现,预测目标框的中心点,代表该位置是目标中心点的置信度。
解析目标框(后处理)
- heatmap的峰值的位置就是目标的中心点。将模型heatmap的输出进行通过3x3的卷积核进行最大池化处理,保留局部最大值,然后选择每个类别的topk(100)个像素点,然后通过每个类的topk中(topk x C)选出所有类的topk。
- 通过topk个像素点的位置找到该点对应目标的wh和offset,最后解析出目标框。
- 现在解析出来的目标框的数量是topk个,需要通过阈值(0.3)过滤掉一部分置信度不高的预测结果。
损失函数
当centernet用于普通的目标检测时,其head分为三个部分:heatmap、reg、wh,对应三个损失的计算。
heatmap
目标是输入
I
∈
R
W
×
H
×
3
I\in R^{W\times H\times 3}
I∈RW×H×3,输出
Y
^
∈
[
0
,
1
]
W
R
×
H
R
×
C
\hat{Y} \in \left[ 0,1\right]^{\frac{W}{R} \times \frac{H}{R} \times C}
Y^∈[0,1]RW×RH×C,W和H是输入图片的宽和高,R是输出步长,C是keypoint的类别,比如用COCO做目标检测时,C就等于80。
当
Y
^
x
,
y
,
c
=
1
\hat{Y}_{x,y,c} =1
Y^x,y,c=1时代表检测到了keypoint,也就是检测到了目标。当
Y
^
x
,
y
,
c
=
0
\hat{Y}_{x,y,c} =0
Y^x,y,c=0时代表该位置是背景。
- 生成heatmap的ground truth:
Y
∈
[
0
,
1
]
W
R
×
H
R
×
C
Y \in \left[ 0,1\right]^{\frac{W}{R} \times \frac{H}{R} \times C}
- 根据该keypoint在原图的位置计算出该点在输出特征图上的相对位置
p
~
=
⌊
p
R
⌋
\tilde{p} =\left\lfloor \frac{p}{R} \right\rfloor
- 首先使用一个 Gaussian kernel将所有的keypoint绘制到heatmap上。
Y
x
y
c
=
exp
(
−
(
x
−
p
~
x
)
2
+
(
y
−
p
~
y
)
2
2
σ
2
)
Y_{xyc}=\exp \left( -\frac{\left( x-\tilde{p}_{x} \right)^{2} +\left( y-\tilde{p}_{y} \right)^{2} }{2\sigma^{2}} \right)
- 计算ground truth
Y
Y
Y
^
\hat{Y}
L
k
=
−
1
N
∑
x
y
c
{
(
1
−
Y
x
y
c
^
)
α
log
(
Y
^
x
y
c
)
i
f
Y
x
y
c
=
1
(
1
−
Y
x
y
c
)
β
(
Y
^
x
y
c
)
α
log
(
1
−
Y
^
x
y
c
)
o
t
h
e
r
w
i
s
e
L_{k}=\frac{-1}{N} \sum^{}_{xyc}\begin{cases}\left( {}1-\hat{Y_{xyc}} \right)^{\alpha } \log \left( \hat{Y}_{xyc} \right) &if\ Y_{xyc}=1\\ \left( 1-Y_{xyc}\right)^{\beta }\left( \hat{Y}_{xyc}\right)^{\alpha } \log \left( 1-\hat{Y}_{xyc} \right) &otherwise\end{cases}
α
\alpha
β
\beta
α
=
2
\alpha=2
β
=
4
\beta=4
reg
由于输出步长的会导致离散误差的产生,所以需要计算每个keypoint的local offset(局部偏移)
O
^
∈
R
W
R
×
H
R
×
2
\hat{O} \in R^{\frac{W}{R} \times \frac{H}{R} \times 2}
O^∈RRW×RH×2。比如一个点a在原图的位置是(5,7),由于输出步长为4,所以a点映射到输出特征图上的位置应该为(1.25,1.75),但是因为要取整,所以a点在特征图上的位置就变成了(1,1),0.25和0.75就变成了局部偏移量。
L
o
f
f
=
1
N
∣
O
^
p
~
−
(
p
R
−
p
~
)
∣
L_{off}=\frac{1}{N} \left| \widehat{O}_{\widetilde{p} } -\left( \frac{p}{R} -\widetilde{p} \right) \right|
Loff=N1∣∣∣O
p
−(Rp−p
)∣∣∣
其中
p
~
=
⌊
p
R
⌋
\tilde{p} =\left\lfloor \frac{p}{R} \right\rfloor
p~=⌊Rp⌋
wh
假如
(
x
1
(
k
)
,
y
1
(
k
)
,
x
2
(
k
)
,
y
2
(
k
)
)
(x^{\left( k\right) }_{1},y^{\left( k\right) }_{1},x^{\left( k\right) }_{2},y^{\left( k\right) }_{2})
(x1(k),y1(k),x2(k),y2(k)) 为目标k的bounding box,那么
s
k
=
(
x
2
(
k
)
−
x
1
(
k
)
,
y
2
(
k
)
−
y
1
(
k
)
)
s_{k}=(x^{\left( k\right) }_{2}-x^{\left( k\right) }_{1},y^{\left( k\right) }_{2}-y^{\left( k\right) }_{1})
sk=(x2(k)−x1(k),y2(k)−y1(k))就是目标k的大小,因为坐标都已经除以下采样率了,所以计算出来的是在输出特征图上的大小,解析目标框后乘以下采样率就会得到在原图上的坐标。
L
s
i
z
e
=
1
N
∑
k
=
1
N
∣
S
^
p
k
−
s
k
∣
L_{size}=\frac{1}{N} \sum^{N}_{k=1} \left| \widehat{S}_{p_{k}} -s_{k}\right|
Lsize=N1∑k=1N∣∣∣S
pk−sk∣∣∣
loss
L
d
e
t
=
L
k
+
0.1
×
L
s
i
z
e
+
L
o
f
f
L_{det}=L_{k}+0.1\times L_{size}+ L_{off}
Ldet=Lk+0.1×Lsize+Loff
版权声明:本文为CSDN博主「superjfhc」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_41779359/article/details/116352447
暂无评论